Você está na página 1de 1422

Aula 00

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

AULA 00

SUMÁRIO PÁGINA
Apresentação 01
- Lógica de Programação 11
- Funções e Procedimentos 32
- Complexidade de Algoritmos 36
- Métodos de Ordenação 42
Lista de Exercícios Comentados 64
Gabarito 74

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

APRESENTAÇÃO.

Olá, pessoal. Sejam bem-vindos ao Curso Regular de Desenvolvimento de Software!


Galera, depois de receber dezenas de pedidos requisitando um curso que ajudasse
alunos a se prepararem com certa antecedência para concursos, resolvemos lançar
cursos regulares! Esse curso está redondo, muito maduro e com um bocado de
exercícios. Aqui você encontrará o conteúdo mais comum em qualquer edital de
engenharia de software.

O cenário político/fiscal atual não está muito favorável para os concursos, porém,
sa é a hora de começar a estudar e ter uma vantagem sobre os concorrentes.
Precisa falar que Desenvolvimento de Software é importante? Precisa falar que você
tem que saber tudo sobre a Arquitetura Java EE, sobre Algoritmos de Ordenação,
Padrões de Projeto, HTML/CSS/JavaScript? Precisa falar que cai muito em discursivas
e que, por exemplo, o tema da última discursiva do Senado foi Estrutura de Dados?

DÚVIDAS DOS ALUNOS

TOP 5
1. Peço encarecidamente que leiam as instruções dessa primeira aula. Eu sei que é chato, mas assim
nós alinhamos nossas expectativas a respeito do curso.
16712855225

2. Essa é a Aula Demonstrativa (está disponível para todos na internet) – o restante do conteúdo estará
disponível na Aula 01 (apenas para aqueles que adquirirem o curso).

3. Esse curso não possui vídeo-aulas! Estamos trabalhando para disponibilizá-las em breve, nesse
primeiro semestre – talvez ainda não seja possível disponibilizá-las para esse curso.

4. Esse curso contempla somente aquilo que está em seu cronograma. Ele não contempla todo edital de
tecnologia da informação, nem outras disciplinas, nem discursivas, estudos de caso, etc.

5. Existem questões de Múltipla Escolha (A, B, C, D, E) e existem questões de Certo/Errado (C, E). Quando
não há itens para escolha na questão, é porque a questão é da Modalidade Certo/Errado.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

O PROFESSOR

Uma breve apresentação: meu nome é Diego Carvalho, bacharel em Ciência da


Computação pela Universidade de Brasília, pós-graduado em Gestão de Tecnologia
da Informação na Administração Pública e Analista de Finanças e Controle da
Secretaria do Tesouro Nacional. Já passei por esses perrengues de concurseiro e sei
de duas coisas: a estrada é difícil, mas o prêmio compensa! E muito!

www.facebook.com/professordiegocarvalho

ÁREA ÓRGÃOS PARA OS QUAIS JÁ MINISTREI CURSOS

Agência ANCINE ANTAQ ANATEL

Jurídica TRT/1 TRT/2 TRT/3 TRT/4


TJ/BA CNMP MP/PB TRT/15
Legislativa CÂMARA DOS
DEPUTADOS
Auditoria TCE/RS TCE/SP TCE/CE TCM/GO
TCU TCM/SP
Fiscal ISS/SP ISS/BA

Outros CEF DATAPREV DEPEN INMETRO

16712855225

Neste curso, contaremos também com a Professora Mayara Rosa! Ela também é
bacharel em Ciência da Computação na Universidade de Brasília (UnB), pós-
graduada em Engenharia de Sistemas e recentemente tomou posse como Auditora
Federal de Controle Externo no Tribunal de Contas da União (TCU). Ela é a nova
professora do Estratégia Concursos! ;)

Galera, lá no site, nós – professores – temos algumas métricas para medir se o nosso
desempenho nos cursos está bacana! Os alunos podem avaliar com notas e,
inclusive, escrever anonimamente o que acharam do professor e do curso.
Apresento abaixo o resultado de alguns cursos ministrados recentemente. Portanto,
confiem em mim... vocês vão aprender muito com esse curso!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

O CURSO...

Antes de começar o curso, vamos alinhar algumas expectativas! O curso que eu


proponho abrangerá todo o conteúdo do meu cronograma, entretanto é impossível
e inviável esgotar cada ponto do edital em uma aula escrita. Como se ministra Java
em uma aula? Teríamos uma aula de 800 páginas e não chegaríamos nem perto de
matar todo conteúdo! Imaginem agora cada ponto do Edital.

Portanto, vou direcioná-los pelo conteúdo da melhor maneira possível. O nosso


foco é ter uma visão geral, mas objetiva do que de fato cai em prova e, não,
elucubrações sobre cada tema. Meu foco aqui é te fazer passar! Eu sei como é
complicado ler muita coisa (ainda mais de TI) e vocês têm outras disciplinas para
estudar. Logo, vou ser simples e objetivo! Tranquilo? ;)

Além disso, o cronograma será seguido com a maior fidelidade possível, mas ele
não é estático e poderá haver alterações no decorrer do curso. Eventualmente,
posso tirar o conteúdo de uma aula e colocar em outra de forma que o estudo de
vocês fique mais lógico, coeso e fácil de acompanhar; posso também inverter a
ordem das aulas (adiantar uma aula e atrasar outra) – sem prejudicá-los.

Além disso, vamos usar questões de diversas bancas. Enfim, confiem em mim: o
curso vai ajudar bastante! Qualquer dúvida, é só me chamar! Caso haja alguma
reclamação, problema, sugestão, comentários, erros de digitação, etc, podem enviar
para o nosso fórum que eu tento responder da maneira mais tempestiva possível.
Ainda duvidam que PDF não dá certo com Concursos de TI? Veja abaixo:

6º Lugar – ISS/Salvador 16712855225

https://www.youtube.com/watch?v=b1w4H3l6mC4#t=1678

1º Lugar – TRT/RJ
https://www.facebook.com/video.php?v=790616534367672

2º Lugar – ISS/Salvador
https://www.youtube.com/watch?v=vmU1n1J-aqQ

1º Lugar – Dataprev
http://www.estrategiaconcursos.com.br/blog/entrevista-andre-furtado-aprovado-em-1o-lugar-
no-concurso-dataprev-para-o-cargo-de-analistaarea-de-tecnologia-da-informacao/

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

CRONOGRAM

Aula Data Tópicos do Edital


00 24/03 Lógica de Programação. Tipos de Dados. Operadores e Expressões.
Estruturas de Controle, Seleção, Repetição e Desvio. Recursividade.
Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort,
ShellSort, MergeSort e HeapSort.

01 01/04 Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas.


Árvore. Grafos. Hashing. Estrutura de Arquivos.

02 15/04 Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de


Projeto GRASP.

03 01/05 Java SE. Conceitos Básicos. Plataforma Java. Compilação e


Interpretação. Passagem por Valor e Referência. Empacotamento. Raiz.
Identificadores. Blocos e Comandos. Comentários. Palavras
Reservadas. Tipos Primitivos. Operadores. Vetores. Conversão de
Tipos. Controle de Fluxos. Classes. Objetos. Atributos. Métodos.
Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica.
Tipos Enumerados. Anotações. Classes Internas. Reflexão e Genéricos.
Tratamento de Exceções. Sincronismo e Multithreading. Coleções.
Streams e Serialização. Classes e Operações de I/O. Novidades Java 8.

04 15/05 Arquitetura Java EE. JSP. Servlets. JSF.


16712855225

05 01/06 JPA. Hibernate. JDBC. JVM.

06 15/06 Spring. Struts. JMS. JNDI. JTA. JSTL.

07 01/07 HTML e CSS.

08 15/07 JavaScript. JQuery. AJAX.

09 01/08 DHTML. XHTML. XML. XSLT. XSD.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

10 15/08 Sistemas Móveis. Android. iOS. Segurança no Desenvolvimento.


Compiladores e Interpretadores.

11 01/09 Ferramentas de Controle de Versão. SVN. CVS. Git. Análise Estática de


Código-Fonte. SonarQube. Integração Contínua (e outros)

12 15/09 Framework .NET, C#, Visual Basic, ASP.NET e Visual Studio (Prof.
Mayara Rosa)

13 01/10 Delphi e PHP (Prof. Mayara Rosa).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

AS AULAS E AS DICAS

1 – Parágrafos pequenos: observem que os parágrafos 2 – Visão Geral: não se atenham a detalhes antes de
têm, no máximo, cinco linhas. Isso serve para que a entender o básico. Por que? Ora, não há nada mais
leitura não fique cansativa e para que vocês não irritante do que ir para uma prova que vai cair, por
desanimem no meio do material! Para tal, eu tento dividir exemplo, RUP, saber vários detalhes, mas não saber as
as disciplinas de maneira que as aulas fiquem objetivas e fases e disciplinas. Portanto, caso estejam iniciando os
pequenas (em termos de teoria), mas extensa (em estudos sobre uma matéria, foquem em saber o básico
termos de exercícios). para depois se especializarem.
3 – Destaques em vermelho: quase todos os 4 – Façam muitos exercícios: ler várias bibliografias é
parágrafos possuem alguma palavra ou frase destacada muito trabalhoso e, geralmente, não vale o custo-
em negrito e em vermelho. Isso ocorre por suas razões: benefício. Acredito que o que funciona mesmo é entender
primeiro, para enfatizar alguma informação importante; o básico, depois fazer muitos exercícios e,
segundo, para facilitar a leitura vertical, i.e., após uma eventualmente, caso encontrarem algo que não
primeira leitura, a segunda pode ser passando apenas souberem, pesquisem-no separadamente. Além disso,
pelos pontos em destaque. você vai pegando as “manhas” da banca.
5 – Linguagem natural: essa é uma aula para ser lida, o 6 – Façam resumos: essa dica somente serve caso
que por si só já pode ser cansativo. Tentarei colocar a vocês tenham disponibilidade. Caso haja pouco tempo
linguagem mais coloquial possível, simulando uma para estudar ou pouco tempo até a prova, não compensa!
conversa. Portanto, caso virem frases ou palavras em Se não, façam resumos organizados, pois eles
itálico, ou é uma palavra estrangeira ou é a simulação de economizarão um bom tempo de estudo em suas
uma conversa com vocês. Pode dar um exemplo, próximas provas e sempre que descobrirem novas
professor? Acabei de dar! :-) informações, insiram-nas no resumo.
7 – Diversas figuras: essas aulas estarão em constante 8 – Revisem antes da prova: não adianta querer
evolução, sempre à procura de explicar as matérias de estudar coisas novas até o último minuto antes da prova
maneira mais compreensível e com novas e não revisar o que estudou há um mês. Vocês irão
informações/questões. Para tal, na minha opinião, é esquecer e irão se irritar na hora da prova por não
fundamental a utilização de figuras, gráficos, painéis, etc. lembrarem de conceitos simples. Tirem uma semana
Em minha experiência, é bem mais fácil memorizar a para revisar seus resumos, decorarem algumas coisas
partir de imagens. e, certamente, irão mais confiantes para a prova.
9 – Fazer Exercícios: muitos exercícios é o meio pelo 10 – Simulado Final: ora, fazer um bloco de questões
qual vocês se situarão. Como assim, professor? É na hora 16712855225
depois de estudar a teoria é tranquilo. No entanto,
de fazer os exercícios que vocês descobrirão se estão lembrem-se que a memória de vocês não é infinita e
bem ou mal e avaliarão se precisam estudar mais ou vocês têm um milhão de outras coisas para estudar e
menos. Para tal, há um quadrinho ao final de cada bloco decorar. Portanto, se possível, ao fim do curso faremos
de exercícios para vocês anotarem a quantidade de um simulado com questões escolhidas que foram
questões respondidas corretamente ou incorretamente. comentadas dentro das aulas.

Bem, pessoal! É isso... sejam bem-vindos! Espero que vocês curtam e tenham uma
leitura leve e despojada da aula, mas com muito foco, atenção e dedicação.
Qualquer dúvida, podem entrar em contato comigo – ficarei feliz em ajudá-los. Bons
estudos, estou torcendo por vocês!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LÓGICA DE PROGRAMAÇÃO

Vamos falar sobre Lógica de Programação! Em primeiro lugar, por que chamamos
de lógica? Porque é necessário utilizar a lógica para resolver um problema
computacional. Como assim? Precisamos de um encadeamento ou uma sequência
de pensamentos para alcançar um determinado objetivo. Nós podemos descrever
esses pensamentos como uma sequência de instruções ou passos.

Professor, o que seria uma instrução? É um conjunto de regras ou normas definidas


para a realização ou emprego de algo, indicando ao computador uma ação
elementar a ser executada. Bem, esses conceitos são muito básicos e vocês já devem
estar bastante acostumados, por isso vamos ver rapidamente. Um conjunto de
instruções formam um algoritmo:

Algoritmo: conjunto predeterminado e bem definido de passos destinados à


solução de um problema, com um número finito de etapas.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Professor, você pode dar um exemplo? Sim, o exemplo mais comum da bibliografia
é mostrado acima: uma receita de bolo. Observem que para fazer um bolo
(solucionar um problema), é necessário seguir uma sequência de passos finitos e
predeterminados. No fim das contas, grosso modo, um software nada mais é do
que a representação de um algoritmo.

Professor, todos os programas que eu utilizo no meu computador são representações


de algoritmos? Sim! Inclusive o joguinho de Paciência que eu curto? Sim! Mas até
mesmo os apps que eu utilizo no celular? Eles também! Todos os softwares (de
desktop, notebook, smartphone, tablet, geladeira, relógio, entre outros) são
representações de algoritmos.

Então, basta que eu escreva um conjunto de passos em qualquer língua que o meu
computador realiza a tarefa que eu quiser? Claro que não! Computadores não
entendem, por exemplo, português – eles entendem 0 e 1 (na verdade, eles
entendem presença ou ausência de tensão elétrica), portanto necessário
representar esses algoritmos por meio de uma linguagem de programação.

Como assim, professor? Pessoal, um computador é


uma grande calculadora. No entanto, ele é “burro”,
ele só calcula o que mandam-no calcular.
linguagens de programação surgem como uma
solução para abstrair a comunicação entre seres
humanos e computadores. Na imagem ao lado, a ordem do programador era:
“Computador, escreva na tela: Hello World!”.

Bem, acho que todo mundo já ouviu falar alguma vez na vida em Código-Fonte.
Todo software possui um código-fonte, que é um conjunto de palavras organizado
de acordo com regras específicas, formando um ou mais algoritmos. Essas palavras
16712855225

que formam o algoritmo são escritas utilizando uma linguagem de programação.


Esse código-fonte é traduzido e posteriormente executado pelo usuário.

Pessoal... se eu não souber uma linguagem de programação, eu posso escrever um


algoritmo utilizando um pseudocódigo! O que é isso, professor? É uma forma
genérica de escrever um algoritmo, utilizando uma linguagem simples sem
necessidade de conhecer a sintaxe de nenhuma linguagem de programação. Trata-
se de um pseudo-código, logo não pode ser executado em um sistema real.

Um tipo de pseudocódigo é o Portugol (ou Português Estruturado)! Trata-se de uma


simplificação extrema da língua portuguesa, limitada a pouquíssimas palavras e

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

estruturas que têm significado pré-definido, na medida em que deve seguir um


padrão. Emprega uma linguagem intermediária entre a linguagem natural e a
linguagem de programação para descrever os algoritmos.

Embora o Portugol seja uma linguagem bastante simplificada, possui todos os


elementos básicos e uma estrutura semelhante à de uma linguagem de
programação de computadores. Portanto resolver problemas com português
estruturado pode ser uma tarefa tão complexa quanto a de escrever um programa
em uma linguagem de programação qualquer.

início
<instruções>

se <teste> então
<instruções>
senão
<instruções>
fim_se
fim

Além do português estruturado, é possível representar um algoritmo também por


meio de um Fluxograma! O que é isso, professor? É uma espécie de diagrama
utilizado para documentar processos, ajudando o leitor a visualizá-los,
compreendê-los mais facilmente e encontrar falhas ou problemas de eficiência,
como mostra a imagem abaixo.

16712855225

Os principais símbolos de um Fluxograma são:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Bem, nós vimos então que podemos representar algoritmos por meio de
Linguagens de Programação, Pseudocódigo ou Fluxogramas! Em geral, os
fluxogramas são mais utilizados para leigos; pseudocódigo para usuários um pouco
mais avançados; e linguagens de programação para os avançados. Agora vamos
falar de conceitos mais específicos: constantes, variáveis e atribuições!

Constantes são dados que simplesmente não variam com o tempo, i.e., possuem
sempre um valor fixo invariável. Por exemplo: a constante matemática é (sempre
foi e sempre será) igual a 3.141592 – esse valor não mudará! Professor, e o que seria
uma variável? São espaços na memória do computador reservados para guardar
informações ou dados!

Em geral, variáveis são associadas a posições na Memória RAM, armazenando


16712855225

diversos tipos de dados que veremos com detalhes à frente! Ela possui um nome
identificador que abstrai o nome do endereço na memória que ela ocupa.
Observem a imagem abaixo: existe uma variável (espaço em memória) chamada
numeroDaConta em que se armazena o valor 4823.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

O conteúdo de uma variável pode ser alterado, consultado ou apagado diversas


vezes durante a execução de um algoritmo, porém o valor apagado é perdido.
Bacana, mas e a atribuição? Bem, trata-se de uma notação para associar um valor
a uma variável, i.e., armazenar o conteúdo no endereço de memória específico.
Cada linguagem de programação adotará uma maneira de representá-la.

Aqui, não iremos nos prender a uma linguagem de programação, vamos adotar o
Português Estruturado! A notação de atribuição é representada por uma seta
apontando para a esquerda do valor para o identificador, podendo ser:

Variável  Constante: dataDeNascimento  1988


Variável  Variável: endereço  cidade
Variável  Expressão: idade  (anoAtual anoDeNascimento)

Vamos falar agora sobre tipos de dados! Em geral, eles se dividem em dois grupos:
Dados Elementares e Dados Estruturados. Só uma informação antes de começar: os
dados elementares também podem ser chamados de simples, básicos, nativos ou
primitivos. Já os dados estruturados também podem ser chamados de compostos.
Bacana? Vamos para as definições!

 Tipos Elementares: são aqueles que não podem ser decompostos. Ora, se eu
disser que o Pedrinho tem 10 anos, é possível decompor esse valor de idade? Não,
logo é um tipo elementar. Há diversos tipos elementares, dependendo da
linguagem de programação utilizada. No entanto, os principais são:

o Inteiro: também conhecido como Integer, são similares aos números


inteiros da matemática, i.e., sem parte fracionária. Podem ser positivos,
negativos ou nulos. Ex: -2% de crescimento do PIB; 174 km de distância; 0
ºC de Temperatura; etc.
16712855225

o Real: também conhecido como Float (Ponto Flutuante), são similares aos
números reais da matemática, i.e., possuem parte fracionária. Ex: 3,141592
é a constante de PI; 9,81 m/s² de Aceleração Gravitacional; raiz quadrada
de 7; etc.

o Caractere: também conhecido como Literal ou Char, são representações


de letras, dígitos e símbolos. Quando colocadas em conjunto, formam um
tipo estruturado chamado String ou Cadeia de Caracteres. Ex: ‘a’, ‘$’, ‘5’,
‘D’, etc.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

o Lógico: também conhecido como Boolean, são representações de valores


lógicos – verdadeiro/falso, ligado/desligado, sim/não, etc. São
extremamente importantes na programação, principalmente na
verificação de condições.

 Tipos Estruturados: são aqueles que podem ser decompostos. Ora, se eu disser
que o nome da bola da copa é Brazuca, é possível decompor esse nome? Sim,
basta dividi-lo em caracteres: ‘B’, ‘r’, ‘a’, ‘z’, ‘u’, ‘c’, ‘a’. Há infinitos tipos
estruturados1, pois eles são a combinação de vários outros, o mais comum é:

o Cadeia de Caracteres: também conhecido como String, são


representações de sequências de caracteres, incluindo ou não símbolos.
Pode ser uma palavra, frase, código, etc, por exemplo: “O rato roeu a
roupa do rei de Roma”.

Pessoal, quase todas as linguagens de programação possuem instruções para


Leitura e Escrita de dados. A Escrita é uma Saída de Dados (Output) que busca
mostrar informações ao usuário na tela do computador (Ex: Escrever (idade)). A
Leitura é uma Entrada de Dados (Input) que busca ler dados do usuário por meio
teclado (Ex: Ler (idade)). Para manipular dados, utilizamos operadores:

Operadores Aritméticos: são utilizados para obter resultados numéricos,


preocupando-se com a priorização2.

Operador Símbolo Prioridade


Multiplicação * 2º
Divisão / 2º
Adição 16712855225
+ 3º
Subtração - 3º
Exponenciação ^ 1º

Operadores Relacionais: são utilizados para comparar números e literais, retornando


valores lógicos.

Operador Símbolo
Igual a =
1
Uma música em .mp3, um texto em .pdf, uma imagem em jpg são todos tipos estruturados.
2
Em operadores que possuem a mesma prioridade, o que aparecer primeiro deve ser priorizado! Além disso,
parênteses possuem sempre a maior prioridade!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Diferente de <> ou !=
Maior que >
Menor que <
Maior ou igual a >=
Menor ou igual a <=

Operadores Lógicos: servem para combinar resultados de expressões, retornando


valores lógicos (verdadeiro ou falso).

Operador/Símbolo
E/And
Ou/Or
Não/Not

Bacana! Com isso, já podemos falar sobre Estruturas de Decisão e Repetição! Galera,
as Estruturas de Decisão (também chamadas de Estruturas de Seleção) permitem
interferir na sequência de instruções executadas dependendo de uma condição de
teste, i.e., o algoritmo terá caminhos diferentes para decisões diferentes. A melhor
maneira de se visualizar isso é com fluxogramas:

Caso 1:
Se (Média >= 5.0) Então
Aluno = Aprovado

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Caso 2:
Se (Média >= 5.0) Então
Aluno = Aprovado
Senão
Aluno = Reprovado

Caso 3:
Se (Média >= 5.0) Então
Se (Média >= 7.0) Então
Aluno = Aprovado
Senão
Aluno = Recuperação
Senão
Aluno = Reprovado

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Caso 4:
Selecione (Número)
Caso 13: Presidente Dilma
Caso 20: Presidente Pastor Everaldo
Caso 28: Presidente Levy Fidelix
Caso 43: Presidente Eduardo Jorge
Caso 45: Presidente Aécio Neves
Caso 50: Presidente Luciana Genro
Caso Outro: Presidente Nulo
Fim Selecione

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Portanto vimos quatro casos de Estrutura de Decisão: -Então, Se-Então-Senão,


-Então (Aninhados) e Caso-Selecione. Agora veremos Estruturas de Repetição!
Elas são utilizadas quando se deseja que um determinado conjunto de instruções
ou comandos sejam executados por uma quantidade definida ou indefinida de
vezes, ou enquanto um estado se mantenha ou seja alcançado. Vejamos:

Caso 1: Repetição Pré-Testada (Testa-se antes de processar!)


Enquanto (Votos < 1.000) Faça
Votos = Votos + 1
Fim-Enquanto

16712855225

Caso 2: Repetição com Variável de Controle


Para Votos de 1 até 1000 Faça
Votos = Votos + 1
Fim-Enquanto

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Caso 3: Repetição Pós-Testada (Testa-se depois de processar!)


Faça
Votos = Votos + 1
Enquanto (Votos < 1.000)

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é
uma maneira de solucionar um problema por meio da instanciação de instâncias
menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma
função chama a si mesma. Eu gosto de pensar em recursividade por meio de
imagens como as apresentadas abaixo.

Nós dissemos que se trata de uma função que chama a si mesma e, daí, temos o
nosso primeiro problema. Se ela chama a si mesma sempre, não entra em um loop
infinito? Sim, por isso é necessário um caso-base (solução trivial), i.e., um caso mais
simples em que é utilizada uma condição de parada, que resolve o problema. Toda
recursividade é composta por um caso base e pelas chamadas recursivas.

Vantagens da recursividade: torna a escrita do código mais simples, elegante e,


16712855225

muitas vezes, menor. Desvantagens da recursividade: quando o loop recursivo é


muito grande, é consumida muita memória nas chamadas a diversos níveis de
recursão, tendo em vista que cada chamada recursiva aloca memória para os
parâmetros, variáveis locais e de controle.

Em muitos casos, uma solução iterativa gasta menos memória e torna-se mais
eficiente em termos de performance do que usar recursão. Galera, vocês se lembram
que estudaram fatorial na escola? Pois é, fatorial é uma operação matemática em
que um número natural (representado por n!) é o produto de todos os inteiros
positivos menores ou iguais a n.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Professor, facilita aí. Já saí da escola


há muito tempo. Ok! Fatorial(5) =
5x4x3x2x1; uma maneira diferente de
escrever isso é: Fatorial(5) = 5 x
Fatorial(4), que é o mesmo que dizer
5 x (4 x Fatorial(3)), que é o mesmo
que 5 x (4 x (3 x Fatorial(2))), que é o
mesmo que 5 x (4 x (3 x (2 x Fatorial(1)))).
E agora, professor? Agora é a vez
do caso-base! No caso do fatorial,
o caso-base é: Fatorial(1) = 1. Todas
essas instâncias ficaram em
memória aguardando a chegada
do caso-base e agora retornamos
com os resultados. Dado o caso-
base, temos que: 5 x (4 x (3 x (2 x
Fatorial(1)))), logo 5 x (4 x (3 x (2 x 1))) = 120.
Vejam ao lado a imagem da a
execução de um código
representando o fatorial.

Por fim, gostaria de mencionar que existem dois tipos de recursividade: direta e
indireta. De modo bem simples, a recursividade direta é aquela tradicional em que
uma função chama a si mesma (Ex: Função A chama a Função A); a recursividade
indireta é aquela alternativa em que uma função chama outra função que chama a
primeira (Ex: Função A chama a Função B, que chama a Função A).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(FCC - 2010 - -SP - Agente de Defensoria - Analista de Sistemas É utilizada


para avaliar uma determinada expressão e definir se um bloco de código deve
ou não ser executado. Essa é a definição da estrutura condicional:

a) For
b) If...Then...Else
c) While
d) Do...While
e) Next

Comentários:

Pessoal... falou em estrutura condicional, trata-se de decisão! Logo, é o If-Then-Else.

Gabarito: B

(FCC - 0 – TRT/SE - Analista de Sistemas Objeto que se constitui parcialmente


ou é definido em termos de si próprio. Nesse contexto, um tipo especial de
procedimento (algoritmo) será utilizado, algumas vezes, para a solução de
alguns problemas. Esse procedimento é denominado:

a) Recursividade.
b) Rotatividade. 16712855225

c) Repetição.
d) Interligação.
e) Condicionalidade.

Comentários:

Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é
uma maneira de solucionar um problema por meio da instanciação de instâncias
menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma
função chama a si mesma. Eu gosto de pensar em recursividade por meio de imagens
como as apresentadas abaixo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Conforme vimos em aula, trata-se da recursividade.

Gabarito: A

(FCC - – TJ/SE - Analista de Sistemas A recursividade na programação de


computadores envolve a definição de uma função que:

a) apresenta outra função como resultado.


b) aponta para um objeto.
c) aponta para uma variável.
d) chama uma outra função.
e) pode chamar a si mesma.

Comentários:

Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é
uma maneira de solucionar um problema por meio da instanciação de instâncias
menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma
função chama a si mesma. Eu gosto de pensar em recursividade por meio de imagens
como as apresentadas abaixo.

Conforme vimos em aula, ela pode chamar a si mesma.

Gabarito: E

(CESPE - 2011 - -ES - Técnico de Informática - Específicos Uma estrutura de


repetição possibilita executar um bloco de comando, repetidas vezes, até que
seja encontrada uma dada condição que conclua a repetição.
16712855225

Comentários:

Essa é uma definição perfeita da Estrutura de Repetição.

Gabarito: C

(CESPE - 2010 - MPU - Analista de Informática - Desenvolvimento de Sistemas


Se um trecho de algoritmo tiver de ser executado repetidamente e o número de
repetições for indefinido, então é correto o uso, no início desse trecho, da
estrutura de repetição Enquanto.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Comentários:

Perfeito! Lembram-se que nós temos três estruturas de repetição? Pois é, o


Enquanto-Faça serve para esse propósito!

Gabarito: C

(CESPE - 2013 - CNJ - Programador de computador) No fluxograma abaixo, se


A = 4, B = 4 e C = 8, o resultado que será computado para Área é igual a 32.

Comentários:
16712855225

Vamos lá:
P = (4+4+8)/2
Lembrem-se que parênteses sempre têm prioridade:
P = (16)/2 = 8
Seguimos para S = P*(P-A)*(P-B)*(P-C):
S = 8*(8-4)*(8-4)*(8-8)
Simplificando:
S = 8*4*4*0 = 0
S <= 0, logo: Não é Triângulo!

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2011 - -ES - Analista Judiciário - Análise de Banco de Dados -


Específicos Em uma estrutura de repetição com variável de controle, ou
estrutura PARA, a verificação da condição é realizada antes da execução do corpo
da sentença, o que impede a reescrita desse tipo de estrutura por meio de
estrutura de repetição pós-testada.

Comentários:

Nós temos três tipos de estruturas de repetição com variável de controle:


While/Enquanto, For/Para e Do-While/Faça-Enquanto - as duas primeiras pré-
testadas e a última pós-testada. De fato, a estrutura For/Para é pré-testada. No
entanto, é possível reescrevê-la como uma Estrutura de Repetição Pós-Testada (Do-
While/Faça-Enquanto), de forma que elas sejam equivalentes.

Gabarito: E

(CESPE - 0 – DETRAN/ES - Analista de Sistemas O método de recursividade


deve ser utilizado para avaliar uma expressão aritmética na qual um
procedimento pode chamar a si mesmo, ou seja, a recursividade consiste em um
método que, para que possa ser aplicado a uma estrutura, aplica a si mesmo
para as subestruturas componentes.

Comentários:

Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é
uma maneira de solucionar um problema por meio da instanciação de instâncias
menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma
função chama a si mesma. Eu gosto de pensar em recursividade por meio de imagens
16712855225

como as apresentadas abaixo.

Conforme vimos em aula, está perfeito.

Gabarito: C

(CESPE - 2013 – CPRM - Analista de Sistemas Na implementação de


recursividade, uma das soluções para que se evite o fenômeno de terminação
do programa – que possibilita a ocorrência de um looping infinito – é definir
uma função ou condição de terminação das repetições.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Comentários:

Nós dissemos que se trata de uma função que chama a si mesma e, daí, temos o
nosso primeiro problema. Se ela chama a si mesma sempre, não entra em um loop
infinito? Sim, por isso é necessário um caso-base (solução trivial), i.e., um caso mais
simples em que é utilizada uma condição de parada, que resolve o problema. Toda
recursividade é composta por um caso base e pelas chamadas recursivas.

Conforme vimos em aula, está perfeito novamente.

Gabarito: C

10. (CESPE - 4 – ANATEL - Analista de Sistemas A recursividade é uma técnica


que pode ser utilizada na implementação de sistemas de lógica complexa, com
a finalidade de minimizar riscos de ocorrência de defeitos no software.

Comentários:

Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é
uma maneira de solucionar um problema por meio da instanciação de instâncias
menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma
função chama a si mesma. Eu gosto de pensar em recursividade por meio de imagens
como as apresentadas abaixo.

Conforme vimos em aula, definitivamente essa não é uma finalidade da


recursividade.

Gabarito: E
16712855225

11. (CESPE - 1 – TJ/ES - Analista de Sistemas Tanto a recursividade direta quanto


a indireta necessitam de uma condição de saída ou de encerramento.

Comentários:

Por fim, gostaria de mencionar que existem dois tipos de recursividade: direta e
indireta. De modo bem simples, a recursividade direta é aquela tradicional em que
uma função chama a si mesma (Ex: Função A chama a Função A); a recursividade
indireta é aquela alternativa em que uma função chama outra função que chama a
primeira (Ex: Função A chama a Função B, que chama a Função A).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Conforme vimos em aula, existe recursividade direta e indireta, mas ambas precisam
de um caso-base, que é uma condição de saída, para não ficar em loop infinito.

Gabarito: C

12. (CONSULPLAN - 2012 - TSE - Programador de computador Observe o trecho


de pseudocódigo.

A estrutura será executada até que X seja igual ao seguinte valor


a) – 1
b) – 3

Comentários:

Vamos lá:
X = 13
No laço, ele afirma: X = X-2
X = 13-2 = 11
Segue esse loop novamente:
X = 11-2 = 9
X = 9-2 = 7
X = 7-2 = 5
X = 5-2 = 3
X = 3-2 = 1
X = 1-2 = -1 16712855225

X = -1-2 = -3 < -1, logo saímos do loop!

Portanto, a estrutura é executada até X = -3.

Gabarito: B

13. (CONSULPLAN - 2012 - TSE - Programador de computador Observe o trecho


de pseudocódigo, que mostra o emprego da estrutura de controle enquanto ...
faça ...

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

A opção que utiliza a estrutura para ... faça ... correspondente, que gera o mesmo
resultado, é:

a) Para n de 0 até 6 faça imprimir(n);


b) Para n de 0 até 7 faça imprimir(n);

Comentários:

Vejamos: N = 0 e irá até N < 7, logo N de 0 a 6.

Gabarito: A

14. (FEPESE - 2010 - SEFAZ-SC - Auditor Fiscal da Receita Estadual - Parte III -
Tecnologia da Informação Assinale a alternativa correta a respeito das variáveis
e constantes, utilizadas em diversas linguagens de programação.

a) O número de constantes deve ser menor ou igual ao número de variáveis em


um programa.
b) O número de constantes deve ser menor ou igual ao número de
procedimentos em um programa.
c) O número de constantes deve ser igual ao número de variáveis em um
programa.
d) O número de constantes independe da quantidade de variáveis em um
16712855225

programa.
e) O número de constantes deve ser igual ao número de procedimentos em um
programa.

Comentários:

Galera, não há essa relação! O número de constantes e variáveis são independentes.

Gabarito: D

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

15. ( CEPE - 5 – SEDUC/PI - Analista de Sistemas O código abaixo é usado


para calcular o fatorial de números. Assinale a alternativa CORRETA sobre esse
código:

função fatorial(n)
{
se (n <= 1)
retorne 1;
senão
retorne n * fatorial(n-1);
}

a) Este é um exemplo de procedimento.

b) O comando retorne pode ser retirado do código e a função terá o mesmo


efeito.

c) Exemplo clássico de recursividade.

d) Não é possível chamar a função fatorial dentro dela mesma.

e) O resultado da função sempre retornará um valor elevado a ele mesmo


(valor ^ valor).

Comentários:

Em muitos casos, uma solução iterativa gasta menos memória e torna-se mais
eficiente em termos de performance do que usar recursão. Galera, vocês se lembram
que estudaram fatorial na escola? Pois é, fatorial é uma operação matemática em
que um número natural (representado por n!) é o produto de todos os inteiros
positivos menores ou iguais a n.
16712855225

Conforme vimos em aula, trata-se de um exemplo clássico de recursividade.

Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

FUNÇÕES E PROCEDIMENTOS

Pessoal, é importante falarmos de alguns conceitos fundamentais! O que é uma


rotina? Uma rotina nada mais é que um conjunto de instruções – um algoritmo. Uma
sub-rotina (ou subprograma) é um pedaço menor desse conjunto de instruções
que, em geral, será utilizado repetidamente em diferentes locais do sistema e que
resolve um problema mais específico, parte do problema maior.

Em vez de repetir um mesmo conjunto de instruções diversas vezes no código, esse


conjunto pode ser agrupado em uma sub-rotina que é chamada em diferentes
locais. As sub-rotinas podem vir por meio de uma função ou de um procedimento.
A diferença fundamental é que, no primeiro caso, retorna-se um valor e no segundo
caso, não. Entenderam?

Galera, essa é a ideia geral! No entanto, algumas linguagens de programação têm


funções e procedimentos em que nenhum retorna valor ou ambos retornam valor,
ou seja, muitas vezes, sequer há uma distinção. No contexto da programação
orientada a objetos, estas sub-rotinas são encapsuladas nos próprios objetos,
passando a designar-se métodos.

A criação de sub-rotinas foi histórica e permitiu fazer


coisas fantásticas. Não fossem elas, estaríamos fazendo
goto até hoje. Uma sub-rotina é um trecho de código
marcado com um ponto de entrada e um ponto de
saída. Entenderam?

Quando uma sub-rotina é chamada, ocorre um desvio


16712855225

do programa para o ponto de entrada, e quando a sub-


rotina atinge seu ponto de saída, o programa desaloca
a sub-rotina, e volta para o mesmo ponto de onde tinha
saído. Vejam a imagem ao lado!

Algumas das vantagens na utilização de sub-rotinas durante a programação são:


redução de código duplicado; possibilidade de reutilizar o mesmo código sem
grandes alterações em outros programas; decomposição de problemas grandes em
pequenas partes; melhorar a interpretação visual; esconder ou regular uma parte
de um programa; reduzir o acoplamento; entre outros.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Quando uma sub-rotina termina, ela é desalocada das estruturas internas do


programa, i.e., seu tempo de vida termina! É praticamente como se ela nunca tivesse
existido. Podemos chamá-la de novo, isso é claro, mas será uma nova encarnação
da sub-rotina: o programa novamente começará executando desde seu ponto de
entrada. Uma co-rotina não funciona assim!

As co-rotinas são parecidas com as sub-rotinas, diferindo apenas na forma de


transferência de controle, realizada na chamada e no retorno. Elas possuem um
ponto de entrada e podemos dizer que são mais genéricas que as sub-rotinas. Na
co-rotina, o trecho de código trabalha conjuntamente com o código chamador até
que sua tarefa seja terminada.

O controle do programa é passado da co-rotina para o chamador e de volta para


a co-rotina até que a tarefa da co-rotina termine. Numa co-rotina, existe o ponto
de entrada (que é por onde se inicia o processamento), um ponto de saída (pela
qual o tempo de vida da co-rotina termina), e um ponto de retorno parcial. Esse
retorno parcial não termina com a vida da co-rotina.

Pelo contrário, apenas passa o controle do programa


para a rotina chamadora, e marca um ponto de
reentrada. Quando a rotina chamadora devolver o
controle para a co-rotina, o processamento começa a
partir do último ponto de retorno parcial.

Na prática, uma co-rotina permite retornar valores


diversas vezes antes de terminar o seu tempo de vida.
Enquanto o tempo de vida das sub-rotinas é ditado pela
pilha de execução, o tempo de vida das co-rotinas é
ditado por seu uso e necessidade. 16712855225

Vamos falar agora um pouco sobre passagem de parâmetros por valor e por
referência. Vocês sabem que, quando o módulo principal chama uma função ou
procedimento, ele passa alguns valores chamados Argumentos de Entrada. Esse
negócio costuma confundir muita gente, portanto vou explicar por meio de um
exemplo, utilizando a função DobraValor(valor1, valor2) – apresentada na imagem abaixo:

#include <stdio.h>

void DobraValor(int valor1, int valor2)


{
valor1 = 2*valor1;
valor2 = 2*valor2;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00
printf("Valores dentro da Função: \nValor 1 = %d\n Valor 2 = %d\n",valor1,valor2);
}

int main()
{
int valor1 = 5;
int valor2 = 10;

printf("Valores antes de chamar a Função:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2);


DobraValor(valor1,valor2);
printf("Valores depois de chamar a Função:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2);

return();
}

Essa função recebe dois valores e simplesmente multiplica sua soma por dois. Então
o que acontece se eu passar os parâmetros por valor para a função? Bem, ela
receberá uma cópia das duas variáveis e, não, as variáveis originais. Logo, antes de
a função ser chamada, os valores serão os valores iniciais: 5 e 10. Durante a chamada,
ela multiplica os valores por dois, resultando em: 10 e 20.

Valores antes de chamar a Função:


Valor 1 = 5
Valor 2 = 10
Valores dentro da Função:
Valor 1 = 10
Valor 2 = 20
Valores depois de chamar a Função:
Valor 1 = 5
Valor 2 = 10

Após voltar para a função principal, os valores continuam sendo os valores iniciais:
5 e 10, como é apresentado acima na execução da função. Notem que os valores
só se modificaram dentro da função DobraValor( ). Por que, professor? Ora, porque foi
passada para função apenas uma cópia dos valores e eles que foram multiplicados
por dois e, não, os valores originais.

#include <stdio.h> 16712855225

void DobraValor(int *valor1, int *valor2)


{
*valor1 = 2*(*valor1);
*valor2 = 2*(*valor2);

printf("Valores dentro da Função: \nValor 1 = %d\n Valor 2 = %d\n", *valor1, *valor2);


}

int main()
{
int valor1 = 5;
int valor2 = 10;

printf("Valores antes de chamar a Função:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2);


DobraValor(&valor1,&valor2);
printf("Valores depois de chamar a Função:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2);

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00
return();
}

Professor, o que ocorre na passagem por referência? Bem, ela receberá uma
referência para as duas variáveis originais e, não, cópias. Portanto, antes de a função
ser chamada, os valores serão os valores iniciais: 5 e 10. Durante a chamada, ela
multiplica os valores por dois, resultando em: 10 e 20. Após voltar para a função
principal, os valores serão os valores modificados: 10 e 20.

Valores antes de chamar a Função:


Valor 1 = 5
Valor 2 = 10
Valores dentro da Função:
Valor 1 = 10
Valor 2 = 20
Valores depois de chamar a Função:
Valor 1 = 10
Valor 2 = 20

Notem que os valores se modificaram não só dentro da função DobraValor( ), como


fora também (na função principal). Por que isso ocorreu, professor? Ora, porque foi
passada para função uma referência para os valores originais e eles foram
multiplicados por dois, voltando à função principal com os valores dobrados! Por
isso, os valores 10 e 20.

Resumindo: a passagem de parâmetro por valor recebe uma cópia da variável


original e qualquer alteração não refletirá no módulo principal. A passagem de
parâmetro por referência recebe uma referência para a própria variável e qualquer
alteração refletirá no módulo principal. Em Java, por exemplo, a passagem de
parâmetros é sempre por valor! Bacana?

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

COMPLEXIDADE DE ALGORITMOS

Galera, por que estudamos a complexidade de algoritmos? Para determinar o custo


computacional (tempo, espaço, etc) para execução de algoritmos. Em outras
palavras, ela classifica problemas computacionais de acordo com sua dificuldade
inerente. É importante entender isso para posteriormente estudarmos a
complexidade de métodos de ordenação e métodos de pesquisa.

Nosso estudo aqui será bastante superficial por duas razões: primeiro, concursos
cobram pouco e, quando cobram, querem saber as complexidades dos métodos
de ordenação mais conhecidos; segundo, essa é uma disciplina absurdamente
complexa que envolve Análise Assintótica, Cálculo Diferencial, Análise Polinomial
(Linear, Exponencial, etc). Logo, vamos nos ater ao que cai em concurso público!

Só uma pausa: passei dias sem dormir na minha graduação por conta dessa
disciplina! Na UnB, ela era ministrada pelo Instituto de Matemática e era considerada
a disciplina mais difícil do curso :-(. Continuando: lá em cima eu falei sobre custo
computacional! Ora, para que eu escolha um algoritmo, eu preciso definir algum
parâmetro.

Podemos começar com Tempo! Um algoritmo que realiza uma tarefa em 20 minutos
é melhor do que um algoritmo que realiza uma tarefa em 20 dias? Não é uma boa
estratégia, porque depende do computador que eu estou utilizando (e todo o
hardware correspondente), depende das otimizações realizadas pelo compilador,
entre outras variáveis.

Vamos analisar, então, Espaço! Um algoritmo que utiliza 20Mb de RAM é melhor do
16712855225

que um algoritmo que utiliza 20Gb? Seguem os mesmos argumentos utilizados para
o Tempo, ou seja, não é uma boa opção! E agora, o que faremos? Galera, eu tenho
uma sugestão: investigar a quantidade de vezes que operações são executadas na
execução do algoritmo!

Essa estratégia independe do computador (e hardware associado), do compilador,


da linguagem de programação, das condições de implementação, entre outros
fatores – ela depende apenas da qualidade inerente do algoritmo 3 implementado.

3
Pessoal, é claro que nossa visão sobre a complexidade dos algoritmos é teórica. Na prática, depende de diversos
outros fatores, mas nosso foco é na visão analítica e, não, empírica.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Utilizam-se algumas simplificações matemáticas para se ter uma ideia do


comportamento do algoritmo. Prosseguindo...

Dada uma entrada de dados de tamanho N, podemos calcular o custo


computacional de um algoritmo em seu pior caso, médio caso e melhor caso! Como
assim, professor? Para entender isso, vamos utilizar a metáfora de um jogo de
baralho! Imaginem que eu estou jogando contra vocês. Vocês embaralham e me
entregam 5 cartas, eu embaralho novamente e lhes entrego 5 cartas.

Quem joga baralho sabe que uma boa alternativa para grande parte dos jogos é
ordenar as cartas em ordem crescente de modo a encontrar mais facilmente a
melhor carta para jogar. Agora observem... vocês receberam as seguintes cartas
(nessa ordem): 4, 5, 6, 7, 8. Já eu recebi as seguintes cartas (também nessa ordem):
8, 7, 6, 5, 4 – nós queremos analisar a complexidade de ordenação dessas cartas.

Ora, convenhamos que vocês possuem o melhor caso, porque vocês deram sorte
de as cartas recebidas já estarem ordenadas. Já eu peguei o pior caso, porque as
cartas estão ordenadas na ordem inversa. Por fim, o caso médio ocorre caso as
cartas recebidas estejam em uma ordem aleatória. Com isso, espero que vocês
tenham entendido o sentido de pior, médio e melhor casos.
16712855225

Vamos partir agora para o estudo da Notação Big-O (ou Notação Assintótica)! Isso
é simplesmente uma forma de representar o comportamento assintótico de uma
função. No nosso contexto, ela busca expressar a quantidade de operações
primitivas executadas como função do tamanho da entrada de dados. Vamos ver
isso melhor!

A Notação Big-O é a representação relativa da complexidade de um algoritmo. É


relativa porque só se pode comparar maçãs com maçãs, isto é, você não pode
comparar um algoritmo de multiplicação aritmética com um algoritmo de
ordenação de inteiros. É uma representação porque reduz a comparação entre
algoritmos a uma simples variável por meio de observações e suposições.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

E trata da complexidade porque se é necessário 1 segundo para ordenar 10.000


elementos, quanto tempo levará para ordenar 1.000.000? A complexidade, nesse
exemplo particular, é a medida relativa para alguma coisa. Vamos ver isso por meio
de um exemplo: soma de dois inteiros! A soma é uma operação ou um problema e
o método para resolver esse problema é chamado algoritmo!

Vamos supor que no algoritmo de somar (mostrado acima), a operação mais cara
é a adição em si. Observem que se somarmos dois números de 100 dígitos, teremos
que fazer 100 adições. Se somarmos dois números de 10.000 dígitos, teremos que
fazer 10.000 adições. Perceberam o padrão? A complexidade (aqui, número de
operações) é diretamente proporcional ao número n de dígitos, isto é, O(n).

Quando dizemos que um algoritmo é O(n²), estamos querendo dizer que esse
algoritmo é da ordem de grandeza quadrática! Ele basicamente serve para te dizer
quão rápido uma função cresce, por exemplo: um algoritmo O(n) é melhor do que
um algoritmo O(n²), porque ela cresce mais lentamente! Abaixo vemos uma lista das
classes de funções mais comuns em ordem crescente de crescimento:

Notação Nome
O(1) Constante
O(log n) Logarítmica
O[(log n)c] Polilogarítmica
16712855225

O(n) Linear
O(n log n) –
O(n²) Quadrática
O(n³) Cúbica
O(nc) Polinomial
O(cn) Exponencial
O(n!) Fatorial

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Quando dizemos que o Shellsort é um


algoritmo O(n²), estamos querendo dizer que
a complexidade (nesse caso, o número de
operações) para ordenar um conjunto de n
dados com o Algoritmo Shellsort é
proporcional ao quadrado do número de
elementos no conjunto! Grosso modo, para
ordenar 20 números, é necessário realizar
400 operações (sem entrar em detalhes
sobre a operação em si, nem sobre as
simplificações matemáticas que são
realizadas).

Entender como se chega a esses valores para cada método de ordenação


pesquisa é extremamente complexo! Galera, apesar de eu nunca ter visto isso em
prova, é bom que vocês saibam que existem outras notações! Utiliza-se Notação
Big-O (O) para pior caso; Notação Big-Ômega para melhor caso ( ); e Notação Big-
Theta ( ) para caso médio.

Como, a prática, utiliza-se Big-O para tudo, o que eu recomendo (infelizmente,


porque eu sei que vocês têm zilhões de coisas para decorar) é memorizar o pior
caso dos principais métodos. Dessa forma, é possível responder a maioria das
questões de prova sobre esse tema. Eventualmente, as questões pedem também
caso médio e melhor caso, mas é menor comum. Bacana? :-)

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(VUNESP – 2012 – TJ/SP - Analista Judiciário - Tecnologia da Informação)


Considerando o conceito de Complexidade de Algoritmos, representado por
O(função), assinale a alternativa que apresenta, de forma crescente, as
complexidades de algoritmos.

a) O(2n); O(n3); O(n2); O(log2 n); O(n.log2 n).


b) O(n2); O(n3); O(2n); O(log2 n); O(n.log2 n).
c) O(n3); O(n2); O(2n); O(n.log2 n); O(log2 n).
d) O(log2 n); O(n.log2 n); O(n2); O(n3); O(2n).
e) O(n.log2 n); O(log2 n); O(2n); O(n3); O(n2).

Comentários:

Notação Nome
O(1) Constante
O(log n) Logarítmica
O[(log n)c] Polilogarítmica
O(n) Linear
O(n log n) –
O(n²) Quadrática
O(n³) Cúbica
O(nc) 16712855225

Polinomial
O(cn) Exponencial
O(n!) Fatorial

Conforme vimos em aula, basta consultar a tabelinha!

Gabarito: D

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação) Numa competição de programação, ganhava mais pontos o time
que apresentasse o algoritmo mais eficiente para resolver o pior caso de um

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

determinado problema. A complexidade assintótica (notação Big O) dos


algoritmos elaborados está ilustrada na tabela abaixo.

O time que obteve a medalha de prata (2º algoritmo mais eficiente) é o:

a) Branco.
b) Amarelo.
c) Azul.
d) Verde.
e) Vermelho.

Comentários:

Notação Nome
O(1) Constante
O(log n) Logarítmica
O[(log n)c] Polilogarítmica
O(n) Linear
O(n log n) –
O(n²) Quadrática
O(n³) Cúbica
O(nc) 16712855225

Polinomial
O(cn) Exponencial
O(n!) Fatorial

Conforme vimos em aula, basta consultar a tabelinha! O primeiro é o time Azul (O(1))
e o segundo é o time Amarelo (O(n log n)).

Gabarito: B

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

MÉTODOS DE ORDENAÇÃO

Métodos de Ordenação são algoritmos que têm o objetivo principal de posicionar


os elementos de uma estrutura de dados em uma determinada ordem. Para que,
professor? Ora, isso possibilita o acesso mais rápido e eficiente aos dados. Existem
dezenas de métodos, todavia nessa aula veremos apenas os mais importantes:
BubbleSort, QuickSort, InsertionSort, SelectionSort, MergeSort, ShellSort e HeapSort.

Antes de iniciar, vamos falar sobre o conceito de Estabilidade! Um método estável


é aquele em que os itens com chaves iguais mantêm-se com a posição inalterada
durante o processo de ordenação, i.e., preserva-se a ordem relativa dos itens com
chaves duplicadas ou iguais. Métodos Estáveis: Bubble, Insertion e Merge; Métodos
Instáveis: Selection, Quick, Heap e Shell. Vejamos um exemplo:

16712855225

Na imagem acima, foi colocado um sinal de aspas simples e duplas apenas para
diferenciá-los, mas trata-se do mesmo número. Um algoritmo estável ordena todo
o restante e não perde tempo trocando as posições de elementos que possuam
chaves idênticas. Já um algoritmo instável ordena todos os elementos, inclusive
aqueles que possuem chaves idênticas (sob algum outro critério).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

BubbleSort (Troca)

Esse algoritmo é o primeiro método de ordenação aprendido


na faculdade, porque ele é bastante simples e intuitivo. Nesse
método, os elementos da lista são movidos para as posições
adequadas de forma contínua. Se um elemento está
inicialmente em uma posição i e, para que a lista fique
ordenada, ele deve ocupar a posição j, então ele terá que passar
por todas as posições entre i e j.

Em cada iteração do método, percorremos a lista a partir de seu


início comparando cada elemento com seu sucessor, trocando-
se de posição se houver necessidade. É possível mostrar que, se
a lista tiver n elementos, após no máximo (n-1) iterações, a lista
estará em ordem (crescente ou decrescente). Observem abaixo
o código para a Ordenação em Bolha:

Melhor Caso Caso Médio Pior Caso


O(n) O(n²) O(n²)
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

InsertionSort (Inserção)

Esse algoritmo, também conhecido como Inserção Direta, é bastante simples


apresenta um desempenho significativamente melhor que o BubbleSort, em termos
absolutos. Além disso, ele é extremamente eficiente para listas que já estejam
substancialmente ordenadas e listas com pequeno número de elementos.
Observem abaixo o código para a Ordenação de Inserção:

Nesse método, consideramos que a lista está dividida em parte


esquerda, já ordenada, e parte direita, em possível desordem.
Inicialmente, a parte esquerda contém apenas o primeiro
elemento da lista. Cada iteração consiste em inserir o primeiro
elemento da parte direta (pivô) na posição adequada da parte
esquerda, de modo que a parte esquerda continue ordenada.

É fácil perceber que se a lista possui n elementos, após (n-1)


inserções, ela estará ordenada. Para inserir o pivô, percorremos a
parte esquerda, da direita para a esquerda, deslocando os
elementos estritamente maiores que o pivô uma posição para
16712855225

direita. O pivô deve ser colocado imediatamente à esquerda do


último elemento movido.

Melhor Caso Caso Médio Pior Caso


O(n) O(n²) O(n²)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

SelectionSort (Seleção)

Esse algoritmo consiste em selecionar o menor elemento de um


vetor e trocá-lo (swap) pelo item que estiver na primeira posição,
i.e., inseri-lo no início do vetor. Essas duas operações são
repetidas com os itens restantes até o último elemento. Tem
como ponto forte o fato de que realiza poucas operações de
swap. Seu desempenho costuma ser superior ao BubbleSort e
inferior ao InsertionSort.

Assim como no InsertionSort, considera-se que a lista está


dividida em parte esquerda, já ordenada, e parte direita, em
possível desordem. Ademais, os elementos da parte esquerda
são todos menores ou iguais aos elementos da parte direita.
Cada iteração consiste em selecionar o menor elemento da parte
direita (pivô) e trocá- com o primeiro elemento da parte direita.

Assim, a parte esquerda aumenta, visto que passa a incluir o pivô, e a parte direita
diminui. Note que o pivô é maior que todos os demais elementos da parte esquerda,
portanto a parte esquerda continua ordenada. Ademais, o pivô era o menor
elemento da direita, logo todos os elementos da esquerda continuam sendo
menores ou iguais aos elementos da direita. Inicialmente, a parte esquerda é vazia.

16712855225

Melhor Caso Caso Médio Pior Caso


O(n²) O(n²) O(n²)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

QuickSort (Troca)

Esse algoritmo divide um conjunto de itens em conjuntos


menores, que são ordenados de forma independente, e
depois os resultados são combinados para produzir a
solução de ordenação do conjunto maior. Trata-se,
portanto, de um algoritmo do tipo Divisão-e-Conquista
i.e., repartindo os dados em subgrupos, dependendo de
um elemento chamado pivô.

Talvez seja o método de ordenação mais utilizado! Isso


ocorre porque quase sempre ele é significativamente
mais rápido do que todos os demais métodos de
ordenação baseados em comparação. Ademais, suas
características fazem com que ele, assim como o
MergeSort, possa ser facilmente paralelizado. Ele
também pode ser adaptado para realizar ordenação
externa (QuickSort Externo).

Neste método, a lista é dividida em parte esquerda e


parte direita, sendo que os elementos da parte esquerda
são todos menores que os elementos da parte direita.
Essa fase do processo é chamada de partição. Em
seguida, as duas partes são ordenadas recursivamente (usando o próprio
QuickSort). A lista está portanto ordenada corretamente!

Uma estratégia para fazer a partição é escolher um valor como pivô e então colocar
na parte esquerda os elementos menores ou iguais ao pivô e na parte direita os
elementos maiores que o pivô – galera, a escolha do pivô é crítica! Em geral, utiliza-
16712855225

se como pivô o primeiro elemento da lista, a despeito de existirem maneiras de


escolher “melhor” pivô.

Esse algoritmo é um dos métodos mais rápidos de ordenação, apesar de às vezes


partições desequilibradas poderem conduzir a uma ordenação lenta. A eficácia do
método depende da escolha do pivô mais adequado ao conjunto de dados que se
deseja ordenar. Alguns, por exemplo, utilizam a mediana de três elementos para
otimizar o algoritmo.

Alguns autores consideram a divisão em três subconjuntos, sendo o terceiro


contendo valores iguais ao pivô. O Melhor Caso ocorre quando o conjunto é

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

dividido em subconjuntos de mesmo tamanho; o Pior Caso ocorre quando o pivô


corresponde a um dos extremos (menor ou maior valor). Alguns o consideram um
algoritmo frágil e não-estável, com baixa tolerância a erros.

Melhor Caso Caso Médio Pior Caso


O(n log n) O(n log n) O(n²)

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

ShellSort (Inserção)

Esse algoritmo é uma extensão ou refinamento do algoritmo do InsertionSort,


contornando o problema que ocorre quando o menor item de um vetor está na
posição mais à direita. Ademais, difere desse último pelo fato de, em vez de
considerar o vetor a ser ordenado como um único segmento, ele considera vários
segmentos e aplica o InsertionSort em cada um deles.

É o algoritmo mais eficiente dentre os de ordem quadrática. Nesse método, as


comparações e as trocas são feitas conforme determinada distância (gap) entre dois
elementos, de modo que, se gap = 6, há comparação entre o 1º e 7º elementos ou
entre o 2º e 8º elementos e assim sucessivamente, repetindo até que as últimas
comparações e trocas tenham sido efetuadas e o gap tenha chegado a 1.

Melhor Caso Caso Médio


16712855225
Pior Caso
O(n log n) Depende do gap O(n²)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

MergeSort (Intercalação)

Esse algoritmo é baseado na estratégia de resolução de


problemas conhecida como divisão-e-conquista. Essa
técnica consiste basicamente em decompor a instância a
ser resolvida em instâncias menores do mesmo tipo de
problema, resolver tais instâncias (em geral,
recursivamente) e por fim utilizar as soluções parciais
para obter uma solução da instância original.

Naturalmente, nem todo problema pode ser resolvido


através de divisão e conquista. Para que seja viável
aplicar essa técnica a um problema, ele deve possuir
duas propriedades estruturais. O problema deve ser
decomponível, i.e., deve ser possível decompor qualquer
instância não trivial do problema em instâncias menores
do mesmo tipo de problema.

Além disso, deve ser sempre possível utilizar as soluções


obtidas com a resolução das instâncias menores para
chegar a uma solução da instância original. No MergeSort, divide-se a lista em duas
metades. Essas metades são ordenadas recursivamente (usando o próprio
MergeSort) e depois são intercaladas. Abaixo segue uma possível solução:

16712855225

Melhor Caso Caso Médio Pior Caso


O(n log n) O(n log n) O(n log n)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

HeapSort (Seleção)

Esse algoritmo utiliza uma estrutura de dados chamada


heap, para ordenar os elementos à medida que os
insere na estrutura.

Assim, ao final das inserções, os elementos podem ser


sucessivamente removidos da raiz da heap, na ordem
desejada.

Essa estrutura pode ser representada como uma


árvore ou como um vetor. Entenderam? Inicialmente,
insere-se os elementos da lista em um heap.

Em seguida, fazemos sucessivas remoções do menor


elemento do heap, colocando os elementos removidos
do heap de volta na lista – a lista estará então em
ordem crescente.

O heapsort é um algoritmo de ordenação em que a


quantidade de elementos armazenada fora do arranjo
de entrada é constante durante toda a sua execução.

16712855225

Melhor Caso Caso Médio Pior Caso


O(n log n) O(n log n) O(n log n)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

RESUMÃO DE COMPLEXIDADES

ALGORITMO MELHOR CASO CASO MÉDIO PIOR CASO


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(Instituto Cidades - 2012 - TCM-GO - Auditor de Controle Externo - Informática)


São exemplos de algoritmos de ordenação, exceto:

a) Bubble Sort
b) Select Sort
c) Shell Sort
d) Busca Sequencial;
e) Quick Sort;

Comentários:

Não, Busca Sequencial não é um algoritmo de ordenação! Na verdade, ele é um


método de pesquisa sobre estruturas de dados.

Gabarito: D

(FUMARC - 2012 - -MG - Técnico Judiciário - Analista de Sistemas – I) Quicksort


divide um conjunto de itens em conjuntos menores, que são ordenados de forma
independe, e depois os resultados são combinados para produzir a solução de
ordenação do conjunto maior.

Comentários: 16712855225

Perfeito! Sendo um algoritmo do tipo Dividir Para Conquistar, ele reparte o conjunto
de dados em conjuntos menores, que são ordenados independentemente e depois
combinados em uma solução maior.

Gabarito: C

(CESPE - 2012 - MPE-PI - Analista Ministerial - Informática - Cargo 6) O heapsort


é um algoritmo de ordenação em que a quantidade de elementos armazenada
fora do arranjo de entrada é constante durante toda a sua execução.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Comentários:

Inicialmente, insere-se os elementos da lista em um heap. Em seguida, fazemos


sucessivas remoções do menor elemento do heap, colocando os elementos removidos
do heap de volta na lista – a lista estará então em ordem crescente. O heapsort é um
algoritmo de ordenação em que a quantidade de elementos armazenada fora do
arranjo de entrada é constante durante toda a sua execução.

Conforme vimos em aula, está tudo perfeito! O jeito que a questão colocou ficou
estranho, mas é o seguinte: você tem um arranjo de entrada (em geral,
desordenado). A partir desse arranjo, você constrói um heap (em outro arranjo),
mas que funciona como uma árvore. Então, pode-se dizer que ele funciona com
dois arranjos, mas o segundo é apenas um heap auxiliar com um número constante
de elementos.

Gabarito: C

(CESPE - 2010 - ABIN - Oficial Técnico de Inteligência - Área de Suporte a Rede


de Dados) A eficácia do método de ordenação rápida (quicksort) depende da
escolha do pivô mais adequado ao conjunto de dados que se deseja ordenar. A
situação ótima ocorre quando o pivô escolhido é igual ao valor máximo ou ao
valor mínimo do conjunto de dados.

Comentários:

Alguns autores consideram a divisão em três subconjuntos, sendo o terceiro contendo


valores iguais ao pivô. O Melhor Caso ocorre quando o conjunto é dividido em
subconjuntos de mesmo tamanho; o Pior Caso ocorre quando o pivô corresponde a
um dos extremos (menor ou maior valor). Alguns o consideram um algoritmo frágil
16712855225

e não-estável, com baixa tolerância a erros.

Conforme vimos em aula, a questão se refere ao pior caso!

Gabarito: E

(CESPE - 2010 - ABIN - Oficial Técnico de Inteligência - Área de Suporte a Rede


de Dados) A estabilidade de um método de ordenação é importante quando o
conjunto de dados já está parcialmente ordenado.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Na imagem acima, foi colocado um sinal de aspas simples e duplas apenas para
diferenciá-los, mas trata-se do mesmo número. Um algoritmo estável ordena todo o
restante e não perde tempo trocando as posições de elementos que possuam chaves
idênticas. Já um algoritmo instável ordena todos os elementos, inclusive aqueles que
possuem chaves idênticas (sob algum outro critério).

Conforme vimos em aula, a estabilidade é irrelevante com dados parcialmente


ordenados ou não! A estabilidade é importante quando se deseja ordenar um
conjunto de dados por mais de um critério (Ex: primeiro pelas chaves e segundo por
índices). Se esse não for o caso (e a questão não disse que era!), a estabilidade “não
fede nem cheira”. O fato de os dados estarem parcialmente ordenados não fará
diferença em termos de ordenação – ambos serão ordenados da mesma maneira.

Gabarito: E

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Administração de Dados A classificação interna por inserção é um
método que realiza a ordenação de um vetor por meio da inserção de cada
elemento em sua posição correta dentro de um subvetor classificado.

Comentários:

Perfeito, trata-se do InsertionSort!

Gabarito: C

(FCC - 2009 - TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação)


São algoritmos de classificação por trocas apenas os métodos:
16712855225

a) SelectionSort e InsertionSort.
b) MergeSort e BubbleSort.
c) QuickSort e SelectionSort.
d) BubbleSort e QuickSort.
e) InsertionSort e MergeSort.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

BubbleSort e QuickSort são métodos de troca; InsertionSort é um método de


Inserção; SelectionSort e HeapSort são métodos de Seleção; e MergeSort é um
método de Intercalação.

Gabarito: D

(CESGRANRIO - 2011 - PETROBRÁS – Analista de Sistemas – I) O tempo de pior


caso do algoritmo QuickSort é de ordem menor que o tempo médio do
algoritmo Bubblesort.

Comentários:

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

Portanto, está incorreto! São iguais: O(n²).

Gabarito: E

(CESGRANRIO - 2011 - PETROBRÁS – Analista de Sistemas – II) O tempo médio


do QuickSort é O(nlog2n), pois ele usa como estrutura básica uma árvore de
prioridades.
16712855225

Comentários:

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

De fato, ele tem tempo médio O(n log n), mas ele usa como estrutura básica uma
lista ou um vetor!

Gabarito: E

10. (CESGRANRIO - 2011 - PETROBRÁS – Analista de Sistemas – III) O tempo médio


do QuickSort é de ordem igual ao tempo médio do MergeSort.

Comentários:

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

Perfeito, ambos têm tempo O(n log n).

Gabarito: C

11. (CESGRANRIO - 2012 - CMB – Analista de Sistemas – III) Em uma reunião de


análise de desempenho de um sistema WEB, um programador apontou
corretamente que a complexidade de tempo do algoritmo bubblesort, no pior
caso, é:

a) O(1) 16712855225

b) O(log n)
c) O(n)
d) O(n log n)
e) O(n2)

Comentários:

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

QuickSort O(n log n) O(n log n) O(n²)


ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

Trata-se de O(n²)!

Gabarito: E

12. (CESPE - 2010 – INMETRO – Analista de Sistemas) Se f é uma função de


complexidade para um algoritmo F, então O(f) é considerada a complexidade
assintótica ou o comportamento assintótico do algoritmo F. Assinale a opção
que apresenta somente algoritmos que possuem complexidade assintótica
quando f(n) = O(n log n).

a) HeapSort e BubbleSort
b) QuickSort e InsertionSort
c) MergeSort e BubbleSort
d) InsertionSort
e) HeapSort, QuickSort e MergeSort

Comentários:

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
16712855225

HeapSort O(n log n) O(n log n) O(n log n)

Conforme vimos em aula, trata-se da última opção. Vejam que ele não utilizou,
nessa questão, o Pior Caso.

Gabarito: E

13. (FGV - 2013 – MPE/MS – Analista de Sistemas) Assinale a alternativa que indica
o algoritmo de ordenação capaz de funcionar em tempo O(n) para alguns
conjuntos de entrada.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

a) Selectionsort (seleção)
b) Insertionsort (inserção)
c) Merge sort
d) Quicksort
e) Heapsort

Comentários:

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

Portanto, trata-se da segunda opção.

Gabarito: B

14. (CESGRANRIO - 2010 – BACEN – Analista de Sistemas) Uma fábrica de software


foi contratada para desenvolver um produto de análise de riscos. Em
determinada funcionalidade desse software, é necessário realizar a ordenação
de um conjunto formado por muitos números inteiros. Que algoritmo de
ordenação oferece melhor complexidade de tempo (Big O notation) no pior
caso?
16712855225

a) Merge sort
b) Insertion sort
c) Bubble sort
d) Quick sort
e) Selection sort

Comentários:

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

SelectionSort O(n²) O(n²) O(n²)


QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

Trata-se da primeira opção!

Gabarito: A

15. (CESPE - 2011 – FUB – Analista de Sistemas) Os métodos de ordenação podem


ser classificados como estáveis ou não estáveis. O método é estável se preserva
a ordem relativa de dois valores idênticos. Alguns métodos eficientes como
shellsort ou quicksort não são estáveis, enquanto alguns métodos pouco
eficientes, como o método da bolha, são estáveis.

Comentários:

Métodos Estáveis: BubbleSort, InsertionSort e MergeSort; Métodos Instáveis:


SelectionSort, QuickSort, HeapSort e ShellSort. Portanto, item perfeito!

Gabarito: C

16. (CESPE - 2012 – BASA – Analista de Sistemas) O método de classificação Shellsort


iguala-se ao método Quicksort em termos de complexidade temporal, porém é
mais eficiente para quantidades pequenas a moderadas de dados.

Comentários:
16712855225

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

Não, a complexidade temporal é completamente diferente!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Gabarito: E

17. (CESPE - 201 – BASA – Analista de Sistemas) O método de classificação


Quicksort é estável e executado em tempo linearmente dependente da
quantidade de dados que estão sendo classificados.

Comentários:

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

QuickSort é instável e não possui complexidade temporal linear!

Gabarito: E

18. (CESPE - 2012 – BASA – Analista de Sistemas) No método de ordenamento


denominado shellsort, as comparações e as trocas são feitas conforme
determinada distância entre dois elementos, de modo que, uma distância igual
a 6 seria a comparação entre o primeiro elemento e o sétimo, ou entre o
segundo elemento e o oitavo, e assim sucessivamente, repetindo-se esse
processo até que as últimas comparações e trocas tenham sido efetuadas e a
distância tenha diminuído até chegar a 1.
16712855225

Comentários:

Perfeito, é exatamente assim!

Gabarito: C

19. (FGV - – PETROBRÁS – Analista de Sistemas) Sobre o algoritmo de


ordenação heapsort, assinale a afirmação correta.

a) Utiliza ordenação por árvore de decisão, ao invés de ordenação por


comparação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

b) A estrutura de dados que utiliza, chamada heap, pode ser interpretada como
uma árvore binária.

c) Seu desempenho de pior caso é pior do que o do algoritmo quicksort.

d) Seu desempenho de pior caso é o mesmo da ordenação por inserção.

e) Seu desempenho de pior caso é menor do que o da ordenação por


intercalação.

Comentários:

(a) Utiliza ordenação por seleção; (b) Perfeito; (c) Não, é melhor que o QuickSort;
(d) Não, é melhor que o InsertionSort; (e) Não, é idêntico ao MergeSort.

Gabarito: B

(CESGRANRIO – – BASA – Analista de Sistemas) Com relação aos


algoritmos quicksort e mergsort, o tempo de execução para o:

a) pior caso do quicksort é (n lg n).


b) pior caso do mergesort é (n2).
c) pior caso do mergesort é (n lg n).
d) caso médio do mergesort é O(lg n).
e) caso médio do quicksort é O(n2).

Comentários:
16712855225

Algoritmo Melhor Caso Caso Médio Pior Caso


BubbleSort O(n) O(n²) O(n²)
InsertionSort O(n) O(n²) O(n²)
SelectionSort O(n²) O(n²) O(n²)
QuickSort O(n log n) O(n log n) O(n²)
ShellSort O(n log n) Depende do gap O(n²)
MergeSort O(n log n) O(n log n) O(n log n)
HeapSort O(n log n) O(n log n) O(n log n)

Trata-se da terceira opção.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Gabarito: C

21. (CESPE – 2009 – UNIPAMPA – Analista de Sistemas) O algoritmo quicksort, que


divide uma instrução em quatro blocos diferentes de busca, é um exemplo de
estrutura de ordenação de dados.

Comentários:

Não, são dois blocos diferentes de busca.

Gabarito: E

(CESPE - 2013 – CPRM – Analista de Sistemas) No algoritmo de ordenação


denominado quicksort, escolhe-se um ponto de referência, denominado pivô, e
separam-se os elementos em dois grupos: à esquerda, ficam os elementos
menores que o pivô, e à direita ficam os maiores. Repete-se esse processo para
os grupos de elementos formados (esquerda e direita) até que todos os
elementos estejam ordenados.

Comentários:

Perfeito, é exatamente assim!

Gabarito: C

(CESPE - 2013 – MPU – Analista de Sistemas) Entre os algoritmos de ordenação


e pesquisa bubble sort, quicksort e heapsort, o quicksort é considerado o mais
eficiente, pois se caracteriza como um algoritmo de dividir-para-conquistar,
utilizando operações de particionamento.
16712855225

Comentários:

Não, o HeapSort é o mais eficiente no pior caso!

Gabarito: E

24. (CESPE - 2013 – TRT/9 – Analista de Sistemas) No método Quicksort, o pivô é


responsável pelo número de partições em que o vetor é dividido. Como o pivô
não pode ser um elemento que esteja repetido no vetor, o Quicksort não
funciona quando há elementos repetidos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Comentários:

O pivô não é responsável pelo número de partições em que o vetor é dividido.


Ademais, ele pode sim ser um elemento que esteja repetido no vetor!

Gabarito: E

(FCC - 2011 - TRT - 14ª Região (RO e AC) - Analista Judiciário - Tecnologia da
Informação) NÃO se trata de um método de ordenação (algoritmo):

a) inserção direta.
b) seleção direta.
c) inserção por meio de incrementos decrescentes.
d) direta em cadeias.
e) particionamento.

Comentários:

(a) Trata-se do InsertionSort; (b) Trata-se do SelectionSort; (c) Trata-se do ShellSort;


(d) Trata-se de um método de busca; (e) Trata-se do QuickSort. Portanto, é a quarta
opção!

Gabarito: D

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


LÓGICA DE PROGRAMAÇÃO

(FCC - 2010 - -SP - Agente de Defensoria - Analista de Sistemas É utilizada


para avaliar uma determinada expressão e definir se um bloco de código deve
ou não ser executado. Essa é a definição da estrutura condicional:

a) For
b) If...Then...Else
c) While
d) Do...While
e) Next

(FCC - 0 – TRT/SE - Analista de Sistemas Objeto que se constitui parcialmente


ou é definido em termos de si próprio. Nesse contexto, um tipo especial de
procedimento (algoritmo) será utilizado, algumas vezes, para a solução de
alguns problemas. Esse procedimento é denominado:

a) Recursividade.
b) Rotatividade.
c) Repetição.
d) Interligação.
e) Condicionalidade.

(FCC - – TJ/SE - Analista de Sistemas A recursividade na programação de


computadores envolve a definição de uma função que:
16712855225

a) apresenta outra função como resultado.


b) aponta para um objeto.
c) aponta para uma variável.
d) chama uma outra função.
e) pode chamar a si mesma.

(CESPE - 2011 - -ES - Técnico de Informática - Específicos Uma estrutura de


repetição possibilita executar um bloco de comando, repetidas vezes, até que
seja encontrada uma dada condição que conclua a repetição.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2010 - MPU - Analista de Informática - Desenvolvimento de Sistemas


Se um trecho de algoritmo tiver de ser executado repetidamente e o número de
repetições for indefinido, então é correto o uso, no início desse trecho, da
estrutura de repetição Enquanto.

(CESPE - 2013 - CNJ - Programador de computador) No fluxograma abaixo, se


A = 4, B = 4 e C = 8, o resultado que será computado para Área é igual a 32.

(CESPE - 2011 - -ES - Analista Judiciário - Análise de Banco de Dados -


Específicos Em uma estrutura de repetição com variável de controle, ou
estrutura PARA, a verificação da condição é realizada antes da execução do corpo
da sentença, o que impede a reescrita desse tipo de estrutura por meio de
estrutura de repetição pós-testada.16712855225

(CESPE - 0 – DETRAN/ES - Analista de Sistemas O método de recursividade


deve ser utilizado para avaliar uma expressão aritmética na qual um
procedimento pode chamar a si mesmo, ou seja, a recursividade consiste em um
método que, para que possa ser aplicado a uma estrutura, aplica a si mesmo
para as subestruturas componentes.

(CESPE - 2013 – CPRM - Analista de Sistemas Na implementação de


recursividade, uma das soluções para que se evite o fenômeno de terminação
do programa – que possibilita a ocorrência de um looping infinito – é definir
uma função ou condição de terminação das repetições.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

10. (CESPE - 4 – ANATEL - Analista de Sistemas A recursividade é uma técnica


que pode ser utilizada na implementação de sistemas de lógica complexa, com
a finalidade de minimizar riscos de ocorrência de defeitos no software.

11. (CESPE - 1 – TJ/ES - Analista de Sistemas Tanto a recursividade direta quanto


a indireta necessitam de uma condição de saída ou de encerramento.

12. (CONSULPLAN - 2012 - TSE - Programador de computador Observe o trecho


de pseudocódigo.

A estrutura será executada até que X seja igual ao seguinte valor


a) – 1
b) – 3

13. (CONSULPLAN - 2012 - TSE - Programador de computador Observe o trecho


de pseudocódigo, que mostra o emprego da estrutura de controle enquanto ...
faça ...

A opção que utiliza a estrutura para ... faça ... correspondente, que gera o mesmo
16712855225

resultado, é:

c) Para n de 0 até 6 faça imprimir(n);


d) Para n de 0 até 7 faça imprimir(n);

14. (FEPESE - 2010 - SEFAZ-SC - Auditor Fiscal da Receita Estadual - Parte III -
Tecnologia da Informação Assinale a alternativa correta a respeito das variáveis
e constantes, utilizadas em diversas linguagens de programação.

a) O número de constantes deve ser menor ou igual ao número de variáveis em


um programa.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

b) O número de constantes deve ser menor ou igual ao número de


procedimentos em um programa.
c) O número de constantes deve ser igual ao número de variáveis em um
programa.
d) O número de constantes independe da quantidade de variáveis em um
programa.
e) O número de constantes deve ser igual ao número de procedimentos em um
programa.

15. (NUCEPE - 5 – SEDUC/PI - Analista de Sistemas O código abaixo é usado


para calcular o fatorial de números. Assinale a alternativa CORRETA sobre esse
código:

função fatorial(n)
{
se (n <= 1)
retorne 1;
senão
retorne n * fatorial(n-1);
}

a) Este é um exemplo de procedimento.

b) O comando retorne pode ser retirado do código e a função terá o mesmo


efeito.

c) Exemplo clássico de recursividade.

d) Não é possível chamar a função fatorial dentro dela mesma.

e) O resultado da função sempre retornará um valor elevado a ele mesmo


(valor ^ valor).
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


COMPLEXIDADE DE ALGORITMOS

(VUNESP – 2012 – TJ/SP - Analista Judiciário - Tecnologia da Informação)


Considerando o conceito de Complexidade de Algoritmos, representado por
O(função), assinale a alternativa que apresenta, de forma crescente, as
complexidades de algoritmos.

a) O(2n); O(n3); O(n2); O(log2 n); O(n.log2 n).


b) O(n2); O(n3); O(2n); O(log2 n); O(n.log2 n).
c) O(n3); O(n2); O(2n); O(n.log2 n); O(log2 n).
d) O(log2 n); O(n.log2 n); O(n2); O(n3); O(2n).
e) O(n.log2 n); O(log2 n); O(2n); O(n3); O(n2).

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação Numa competição de programação, ganhava mais pontos o time
que apresentasse o algoritmo mais eficiente para resolver o pior caso de um
determinado problema. A complexidade assintótica (notação Big O) dos
algoritmos elaborados está ilustrada na tabela abaixo.

O time que obteve a medalha de prata (2º algoritmo mais eficiente) é o:


16712855225

a) Branco.
b) Amarelo.
c) Azul.
d) Verde.
e) Vermelho.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


MÉTODOS DE ORDENAÇÃO

(Instituto Cidades - 2012 - TCM-GO - Auditor de Controle Externo - Informática)


São exemplos de algoritmos de ordenação, exceto:

a) Bubble Sort
b) Select Sort
c) Shell Sort
d) Busca Sequencial;
e) Quick Sort;

(FUMARC - 2012 - -MG - Técnico Judiciário - Analista de Sistemas – I) Quicksort


divide um conjunto de itens em conjuntos menores, que são ordenados de forma
independe, e depois os resultados são combinados para produzir a solução de
ordenação do conjunto maior.

(CESPE - 2012 - MPE-PI - Analista Ministerial - Informática - Cargo 6) O heapsort


é um algoritmo de ordenação em que a quantidade de elementos armazenada
fora do arranjo de entrada é constante durante toda a sua execução.

(CESPE - 2010 - ABIN - Oficial Técnico de Inteligência - Área de Suporte a Rede


de Dados) A eficácia do método de ordenação rápida (quicksort) depende da
escolha do pivô mais adequado ao conjunto de dados que se deseja ordenar. A
situação ótima ocorre quando o pivô escolhido é igual ao valor máximo ou ao
valor mínimo do conjunto de dados.
16712855225

(CESPE - 2010 - ABIN - Oficial Técnico de Inteligência - Área de Suporte a Rede


de Dados) A estabilidade de um método de ordenação é importante quando o
conjunto de dados já está parcialmente ordenado.

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Administração de Dados A classificação interna por inserção é um
método que realiza a ordenação de um vetor por meio da inserção de cada
elemento em sua posição correta dentro de um subvetor classificado.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(FCC - 2009 - TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação)


São algoritmos de classificação por trocas apenas os métodos:

a) SelectionSort e InsertionSort.
b) MergeSort e BubbleSort.
c) QuickSort e SelectionSort.
d) BubbleSort e QuickSort.
e) InsertionSort e MergeSort.

(CESGRANRIO - 2011 - PETROBRÁS – Analista de Sistemas – I) O tempo de pior


caso do algoritmo QuickSort é de ordem menor que o tempo médio do
algoritmo Bubblesort.

(CESGRANRIO - 2011 - PETROBRÁS – Analista de Sistemas – II) O tempo médio


do QuickSort é O(nlog2n), pois ele usa como estrutura básica uma árvore de
prioridades.

10. (CESGRANRIO - 2011 - PETROBRÁS – Analista de Sistemas – III) O tempo médio


do QuickSort é de ordem igual ao tempo médio do MergeSort.

11. (CESGRANRIO - 2012 - CMB – Analista de Sistemas – III) Em uma reunião de


análise de desempenho de um sistema WEB, um programador apontou
corretamente que a complexidade de tempo do algoritmo bubblesort, no pior
caso, é:

a) O(1)
b) O(log n)
c) O(n)
d) O(n log n) 16712855225

e) O(n2)

12. (CESPE - 2010 – INMETRO – Analista de Sistemas) Se f é uma função de


complexidade para um algoritmo F, então O(f) é considerada a complexidade
assintótica ou o comportamento assintótico do algoritmo F. Assinale a opção
que apresenta somente algoritmos que possuem complexidade assintótica
quando f(n) = O(n log n).

a) HeapSort e BubbleSort
b) QuickSort e InsertionSort
c) MergeSort e BubbleSort

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

d) InsertionSort
e) HeapSort, QuickSort e MergeSort

13. (FGV - 2013 – MPE/MS – Analista de Sistemas) Assinale a alternativa que indica
o algoritmo de ordenação capaz de funcionar em tempo O(n) para alguns
conjuntos de entrada.

a) Selectionsort (seleção)
b) Insertionsort (inserção)
c) Merge sort
d) Quicksort
e) Heapsort

14. (CESGRANRIO - 10 – BACEN – Analista de Sistemas) Uma fábrica de software


foi contratada para desenvolver um produto de análise de riscos. Em
determinada funcionalidade desse software, é necessário realizar a ordenação
de um conjunto formado por muitos números inteiros. Que algoritmo de
ordenação oferece melhor complexidade de tempo (Big O notation) no pior
caso?

a) Merge sort
b) Insertion sort
c) Bubble sort
d) Quick sort
e) Selection sort

15. (CESPE - 2011 – FUB – Analista de Sistemas) Os métodos de ordenação podem


ser classificados como estáveis ou não estáveis. O método é estável se preserva
a ordem relativa de dois valores idênticos. Alguns métodos eficientes como
16712855225

shellsort ou quicksort não são estáveis, enquanto alguns métodos pouco


eficientes, como o método da bolha, são estáveis.

16. (CESPE - 2012 – BASA – Analista de Sistemas) O método de classificação Shellsort


iguala-se ao método Quicksort em termos de complexidade temporal, porém é
mais eficiente para quantidades pequenas a moderadas de dados.

17. (CESPE - 2012 – BASA – Analista de Sistemas) O método de classificação


Quicksort é estável e executado em tempo linearmente dependente da
quantidade de dados que estão sendo classificados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

18. (CESPE - 2012 – BASA – Analista de Sistemas) No método de ordenamento


denominado shellsort, as comparações e as trocas são feitas conforme
determinada distância entre dois elementos, de modo que, uma distância igual
a 6 seria a comparação entre o primeiro elemento e o sétimo, ou entre o
segundo elemento e o oitavo, e assim sucessivamente, repetindo-se esse
processo até que as últimas comparações e trocas tenham sido efetuadas e a
distância tenha diminuído até chegar a 1.

19. (FGV - – PETROBRÁS – Analista de Sistemas) Sobre o algoritmo de


ordenação heapsort, assinale a afirmação correta.

a) Utiliza ordenação por árvore de decisão, ao invés de ordenação por


comparação.

b) A estrutura de dados que utiliza, chamada heap, pode ser interpretada como
uma árvore binária.

c) Seu desempenho de pior caso é pior do que o do algoritmo quicksort.

d) Seu desempenho de pior caso é o mesmo da ordenação por inserção.

e) Seu desempenho de pior caso é menor do que o da ordenação por


intercalação.

(CESGRANRIO – – BASA – Analista de Sistemas) Com relação aos


algoritmos quicksort e mergsort, o tempo de execução para o:

a) pior caso do quicksort é (n lg n).


b) pior caso do mergesort é (n2). 16712855225

c) pior caso do mergesort é (n lg n).


d) caso médio do mergesort é O(lg n).
e) caso médio do quicksort é O(n2).

21. (CESPE – 2009 – UNIPAMPA – Analista de Sistemas) O algoritmo quicksort, que


divide uma instrução em quatro blocos diferentes de busca, é um exemplo de
estrutura de ordenação de dados.

(CESPE - 2013 – CPRM – Analista de Sistemas) No algoritmo de ordenação


denominado quicksort, escolhe-se um ponto de referência, denominado pivô, e
separam-se os elementos em dois grupos: à esquerda, ficam os elementos

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

menores que o pivô, e à direita ficam os maiores. Repete-se esse processo para
os grupos de elementos formados (esquerda e direita) até que todos os
elementos estejam ordenados.

(CESPE - 2013 – MPU – Analista de Sistemas) Entre os algoritmos de ordenação


e pesquisa bubble sort, quicksort e heapsort, o quicksort é considerado o mais
eficiente, pois se caracteriza como um algoritmo de dividir-para-conquistar,
utilizando operações de particionamento.

24. (CESPE - 2013 – TRT/9 – Analista de Sistemas) No método Quicksort, o pivô é


responsável pelo número de partições em que o vetor é dividido. Como o pivô
não pode ser um elemento que esteja repetido no vetor, o Quicksort não
funciona quando há elementos repetidos.

(FCC - 2011 - TRT - 14ª Região (RO e AC) - Analista Judiciário - Tecnologia da
Informação) NÃO se trata de um método de ordenação (algoritmo):

a) inserção direta.
b) seleção direta.
c) inserção por meio de incrementos decrescentes.
d) direta em cadeias.
e) particionamento.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 74


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


LÓGICA DE PROGRAMAÇÃO

1 2 3 4 5 6 7 8 9 10
B A E C C E E C C E
11 12 13 14 15 16 17 18 19 20
C B A D C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


COMPLEXIDADE DE ALGORITMOS

1 2 3 4 5 6 7 8 9 10
D B

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


MÉTODOS DE ORDENAÇÃO

1 2 3 4 5 6 7 8 9 10
D C C E E C D E E C
11 12 13 14 15 16 17 18 19 20
E E B A C E E C B C
21 22 23 24 25 26 27 28 29 30
E C E E D 16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 74


Aula 01

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

AULA 01

SUMÁRIO PÁGINA
Apresentação 01
- Estruturas de Dados 02
- Estrutura de Arquivos 65
Lista de Exercícios Comentados 67
Gabarito 89

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

ESTRUTURAS DE DADOS

Pessoal, um programa pode ser visto como uma especificação formal da solução de
um problema. Wirth expressa esse conceito por meio de uma equação:

PROGRAMA = ALGORITMO + ESTRUTURA DE DADOS

Nosso foco aqui é em Estruturas de Dados! Na evolução do mundo computacional,


um fator extremamente importante trata da forma de armazenar informações. De
nada adianta o enorme desenvolvimento de hardware e software se a forma de
armazenamento e tratamento de dados não evoluir harmonicamente. E é por isso
que as estruturas de dados são tão fundamentais.

As estruturas de dados, na maioria dos casos, baseiam-se nos tipos de


armazenamento vistos dia a dia, i.e., nada mais são do que a transformação de uma
forma de armazenamento já conhecida e utilizada no mundo real adaptada para o
mundo computacional. Por isso, cada tipo de estrutura de dados possui vantagens
e desvantagens e cada uma tem sua área de atuação otimizada.

Bem, não vou enrolar muito explicando o que é uma Estrutura de Dados! A melhor
forma de saber é vendo exemplos. Antes disso, eu gostaria de falar sobre um
conceito importante: Dados Homogêneos e Heterogêneos. Os primeiros são
aqueles que possuem só um tipo básico de dados (Ex: Inteiros); os segundos são
aqueles que possuem mais de um tipo básico de dados (Ex: Inteiros + Caracteres).
16712855225

Entenderam? Existem estruturas de dados que tratam de dados homogêneos, i.e.,


todos os dados são apenas de um tipo básico, tais como Vetores! Ora, em um vetor,
todos os elementos são do mesmo tipo. Existem estruturas de dados que tratam de
dados heterogêneos, i.e., os dados são de tipos básicos diferentes, tais como Listas!
Ora, em uma lista, todos os elementos são, em geral, de tipos básicos diferentes.

Além dessa classificação, existe outra também importante: Estruturas Lineares e


Estruturas Não-Lineares. As Estruturas Lineares são aquelas em que cada elemento
pode ter um único predecessor (exceto o primeiro elemento) e um único sucessor

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(exceto o último elemento). Como exemplo, podemos citar Listas, Pilhas, Filas,
Arranjos, entre outros.

Já as Estruturas Não-Lineares são aquelas em que cada elemento pode ter mais de
um predecessor e/ou mais de um sucessor. Como exemplo, podemos citar Árvores,
Grafos e Tabelas de Dispersão. Essa é uma classificação muito importante e muito
simples de entender. Pessoal, vocês perceberão que esse assunto é cobrado de
maneira superficial na maioria das questões, mas algumas são nível doutorado!

Por fim, vamos falar sobre Tipos Abstratos de Dados (TAD). Podemos defini-lo como
um modelo matemático (v,o), em que v é um conjunto de valores e o é um conjunto
de operações que podem ser realizadas sobre valores. Eu sei, essa definição é
horrível de entender! Para compreender esse conceito, basta lembrar de abstração,
i.e., apresentar interfaces e esconder detalhes.

Os Tipos Abstratos de Dados são simplesmente um modelo para um certo tipo de


estrutura de dados. Como assim, professor? Quando eu falo em pilha, eu estou
falando de um tipo abstrato de dados que tem duas operações com
comportamentos bem definidos e conhecidos: push (para inserir elementos na
pilha); e pop (para retirar elementos da pilha).

E a implementação dessas operações? Isso não importa! Aliás, não importa


implementação nem paradigma nem linguagem de programação. Não importa se
a pilha é implementada com um paradigma orientado a objetos ou com um
paradigma estruturado; não importa se a pilha é implementada em Java ou Pascal;
não importa como é a implementação interna – isso serve para outras estruturas1.

Podemos concluir, portanto, que um tipo abstrato de dados contém um modelo


que contém valores e operações associadas, de forma que essas operações sejam
16712855225

precisamente independentes de uma implementação particular. Em geral, um TDA


é especificado por meio de uma especificação algébrica que, em geral, contém três
partes: Especificação Sintática, Semântica e de Restrições.

A Especificação Sintática define o nome do tipo, suas operações e o tipo dos


argumentos das operações, definindo a assinatura do TAD. A Especificação
Semântica descreve propriedades e efeitos das operações de forma independente
de uma implementação específica. E a Especificação de Restrições estabelece as
condições que devem ser satisfeitas antes e depois da aplicação das operações.

1
Filas, Pilhas, Árvores, Deques, entre outros.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Em outras palavras, o nível semântico trata do comportamento de um tipo abstrato


de dados; e o nível sintático trata da apresentação de um tipo abstrato de dados.
Podemos dizer, então, que o TAD encapsula uma estrutura de dados com
características semelhantes – podendo ser formado por outros TADs –, e esconde a
efetiva implementação dessa estrutura de quem a manipula.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(FGV – 2015 – DPE/ – Analista de Sistemas) No desenvolvimento de sistemas,


a escolha de estruturas de dados em memória é especialmente relevante. Dentre
outras classificações, é possível agrupar essas estruturas em lineares e não
lineares, conforme a quantidade de sucessores e antecessores que os elementos
da estrutura possam ter. Assinale a opção que apresenta, respectivamente,
estruturas de dados lineares e não lineares.

a) Tabela de dispersão e fila.


b) Estrutura de seleção e pilha.
c) Pilha e estrutura de seleção.
d) Pilha e árvore binária de busca.
e) Fila e pilha.

Comentários:

Além dessa classificação, existe outra também importante: Estruturas Lineares e


Estruturas Não-Lineares. As Estruturas Lineares são aquelas em que cada elemento
pode ter um único predecessor (exceto o primeiro elemento) e um único sucessor
(exceto o último elemento). Como exemplo, podemos citar Listas, Pilhas, Filas,
Arranjos, entre outros.

Já as Estruturas Não-Lineares são aquelas em que cada elemento pode ter mais de
um predecessor e/ou mais de um sucessor. Como exemplo, podemos citar Árvores,
16712855225

Grafos e Tabelas de Dispersão. Essa é uma classificação muito importante e muito


simples de entender. Pessoal, vocês perceberão que esse assunto é cobrado de
maneira superficial na maioria das questões, mas algumas são nível doutorado!

Conforme vimos em aula, trata-se de pilha e árvore respectivamente.

Gabarito: D

(CESPE – 2010 – DETRAN/ES – Analista de Sistemas) Um tipo abstrato de dados


apresenta uma parte destinada à implementação e outra à especificação. Na
primeira, são descritas, em forma sintática e semântica, as operações que podem

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

ser realizadas; na segunda, os objetos e as operações são representados por


meio de representação, operação e inicialização.

Comentários:

A Especificação Sintática define o nome do tipo, suas operações e o tipo dos


argumentos das operações, definindo a assinatura do TAD. A Especificação Semântica
descreve propriedades e efeitos das operações de forma independente de uma
implementação específica. E a Especificação de Restrições estabelece as condições que
devem ser satisfeitas antes e depois da aplicação das operações.

Conforme vimos em aula, as especificações semântica e sintática são tratadas na


parte de especificação.

Gabarito: E

(CESPE – 2010 – TRT/RN – Analista de Sistemas) O tipo abstrato de dados


consiste em um modelo matemático (v,o), em que v é um conjunto de valores e
o é um conjunto de operações que podem ser realizadas sobre valores.

Comentários:

Por fim, vamos falar sobre Tipos Abstratos de Dados (TAD). Podemos defini-lo como
um modelo matemático (v,o), em que v é um conjunto de valores e o é um conjunto
de operações que podem ser realizadas sobre valores. Eu sei, essa definição é horrível
de entender! Para compreender esse conceito, basta lembrar de abstração, i.e.,
apresentar interfaces e esconder detalhes.

Conforme vimos em aula, a questão está perfeita.


16712855225

Gabarito: C

(CESPE – 2010 – BASA – Analista de Sistemas) A escolha de estruturas internas


de dados utilizados por um programa pode ser organizada a partir de TADs que
definem classes de objetos com características distintas.

Comentários:

Em outras palavras, o nível semântico trata do comportamento de um tipo abstrato


de dados; e o nível sintático trata da apresentação de um tipo abstrato de dados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

demos dizer, então, que o TAD encapsula uma estrutura de dados com
características semelhantes – podendo ser formado por outros TADs –, e esconde a
efetiva implementação dessa estrutura de quem a manipula.

Conforme vimos em aula, definem classes de objetos com características


semelhantes.

Gabarito: E

(CESPE – 2010 – BASA – Analista de Sistemas) A descrição dos parâmetros das


operações e os efeitos da ativação das operações representam, respectivamente,
os níveis sintático e semântico em que ocorre a especificação dos TDAs.

Comentários:

A Especificação Sintática define o nome do tipo, suas operações e o tipo dos


argumentos das operações, definindo a assinatura do TAD. A Especificação Semântica
descreve propriedades e efeitos das operações de forma independente de uma
implementação específica. E a Especificação de Restrições estabelece as condições que
devem ser satisfeitas antes e depois da aplicação das operações.

Conforme vimos em aula, a questão está perfeita.

Gabarito: C

(FCC – 2010 – TRE/AM – Analista de Sistemas) Em relação aos tipos abstratos de


dados - TAD, é correto afirmar:

a) O TAD não encapsula a estrutura de dados para permitir que os usuários


16712855225

possam ter acesso a todas as operações sobre esses dados.

b) Na transferência de dados de uma pilha para outra, não é necessário saber


como a pilha é efetivamente implementada.

c) Alterações na implementação de um TAD implicam em alterações em seu uso.

d) Um programador pode alterar os dados armazenados, mesmo que não tenha


conhecimento de sua implementação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

e) TAD é um tipo de dados que esconde a sua implementação de quem o


manipula.

Comentários:

Em outras palavras, o nível semântico trata do comportamento de um tipo abstrato


de dados; e o nível sintático trata da apresentação de um tipo abstrato de dados.
Podemos dizer, então, que o TAD encapsula uma estrutura de dados com
características semelhantes – podendo ser formado por outros TADs –, e esconde a
efetiva implementação dessa estrutura de quem a manipula.

(a) Errado, ele encapsula a estrutura de dados; (b) Correto, não é necessário saber
a implementação, porém a FCC marcou o gabarito como errado; (c) Errado, a
implementação pode mudar livremente; (d) Errado, sem conhecimento da
implementação, ele não poderá alterar dados armazenados; (e) Correto, esse item
também está correto (Lembrem-se: Na FCC, muitas vezes tempos que marcar a
mais correta ou a menos errada – infelizmente!).

Gabarito: C

(FCC – – TRE/PI – Analista de Sistemas) Em relação a tipos abstratos de


dados, é correto afirmar que:

a) o TAD não encapsula a estrutura de dados para permitir que os usuários


possam ter acesso a todas as operações disponibilizadas sobre esses dados.

b) algumas pilhas admitem serem declaradas como tipos abstratos de dados.

c) filas não permitem declaração como tipos abstratos de dados.


16712855225

d) os tipos abstratos de dados podem ser formados pela união de tipos de dados
primitivos, mas não por outros tipos abstratos de dados.

e) são tipos de dados que escondem a sua implementação de quem o manipula;


de maneira geral as operações sobre estes dados são executadas sem que se
saiba como isso é feito.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Em outras palavras, o nível semântico trata do comportamento de um tipo abstrato


de dados; e o nível sintático trata da apresentação de um tipo abstrato de dados.
Podemos dizer, então, que o TAD encapsula uma estrutura de dados com
características semelhantes – podendo ser formado por outros TADs –, e esconde a
efetiva implementação dessa estrutura de quem a manipula.

(a) Errado. Pelo contrário, ele encapsula a estrutura de dados de modo que o usuário
não tem acesso a implementação das operações; (b) Correto. Todas elas admitem,
porém a FCC marcou o gabarito como errado; (c) Errado. Elas permitem a
declaração como tipos abstratos de dados; (d) Errado. Um TAD pode ser formado
por outros TADs; (e) Correto. Escondem a implementação de quem os manipula.

Gabarito: E

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

VETORES E MATRIZES

Um Vetor é uma estrutura de dados linear que necessita de somente um índice para
que seus elementos sejam indexados. É uma estrutura homogênea, portanto
armazena somente uma lista de valores do mesmo tipo. Ele possui alocação estática,
com dados armazenados em posições contíguas de memória e permite o acesso
direto ou aleatório a seus elementos.

Observem que, diferentemente das listas, filas e pilhas, ele vem praticamente
embutido em qualquer linguagem de programação. E a Matriz, professor? Não
muda muita coisa! Trata-se de um arranjo bidimensional ou multidimensional de
alocação estática e sequencial. Ela necessita de um índice para referenciar a linha e
outro para referenciar a coluna para que seus elementos sejam endereçados.

Da mesma forma que um vetor, uma matriz é definida com um tamanho fixo, todos
os elementos são do mesmo tipo, cada célula contém somente um valor e os
tamanhos dos valores são os mesmos. Os elementos ocupam posições contíguas
na memória. A alocação dos elementos pode ser feita colocando os elementos
linha-por-linha ou coluna-por-coluna.

16712855225

MATRIZ 2X7 E VETOR (7 POSIÇÕES)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(FCC - 2009 - -PA - Analista Judiciário - Tecnologia da Informação Considere


uma estrutura de dados do tipo vetor. Com respeito a tal estrutura, é correto
que seus componentes são, característicamente,

a) heterogêneos e com acesso FIFO.


b) heterogêneos e com acesso LIFO.
c) heterogêneos e com acesso indexado-sequencial.
d) homogêneos e acesso não indexado.
e) homogêneos e de acesso aleatório por intermédio de índices.

Comentários:

Vetores possuem componentes homogêneos, i.e., todos os dados são de apenas


um único tipo básico de dados. Ademais, seu acesso é aleatório por meio de índices!
Bem, seria mais correto dizer que seu acesso é direto.

Gabarito: E

(CETAP - 2010 - - - Analista de Sistemas Matrizes são estruturas de dados


de n-dimensões. Por simplicidade, chamaremos de matrizes as matrizes
bidimensionais numéricas (que armazenam números inteiros). Sendo assim,
marque a alternativa INCORRETA.
16712855225

a) Uma matriz de m linhas e n colunas contêm (m * n) dados.

b) Uma matriz pode ser representada utilizando listas ligadas.

c) A soma dos elementos de uma matriz pode ser calculada fazendo dois laços
aninhados, um sobre as linhas e o outro sobre as colunas.

d) A soma de duas matrizes de m linhas e n colunas resulta em uma matriz de


2*m linhas e 2*n colunas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

e) O produto de duas matrizes de n linhas e n colunas resulta em uma matriz de


n linhas e n colunas.

Comentários:

(a) Perfeito, são M x N colunas; (b) Perfeito, podem ser utilizadas listas ligadas; (c)
Perfeito, um laço para as linhas e outro para as colunas; (d) Não, a soma de uma
Matriz 3x5 com outra Matriz 3x5 resulta em uma Matriz 3x5; (e) Perfeito, uma Matriz
2x2 multiplicada por outra Matriz 2x2 resulta em uma Matriz 2x2.

Gabarito: D

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Arquitetura de Tecnologia Os dados armazenados em uma
estrutura do tipo matriz não podem ser acessados de maneira aleatória.
Portanto, usa-se normalmente uma matriz quando o volume de inserção e
remoção de dados é maior que o volume de leitura dos elementos armazenados.

Comentários:

Podem, sim, ser acessados de maneira aleatória ou direta, por meio de seus índices.
Ademais, usa-se normalmente uma matriz quando o volume de leitura de
elementos armazenados é maior que o volume de inserção e remoção de dados.
Ora, é possível fazer acesso direto, logo é eficiente mesmo com alto volume de
leitura.

Gabarito: E

(CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


16712855225

Informação Entre alguns tipos de estrutura de dados, podem ser citados os


vetores, as pilhas e as filas.

Comentários:

Perfeito! Questão extremamente simples.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2011 - EBC - Analista - Engenharia de Software Vetores são utilizados


quando estruturas indexadas necessitam de mais que um índice para identificar
um de seus elementos.

Comentários:

Não! Se são necessários mais de um índice, utilizam-se Matrizes! Vetores necessitam


apenas de um índice.

Gabarito: E

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Vetores


podem ser considerados como listas de informações armazenadas em posição
contígua na memória.

Comentários:

Perfeito! Vetores podem ser considerados como listas de informações? Sim! As


informações (dados) são armazenadas em posição contígua na memória? Sim, em
geral são armazenados de forma contígua.

Gabarito: C

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Uma posição


específica de um vetor pode ser acessada diretamente por meio de seu índice.

Comentários:

Perfeito! Observem que vetores são diferentes de listas, nesse sentido. Eu posso
16712855225

acessar qualquer elemento diretamente por meio de seu índice.

Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA ENCADEADA

Também conhecida como Lista Encadeada Linear, Lista Ligada Linear ou Linked List,
trata-se de uma estrutura de dados dinâmica formada por uma sequência
encadeada de elementos chamados nós, que contêm dois campos: campo de
informação e campo de endereço. O primeiro armazena o real elemento da lista e
o segundo contém o endereço do próximo nó da lista.

Esse endereço, que é usado para acessar determinado nó, é conhecido como
ponteiro. A lista ligada inteira é acessada a partir de um ponteiro externo que aponta
para o primeiro nó na lista, i.e., contém o endereço do primeiro nó 2. Por ponteiro
"externo", entendemos aquele que não está incluído dentro de um nó. Em vez disso,
seu valor pode ser acessado diretamente, por referência a uma variável.

O campo do próximo endereço do último nó na lista contém um valor especial,


conhecido como NULL, que não é um endereço válido. Esse ponteiro nulo é usado
para indicar o final de uma lista. Uma lista é chamada Lista Vazia ou Lista Nula caso
não tenha nós ou tenha apenas um nó sentinela. O valor do ponteiro externo para
esta lista é o ponteiro nulo. Uma lista pode ser inicializada com uma lista vazia.

16712855225

Suponha que seja feita uma mudança na estrutura de uma lista linear, de modo que
o campo próximo no último nó contenha um ponteiro de volta para o primeiro nó,
em vez de um ponteiro nulo. Esse tipo de lista é chamado Lista Circular (ou

2
O endereço do primeiro nó pode ser encapsulado para facilitar possíveis futuras operações sobre a lista sem a
necessidade de se conhecer sua estrutura interna. O primeiro elemento e o último nós são muitas vezes
chamados de Sentinela.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Fechada3), i.e., a partir de qualquer ponto, é possível atingir qualquer outro ponto
da lista. Certinho, até agora?

Observe que uma Lista Circular não tem um primeiro ou último nó natural.
Precisamos, portanto, estabelecer um primeiro e um último nó por convenção. Uma
convenção útil é permitir que o ponteiro externo para a lista circular aponte para o
último nó, e que o nó seguinte se torne o primeiro nó. Assim podemos incluir ou
remover um elemento convenientemente a partir do início ou do final de uma lista.

16712855225

Embora uma lista circularmente ligada tenha vantagens sobre uma lista linear, ela
ainda apresenta várias deficiências. Não se pode atravessar uma lista desse tipo no
sentido contrário nem um nó pode ser eliminado de uma lista circularmente ligada
sem se ter um ponteiro para o nó antecessor. Nos casos em que tais recursos são
necessários, a estrutura de dados adequada é uma lista duplamente ligada.

3
Se Listas Circulares são conhecidas como Listas Fechadas, as Listas Abertas são todas aquelas que são Não-
Circulares. Por fim: da mesma forma que há Listas Circulares Simples, há também Listas Circulares Duplas. Nesse
caso, o ponteiro anterior do primeiro elemento aponta para o último elemento e o ponteiro posterior do último
elemento aponta para o primeiro elemento.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Cada nó numa lista desse tipo contém dois ponteiros, um para seu predecessor e
outro para seu sucessor. Na realidade, no contexto de listas duplamente ligadas, os
termos predecessor e sucessor não fazem sentido porque a lista é totalmente
simétrica. As listas duplamente ligadas podem ser lineares ou circulares e podem
conter ou não um nó de cabeçalho.

Podemos considerar os nós numa lista duplamente ligada como consistindo em três
campos: um campo info que contém as informações armazenadas no nó, e os
campos left e right, que contêm ponteiros para os nós em ambos os lados. Dado
ponteiro para um elemento, pode-se acessar os elementos adjacentes e, dado
um ponteiro para o último elemento, pode-se percorrer a lista em ordem inversa.

Existem cinco operações básicas sobre uma lista encadeada: Criação, em que se cria
a lista na memória; Busca, em que se pesquisa nós na lista; Inclusão, em que se
insere novos nós na lista em uma determinada posição; Remoção, em que se elimina
um elemento da lista; e, por fim, Destruição, em que se destrói a lista junto com
todos os seus nós.

IMPORTANTE

Pilhas e Filas são subespécies de Listas. No entanto, cuidado na hora de responder


questões! De maneira genérica, Pilhas e Filas podem ser implementadas como Listas.
No entanto, elas possuem características particulares de uma lista genérica. Ok?

Precisamos falar um pouco sobre Fragmentação! O que é isso, professor? Galera,


falou em fragmentação, lembrem-se de desperdício de espaço disponível de
memória. O fenômeno no qual existem vários blocos disponíveis pequenos e não-
16712855225

contíguos é chamado fragmentação externa porque o espaço disponível é


desperdiçado fora dos blocos alocados.

Esse fenômeno é o oposto da fragmentação interna, no qual o espaço disponível é


desperdiçado dentro dos blocos alocados, como apresenta a imagem abaixo.
Sistemas Operacionais possuem uma estrutura de dados que armazena
informações sobre áreas ou blocos livres (geralmente uma lista ou tabela). Uma lista
encadeada elimina o problema da fragmentação externa. Por que?

Porque mantém os arquivos, cada um, como uma lista encadeada de blocos de
disco. Dessa forma, uma parte de cada bloco é usada como ponteiro para o próximo

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

bloco e o restante do bloco é usado para dados. Uma vantagem desse tipo de
alocação é que o tamanho do arquivo não precisa ser conhecido antes de sua
criação, já que cada bloco terá um ponteiro para o próximo bloco.

Galera... e o acesso a uma lista? Lista é uma estrutura de acesso sequencial, i.e., é
preciso percorrer por nó para acessar um dado específico. Logo, é proporcional
ao número de elementos – Acesso O(n). E os Vetores? Eles são uma estrutura de
acesso direto, i.e., pode-se acessar um elemento diretamente. Portanto, não precisa
percorrer elemento por elemento (Acesso O(1)) 4.
16712855225

4
No Acesso Sequencial: quanto mais ao fim, maior o tempo para acessar; no Acesso Direto: todos os elementos
são acessados no mesmo tempo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) O tempo de busca de um elemento em uma lista duplamente encadeada
é igual à metade do tempo da busca de um elemento em uma lista simplesmente
encadeada.

Comentários:

Não! Apesar de permitir que se percorra a lista em ambas as direções, em média


ambas possuem o mesmo tempo de busca de um elemento.

Gabarito: E

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) Em algumas implementações, uma lista vazia pode ter um único nó,
chamado de sentinela, nó cabeça ou header. Entre suas possíveis funções, inclui-
se simplificar a implementação de algumas operações realizadas sobre a lista,
como inserir novos dados, recuperar o tamanho da lista, entre outras.

Comentários:

Perfeito! Ele simplifica a implementação de algumas operações porque se guarda o


endereço do primeiro e do último elemento de uma estrutura de dados de modo
que o programador não precisa conhecer a estrutura de implementação da lista
16712855225

para realizar suas operações.

Gabarito: C

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) Estruturas ligadas como listas encadeadas superam a limitação das
matrizes que não podem alterar seu tamanho inicial.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Perfeito! Listas Encadeadas admitem alocação dinâmica, em contraste com as


matrizes.

Gabarito: C

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) As listas duplamente encadeadas diferenciam-se das listas simplesmente
encadeadas pelo fato de, na primeira, os nós da lista formarem um anel com o
último elemento ligado ao primeiro da lista.

Comentários:

Não, a diferença é que Listas Duplamente Encadeadas possuem dois ponteiros, que
apontam para o nó sucessor e para o nó predecessor e Listas Simplesmente
Encadeadas possuem apenas um ponteiro, que aponta para o nó sucessor.

Gabarito: E

(FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas - E) Numa lista


singularmente encadeada, para acessar o último nodo é necessário partir do
primeiro e ir seguindo os campos de ligação até chegar ao final da lista.

Comentários:

Perfeito. Se é uma lista singularmente encadeada, é necessário percorrer cada


elemento um-a-um até chegar ao final da lista.

Gabarito: C
16712855225

(CESPE - 2011 - EBC - Analista - Engenharia de Software) Uma lista é uma coleção
de elementos do mesmo tipo dispostos linearmente, que podem ou não seguir
determinada organização. As listas podem ser dos seguintes tipos: de
encadeamento simples, duplamente encadeadas e ordenadas.

Comentários:

Uma lista é, por natureza, heterogênea, i.e., seus elementos são compostos por tipos
de dados primitivos diferentes. A questão afirmou que a lista é uma coleção de
elementos do mesmo tipo. E ela está certa, veja só o peguinha da questão:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Eu crio um tipo composto por dois tipos de dados diferentes: tipoEstrategia = {curso:
caractere; duracao: inteiro}. Observe que o tipo tipoEstrategia é composto por tipos de
dados primitivos diferentes (caractere e inteiro). Agora eu crio uma lista ListaEstrategia:
tipoEstrategia. Veja que todos os elementos dessa lista terão o mesmo tipo
(tipoEstrategia). Em outras palavras: a Lista Heterogênea é composta por elementos do
mesmo tipo que, em geral, são compostos por mais de um tipo primitivo.

Além disso, as listas podem ser simplesmente encadeadas, duplamente encadeadas


e ordenadas. E ainda podem ser circulares. Observem que alguns autores
consideram Listas Ordenadas como um tipo de lista! Como, professor? Ela é uma
lista em que seus elementos são ordenados (crescente ou decrescente).

Gabarito: C

(CESPE - - ANAC - Técnico Administrativo - Informática) Em uma lista


circular duplamente encadeada, cada nó aponta para dois outros nós da lista,
um anterior e um posterior.

Comentários:

Perfeito! Há dois ponteiros: uma para o nó anterior e um para o nó posterior.

Gabarito: C

(CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


Informação) A principal característica de uma lista encadeada é o fato de o último
elemento da lista apontar para o elemento imediatamente anterior.

Comentários: 16712855225

Não, o último elemento da lista não aponta para nenhum outro nó em uma lista
não-circular.

Gabarito: E

(CESPE - - TCE-AC - Analista de Controle Externo - Processamentos de


Dados) Uma lista encadeada é uma coleção de nodos que, juntos, formam uma
ordem linear. Se é possível os nodos se deslocarem em ambas as direções na
lista, diz-se que se trata de uma lista simplesmente encadeada.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Comentários:

Se é possível os nodos se deslocarem em ambas as direções na lista, diz-se que se


trata de uma lista duplamente encadeada.

Gabarito: E

10. (CESPE - 2008 – HEMOBRÁS – Técnico de Informática) Uma estrutura do tipo


lista, em que é desejável percorrer o seu conteúdo nas duas direções
indiferentemente, é denominado lista duplamente encadeada.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

11. (CESPE - 2010 – TRE/MT – Analista de Sistemas – C) Uma lista duplamente


encadeada é uma lista em que o seu último elemento referencia o primeiro.

Comentários:

Não, isso se trata de uma Lista Circular!

Gabarito: E

12. (CESPE - 2006 – SGA/AC – Analista de Sistemas) O principal problema da


alocação por lista encadeada é a fragmentação.
16712855225

Comentários:

Não! Em geral, a alocação por lista encadeada elimina a fragmentação.

Gabarito: E

13. (CESPE - – MCT – Analista de Sistemas) O armazenamento de arquivos em


disco pode ser feito por meio de uma lista encadeada, em que os blocos de
disco são ligados por ponteiros. A utilização de lista encadeada elimina
completamente o problema de fragmentação interna.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Comentários:

Não, ela elimina a fragmentação externa!

Gabarito: E

14. (CESPE - – FINEP – Analista de Sistemas) Uma lista encadeada é uma


representação de objetos na memória do computador que consiste de uma
sequência de células em que:

a) cada célula contém apenas o endereço da célula seguinte.

b) cada célula contém um objeto e o tipo de dados da célula seguinte.

c) o último elemento da sequência aponta para o próximo objeto que


normalmente possui o endereço físico como not null.

d) cada célula contém um objeto de algum tipo e o endereço da célula seguinte.

e) a primeira célula contém o endereço da última célula.

Comentários:

Cada célula contém um objeto de algum tipo e o endereço da célula seguinte!

Gabarito: D

15. (CESPE - 2010 – BASA – Analista de Sistemas) Em uma lista encadeada, o tempo
de acesso a qualquer um de seus elementos é constante e independente do
16712855225

tamanho da estrutura de dados.

Comentários:

Claro que não! Em uma busca sequencial, o tempo de acesso é proporcional ao


tamanho da estrutura de dados, i.e., quanto mais ao final da lista, maior o tempo de
acesso! Por que, professor? Porque a lista é acessada sequencialmente (ou seja, é
preciso percorrer elemento por elemento) e, não, diretamente (ou seja, pode-se
acessar de modo direto). Um vetor tem acesso direto, portanto seu tempo de acesso
é igual independentemente do tamanho da estrutura.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Gabarito: E

16. (CESPE - 2010 – INMETRO – Analista de Sistemas – C) Considere que Roberto


tenha feito uso de uma lista encadeada simples para programar o
armazenamento e o posterior acesso aos dados acerca dos equipamentos
instalados em sua empresa. Considere, ainda, que, após realizar uma consulta
acerca do equipamento X, Roberto precisou acessar outro equipamento Y que
se encontrava, nessa lista, em posição anterior ao equipamento X. Nessa
situação, pela forma como os ponteiros são implementados em uma lista
encadeada simples, o algoritmo usado por Roberto realizou a consulta ao
equipamento Y sem reiniciar a pesquisa do começo da lista.

Comentários:

Não! Infelizmente, ele teve que reiniciar a pesquisa a partir do primeiro elemento
da lista, na medida em que ele não pode voltar. Por que, professor? Porque se trata
de uma lista encadeada simples e, não, dupla. Portanto, a lista só é percorrida em
uma única direção.

Gabarito: E

17. (FCC - – TRE/ – Analista de Sistemas) Os dados contidos em uma lista


encadeada estão:

a) ordenados seqüencialmente.
b) sem ordem lógica ou física alguma.
c) em ordem física e não, necessariamente, em ordem lógica.
d) em ordem lógica e, necessariamente, em ordem física.
e) em ordem lógica e não, necessariamente, em ordem física.
16712855225

Comentários:

A Ordem Física é sua disposição na memória do computador e a Ordem Lógica é


como ela pode ser lida e entendida. Ora, a ordem em que ela se encontra na
memória pouco importa, visto que cada sistema operacional e cada sistema de
arquivos tem sua maneira. Portanto, trata-se da ordem lógica e, não,
necessariamente física.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

18. (FCC - 2010 – DPE/SP – Analista de Sistemas) Uma estrutura de dados que possui
três campos: dois ponteiros e campo de informação denomina-se:

a) lista encadeada dupla.


b) Lista encadeada simples.
c) pilha.
d) fila.
e) vetor.

Comentários:

Trata-se da Lista Encadeada Dupla: dois ponteiros (Ant e Prox) e um campo de


informação.

Gabarito: A

19. (CESPE - 2010 – TRE/MT – Analista de Sistemas) O algoritmo para inclusão de


elementos em uma pilha é usado sem nenhuma alteração para incluir elementos
em uma lista.

Comentários:

Galera... uma pilha pode ser implementada por meio de uma lista! Ademais, o
algoritmo para inclusão de elementos de ambas necessita do primeiro elemento (ou
topo). Portanto, questão correta!

Gabarito: C

ACERTEI 16712855225

ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

PILHAS

A Pilha é um conjunto ordenado de itens no qual novos itens podem ser inseridos
e eliminados em uma extremidade chamada topo. Novos itens podem ser colocados
no topo da pilha (tornando-se o novo primeiro elemento) ou os itens que estiverem
no topo da pilha poderão ser removidos (tornando-se o elemento mais abaixo o
novo primeiro elemento).

Também conhecida como Lista LIFO (Last In First Out), basta lembrar de uma pilha
de pratos esperando para serem lavados, i.e., o último a entrar é o primeiro a sair.
A ordem em que os pratos são retirados da pilha é o oposto da ordem em que eles
são colocados sobre a pilha e, como consequência, apenas o prato do topo da pilha
está acessível.

16712855225

As Pilhas oferecem três operações básicas: push, que insere um novo elemento no
topo da pilha; pop, que remove um elemento do topo da pilha; e top (também
conhecida como check), que acessa e consulta o elemento do topo da pilha. Pilhas
podem ser implementadas por meio de Vetores (Pilha Sequencial - Alocação
Estática de Memória) ou Listas (Pilha Encadeada - Alocação Dinâmica de Memória).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2011 - FUB - Analista de Tecnologia da Informação - Específicos) As


pilhas são listas encadeadas cujos elementos são retirados e acrescentados
sempre ao final, enquanto as filas são listas encadeadas cujos elementos são
retirados e acrescentados sempre no início.

Comentários:

Bem... o que é o final de uma Pilha? Pois é, não se sabe! O que existe é o Topo da
Pilha, de onde sempre são retirados e acrescentados elementos. Em Filas, elementos
são retirados do início e acrescentados no final.

Gabarito: E

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) Na estrutura de dados do tipo lista, todo elemento
novo que é introduzido na pilha torna-se o elemento do topo.

Comentários:

Galera... filas e pilhas são considerados espécies de lista. Como a questão não
especificou sobre qual tipo de lista ela está se referindo, não se pode afirmar que
todo elemento novo que é introduzido na pilha torna-se o elemento do topo.
Questão extremamente mal escrita e que causou a alteração de gabarito de
16712855225

verdadeiro para falso.

Gabarito: E

(CESPE - 12 - -RO - Analista Judiciário - Analista de Sistemas Suporte – E)


Visitas a sítios armazenadas em um navegador na ordem last-in-first-out é um
exemplo de lista.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Não! Last-In-First-Out (LIFO) é um exemplo de Pilha! Cuidado, pilhas podem ser


implementadas como listas, mas esse não é o foco da questão.

Gabarito: E

(ESAF - 2013 - DNIT - Analista Administrativo - Tecnologia da Informação)


Assinale a opção correta relativa às operações básicas suportadas por pilhas.

a) Push: insere um novo elemento no final da pilha.


b) Pop: adiciona elementos ao topo da pilha.
c) Pull: insere um novo elemento no interior da pilha.
d) Top: transfere o último elemento para o topo da pilha.
e) Top: acessa o elemento posicionado no topo da pilha.

Comentários:

(a) Não, é no topo; (b) Não, remove do topo; (c) Não, não existe; (d) Não,
simplesmente acessa e consulta o elemento do topo; (e) Perfeito!

Gabarito: E

(FCC - 2012 – TST - Analista de Sistemas – C) As pilhas e as filas são estruturas


de dados essenciais para os sistemas computacionais. É correto afirmar que a
pilha é conhecida como lista FIFO - First In First Out.

Comentários:

Não! Pilha é LIFO e Fila é FIFO.


16712855225

Gabarito: E

(FCC - 2012 – TRE/CE - Analista de Sistemas) Sobre pilhas é correto afirmar:

a) Uma lista LIFO (Last-In/First-Out) é uma estrutura estática, ou seja, é uma


coleção que não pode aumentar e diminuir durante sua existência.

b) Os elementos na pilha são sempre removidos na mesma ordem em que foram


inseridos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

c) Uma pilha suporta apenas duas operações básicas, tradicionalmente


denominadas push (insere um novo elemento no topo da pilha) e pop (remove
um elemento do topo da pilha).

d) Cada vez que um novo elemento deve ser inserido na pilha, ele é colocado
no seu topo e, em qualquer momento, apenas aquele posicionado no topo da
pilha pode ser removido.

e) Sendo P uma pilha e x um elemento qualquer, a operação Push(P,x) diminui


o tamanho da pilha P, removendo o elemento x do seu topo.

Comentários:

(a) Não, é uma estrutura dinâmica; (b) Não, é na ordem inversa (último a entrar é o
primeiro a sair); (c) Não, há também Top ou Check, que acessar e consulta o
elemento do topo; (d) Perfeito, é exatamente isso; (e) Push é a operação de inserção
de novos elementos na pilha, portanto aumenta seu tamanho adicionando o
elemento x no topo.

Gabarito: D

(CESPE - 2011 - EBC - Analista - Engenharia de Software) As pilhas, também


conhecidas como listas LIFO ou PEPS, são listas lineares em que todas as
operações de inserção e remoção de elementos são feitas por um único extremo
da lista, denominado topo.

Comentários:

Não! LIFO é similar a UEPS (Último a Entrar, Primeiro a Sair). PEPS refere-se a
16712855225

Primeiro a Entrar, Primeiro a Sair, ou seja, FIFO.

Gabarito: E

(VUNESP - 2011 - TJM- - Analista de Sistemas - Judiciário) Lista do tipo LIFO


(Last in, First Out) e lista do tipo FIFO (Firstin,First Out) são, respectivamente,
características das estruturas de dados denominadas:

a) Fila e Pilha.
b) Pilha e Fila.
c) Grafo e Árvore.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

d) Árvore e Grafo.
e) Árvore Binária e Árvore Ternária.

Comentários:

E aí, já está automático para responder? Tem que ser automática: Pilha (LIFO) e Fila
(FIFO).

Gabarito: B

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Arquitetura de Tecnologia A definição da estrutura pilha permite
a inserção e a eliminação de itens, de modo que uma pilha é um objeto
dinâmico, cujo tamanho pode variar constantemente.

Comentários:

Essa questão é polêmica, porque é inevitável pensar em Pilhas Sequenciais


(implementadas por vetores estáticos)! No entanto, é comum que as bancas tratem
por padrão Pilha como Pilha Encadeada (implementadas por listas dinâmicas). Dessa
forma, a questão está perfeita!

Gabarito: C

10. (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Administração de Dados) Na representação física de uma pilha
sequencial, é necessário uso de uma variável ponteiro externa que indique a
extremidade da lista linear onde ocorrem as operações de inserção e retirada de
nós. 16712855225

Comentários:

As Pilhas oferecem três operações básicas: push, que insere um novo elemento no
topo da pilha; pop, que remove um elemento do topo da pilha; e top (também
conhecida como check), que acessa e consulta o elemento do topo da pilha. Pilhas
podem ser implementadas por meio de Vetores (Pilha Sequencial - Alocação Estática
de Memória) ou Listas (Pilha Encadeada - Alocação Dinâmica de Memória).

Conforme vimos em aula, a questão trata de uma Pilha Sequencial (i.e.,


implementada por meio de Vetores). Dessa forma, não é necessário o uso de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

ponteiros – esse seria o caso de uma Pilha Encadeada. Eu posso realmente dizer
que é suficiente, mas não posso afirmar que é necessária a utilização de um ponteiro
externo. Eu até poderia dizer que é necessário o uso de um indicador, mas ele
também não necessariamente será um ponteiro. Logo, discordo do gabarito!

Gabarito: C

11. (CESPE - - ANAC - Técnico Administrativo - Informática) As operações de


inserir e retirar sempre afetam a base de uma pilha.

Comentários:

Não, sempre afetam o topo da pilha!

Gabarito: E

12. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da
Informação) Pilha é uma estrutura de dados:

a) cujo acesso aos seus elementos segue tanto a lógica LIFO quanto a FIFO.
b) cujo acesso aos seus elementos ocorre de forma aleatória.
c) que pode ser implementada somente por meio de vetores.
d) que pode ser implementada somente por meio de listas.
e) cujo acesso aos seus elementos segue a lógica LIFO, apenas.

Comentários:

(a) Não, somente LIFO; (b) Não, somente pelo Topo; (c) Não, pode ser por listas; (d)
Não, pode ser por vetores; (e) Perfeito, é exatamente isso.
16712855225

Gabarito: E

13. (CESPE - 04 – STJ – Analista de Sistemas Em geral, em uma pilha só se admite


ter acesso ao elemento localizado em seu topo. Isso se adapta perfeitamente à
característica das seqüências em que só o primeiro componente é diretamente
acessível.

Comentários:

Perfeito, é exatamente isso – muda-se apenas a perspectiva!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Gabarito: C

14. (CESPE - 2004 – STJ – Analista de Sistemas) A seguir, está representada


corretamente uma operação de desempilhamento em uma pilha de nome p.

se p.topo = 0 então
nada {pilha vazia}
senão p.topo  p.topo-1

Comentários:

Perfeito! Se não tem topo, é porque a pilha está vazia. Se tiver topo, então o topo
será o elemento anterior ao topo. O que ocorreu? Eu desempilhei a pilha!

Gabarito: C

15. (CESPE - 2010 – TRE/MT - Analista de Sistemas – A) O tipo nó é inadequado para


implementar estruturas de dados do tipo pilha.

Comentários:

Não! Uma pilha pode ser implementada por meio de um vetor ou de uma lista.
Nesse último caso, temos tipos nós!

Gabarito: E

16. (FGV – 2015 – DPE/ – Analista de Sistemas) Assinale a opção que apresenta a
estrutura de dados na qual o primeiro elemento inserido é o último a ser
16712855225

removido.

a) Árvore
b) Fila
c) Pilha
d) Grafo
e) Tabela de dispersão

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Também conhecida como Lista LIFO (Last In First Out), basta lembrar de uma pilha
de pratos esperando para serem lavados, i.e., o último a entrar é o primeiro a sair. A
ordem em que os pratos são retirados da pilha é o oposto da ordem em que eles são
colocados sobre a pilha e, como consequência, apenas o prato do topo da pilha está
acessível.

Conforme vimos em aula, trata-se da Pilha.

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

FILAS

Uma fila é um conjunto ordenado de itens a partir do qual podem-se eliminar itens
numa extremidade (chamada início da fila) e no qual podem-se inserir itens na outra
extremidade (chamada final da fila). Também conhecida como Lista FIFO (First In
First Out), basta lembrar de uma fila de pessoas esperando para serem atendidas
em um banco, i.e., o primeiro a entrar é o primeiro a sair.

Quando um elemento é colocado na fila, ele ocupa seu lugar no fim da fila, como
um aluno recém-chegado que ocupa o final da fileira. O elemento retirado da fila é
sempre aquele que está no início da fila, como o aluno que se encontra no começo
da fileira e que esperou mais tempo. As operações básicas são Enqueue (Enfileirar)
e Dequeue (Desenfileirar). As Filas possuem início (ou cabeça) e fim (ou cauda).
16712855225

É bom salientar outro conceito importante: Deque (Double Ended Queue)! É


também conhecida como Filas Duplamente Encadeadas e permite a eliminação e
inserção de itens em ambas as extremidades. Ademais, elas permitem algum tipo
de priorização, visto que é possível inserir elementos de ambos os lados. Assim
sendo, é comum em sistemas distribuídos!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Análise de Sistemas) Em um programa existe a necessidade de
guardar todas as alterações feitas em determinado dado para que seja possível
desfazer alterações feitas ao longo de toda a sua existência. Nessa situação, a
estrutura de dados mais adequada para o armazenamento de todas as
alterações citadas seria uma fila.

Comentários:

Não! Pensem comigo: eu faço uma atividade, depois outra, depois mais uma e, por
fim, mais outra. Se eu desejo desfazer a última atividade realizada para retornar a
um estado anterior, eu preciso de uma pilha. Dessa forma, resgata-se o último
estado válido e, não, o primeiro.

Gabarito: E

(CESPE - 2012 – TST – Analista de Sistemas – A) As pilhas e as filas são estruturas


de dados essenciais para os sistemas computacionais. É correto afirmar que a fila
é conhecida como lista LIFO - Last In First Out.

Comentários:

Não, Fila é FIFO! 16712855225

Gabarito: E

(CESPE - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) As filas


são estruturas com base no princípio LIFO (last in, first out), no qual os dados
que forem inseridos primeiro na fila serão os últimos a serem removidos. Existem
duas funções que se aplicam a todas as filas: PUSH, que insere um dado no topo
da fila, e POP, que remove o item no topo da fila.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Não, isso é uma Pilha (LIFO).

Gabarito: E

(FCC - 2012 - MPE-AP – Analista de Sistemas - A) Nas estruturas de dados,


devido às características das operações da fila, o primeiro elemento a ser inserido
será o último a ser retirado. Estruturas desse tipo são conhecidas como LIFO.

Comentários:

Não, será o primeiro a ser retirado – são do tipo FIFO!

Gabarito: E

(FCC - 2012 - MPE-AP – Analista de Sistemas - C) Nas estruturas de dados, a fila


é uma lista linear na qual as operações de inserção e retirada ocorrem apenas
no início da lista.

Comentários:

Não, isso é a definição de Pilha!

Gabarito: E

(FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas – D) Pela definição


de fila, se os elementos são inseridos por um extremo da lista linear, eles só
podem ser removidos pelo outro.

Comentários: 16712855225

Perfeito, é exatamente isso!

Gabarito: C

(FCC - 2011 - TRT - 19ª Região (AL) - Analista Judiciário - Tecnologia da


Informação) FIFO refere-se a estruturas de dados do tipo:

a) fila.
b) árvore binária.
c) pilha.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

d) matriz quadrada.
e) cubo.

Comentários:

Trata-se da Fila!

Gabarito: A

(ESAF - 2010 - CVM - Analista de Sistemas - prova 2) Uma fila é um tipo de lista
linear em que:

a) as inserções são realizadas em um extremo e as remoções no outro extremo.


b) as inserções e remoções são realizadas em um mesmo extremo.
c) podem ser realizadas apenas inserções.
d) a inserção de um elemento requer a remoção de outro elemento.
e) a ordem de saída não corresponde à ordem de entrada dos elementos.

Comentários:

As inserções são realizadas em um extremo e as remoções são realizadas no outro


extremo, por isso é FIFO!

Gabarito: A

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas) No armazenamento de


dados pelo método FIFO (first in - first out), a estrutura de dados é representada
por uma fila, em cuja posição final ocorrem inserções e, na inicial, retiradas.
16712855225

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

10. (CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


Informação) Entre alguns tipos de estrutura de dados, podem ser citados os
vetores, as pilhas e as filas.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Perfeito, são todos exemplos de estruturas de dados!

Gabarito: C

11. (CESPE - 2004 – SES/PA – Analista de Sistemas) Uma estrutura mais geral que as
pilhas e filas é o deque, em que as inserções, retiradas e acessos são permitidos
em ambas as extremidades.

Comentários:

Perfeito, deques permitem todas essas operações!

Gabarito: C

12. (CESPE - – TCE/AC – Analista de Sistemas – D) Um deque (double ended


queue) requer inserção e remoção no topo de uma lista e permite a
implementação de filas com algum tipo de prioridade. A implementação de um
deque, geralmente é realizada com a utilização de uma lista simplesmente
encadeada.

Comentários:

Não, pode ser do início ou fim da lista! De fato, permite a implementação de filas
com algum tipo de prioridade, mas geralmente é realizada com a utilização de filas
duplamente encadeadas.

Gabarito: E
16712855225

13. (FCC - 2007 – TRT/23 – Analista de Sistemas) Uma estrutura de dados com
vocação de FIFO de duplo fim e que admite a rápida inserção e remoção em
ambos os extremos é:

a) uma pilha.
b) uma splay tree.
c) um deque.
d) uma lista linear.
e) uma árvore AVL.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Trata-se de um Deque – fila duplamente encadeada!

Gabarito: C

14. (CESPE - 2004 – PBV/RR - Analista de Sistemas) As filas com prioridade são listas
lineares nas quais os elementos são pares da forma (qi, pi), em que q é o
elemento do tipo base e p é uma prioridade. Elas possuem uma política de fila
do tipo FIFO (first in first out) entre os elementos de mesma prioridade.

Comentários:

Perfeito! É assim que funciona a prioridade em conjunto com filas.

Gabarito: C

15. (CESPE - 2004 – STJ – Analista de Sistemas) A seguir, está representada


corretamente uma operação de retirada em uma fila de nome f.

se f.começo = nil então


erro {fila vazia}
senão j  f.começo.info

Comentários:

Não, o correto seria:

se f.começo = nil então


erro {fila vazia} 16712855225

senão f.começo  f.começo - 1

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

ÁRVORES

Uma árvore é uma estrutura de dados hierárquica (não-linear) composta por um


conjunto finito de elementos com um único elemento raiz, com zero ou mais sub-
árvores ligadas a esse elemento raiz. Como mostra a imagem abaixo, há uma única
raiz, em amarelo. Há também nós folhas, em vermelho e seus pais, em verde.
Observem ainda os conceitos de Altura, Grau e Nível de uma árvore.

16712855225

O Grau informa a quantidade de filhos de um determinado nó! A Raiz tem Nível 0


(excepcionalmente, alguns autores consideram que tem Nível 1) e o nível de
qualquer outro nó na árvore é um nível a mais que o nível de seu pai. Por fim, a
Altura equivale ao nível máximo de seus nós. Dessas informações, podemos concluir
que toda folha tem Grau 0.

Existe um tipo particular de árvore chamado: Árvore Binária! O que é isso? É uma
estrutura de dados hierárquica em que todos os nós têm grau 0, 1 ou 2. Já uma
Árvore Estritamente Binária é aquela em que todos os nós têm grau 0 ou 2. E uma
Árvore Binária Completa é aquela em que todas as folhas estão no mesmo nível,
como mostram as imagens abaixo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Uma Árvore Binária Completa com x folhas conterá sempre (2x – 1) nós. Observem
a imagem acima e façam as contas: 2*8 – 1 = 15 nós! Uma árvore binária completa
de altura h e nível n contém (2h-1) ou n -1) nós e usa-se (2n para calcular a
quantidade de nós em determinado nível. Na imagem acima, há uma árvore de h
= 4 e n = 3; logo, existem 23+1 -1 = 15 nós no total; e no Nível 3, existe 23 = 8 nós.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) As operações de busca em uma árvore binária não a alteram, enquanto
operações de inserção e remoção de nós provocam mudanças sistemáticas na
árvore.

Comentários:

Perfeito! Operações de Busca não alteram nenhuma estrutura de dados. Já


Operações de Inserção e Remoção podem provocar diversas mudanças estruturais.

Gabarito: C

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) O tipo de dados árvore representa organizações hierárquicas entre
dados.

Comentários:

Perfeito, observem que alguns autores tratam Tipos de Dados como sinônimo de
Estruturas de Dados.

Gabarito: C
16712855225

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas) Denomina-se árvore binária


a que possui apenas dois nós.

Comentários:

Não, árvore binária é aquela em que cada nó tem, no máximo, dois filhos!

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - - ANAC - Especialista em Regulação - Economia) Considerando-


se uma árvore binária completa até o nível 5, então a quantidade de folhas nesse
nível será 24.

Comentários:

Não! A quantidade de folhas em um determinado nível – considerando a raiz como


nível 0 –, é dada pela fórmula 2d, portanto 25.

Gabarito: E

(CESPE - – ANAC - Analista de Sistemas) Uma árvore binária completa até


o nível 10 tem 2.047 nós.

Comentários:

Se possui 10 níveis, possui (2d+1 -1): 2047 nós!

Gabarito: C

(CESPE - 2010 – TRE/MT – Analista de Sistemas – B) As listas, pilhas, filas e árvores


são estruturas de dados que têm como principal característica a sequencialidade
dos seus elementos.

Comentários:

Não! Árvores ntêm como principal característica a sequencialidade dos seus


elementos.
16712855225

Gabarito: E

(CESPE - 2010 – TRE/MT - Analista de Sistemas – E) O uso de recursividade é


totalmente inadequado na implementação de operações para manipular
elementos de uma estrutura de dados do tipo árvore.

Comentários:

Pelo contrário, é fundamental para implementação de operações.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2011 – STM – Analista de Sistemas) Enquanto uma lista encadeada


somente pode ser percorrida de um único modo, uma árvore binária pode ser
percorrida de muitas maneiras diferentes.

Comentários:

Galera, pense em uma árvore bem simples com um pai (raiz) e dois filhos. O Modo
Pré-fixado vai ler primeiro a raíz, depois a sub-árvore da esquerda e depois a sub-
árvore da direita. O Modo In-fixado vai ler primeiro a sub-árvore da esquerda,
depois a raiz e depois a sub-árvore da direita. O Modo Pós-fixado vai ler primeiro a
sub-árvore da esquerda, depois a sub-árvore da direita e depois a raiz.

Vamos resumir: o modo de percorrimento de uma árvore pode obedecer três regras
de acordo com a posição da raiz (pai): pré-fixado (raiz, esquerda, direita); in-fixado
(esquerda, raiz, direita); e pós-fixada (esquerda, direita, raiz). Vamos agora ver uma
árvore de exemplo:

X
/ \
Y Z

- Percorrimento Pré-fixado: X Y Z
- Percorrimento In-fixado: Y X Z
- Percorrimento Pós-fixado: Y Z X

Logo, uma árvore pode ser percorrida de modo pré-fixado, in-fixado e pós-fixado.

16712855225

Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(FCC - 2012 - MPE-AP - Analista Ministerial - Tecnologia da Informação – A) A


árvore é uma estrutura linear que permite representar uma relação de hierarquia.
Ela possui um nó raiz e subárvores não vazias.

Comentários:

Árvore é uma estrutura linear? Não, hierárquica!

Gabarito: E

(FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da


Informação) Em uma árvore binária, todos os nós têm grau:

a) 2.
b) 0, 1 ou 2.
c) divisível por 2.
d) maior ou igual a 2.
e) 0 ou 1.

mentários:

Olha a pegadinha! Todos os nós têm grau 0 (Folha), 1 (Único filho) ou 2 (Dois filhos).
16712855225

Gabarito: B

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CETAP - 2010 - - - Analista de Sistemas - A) Uma árvore binária é aquela


que tem como conteúdo somente valores binários.

Comentários:

Não! Uma árvore binária é aquela que tem, no máximo, grau 2!

Gabarito: E

(CETAP - 2010 - - - Analista de Sistemas - B) Uma árvore é composta por


duas raízes, sendo uma principal e a outra secundária.

Comentários:

Não, uma árvore possui somente um nó raíz!

Gabarito: E

(FUNCAB - 2010 - SEJUS-RO - Analista de Sistemas - II) Árvores são estruturas


de dados estáticas com sua raiz representada no nível um.

Comentários:
16712855225

Não! Árvores são estruturas dinâmicas e sua raiz, em geral, é representada no nível
0 (mas depende de autor para autor).

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

GRAFOS

Fiz uma disciplina na faculdade chamada Teoria dos Grafos! Aquilo era
absurdamente complexo, mas para concursos a teoria é beeeem mais tranquila e
muito rara de cair. Portanto fiquem tranquilos, bacana? Uma definição de grafo
afirma que ele é uma estrutura de dados que consiste em um conjunto de nós (ou
vértices) e um conjunto de arcos (ou arestas).

Em outras palavras, podemos dizer que é simplesmente um conjunto de pontos e


linhas que conectam vários pontos. Ou também que é uma representação abstrata
de um conjunto de objetos e das relações existentes entre eles. Uma grande
variedade de estruturas do mundo real podem ser representadas abstratamente
através de grafos. Professor, pode me passar um exemplo? Claro!

16712855225

Vejam só como se trata de um conceito bastante abrangente! O Facebook pode ser


considerado um grafo (pessoas se interligam através de amizades); um mapa
rodoviário pode ser considerado um grafo (cidades se relacionam através de
estradas); as eliminatórias de um campeonato de futebol também podem ser
consideradas um grafo (times jogam entre si para ganhar o campeonato).

Abaixo temos um exemplo de um grafo que eu desenhei e que nos ajudará a


entender melhor a terminologia utilizada. Seguem as premissas:

 N = {A, B, C, D, E, F}
 A = {(A,B), (B,A), (B,C), (B,D), (C,C), (D,A), (D,C), (E,F)}

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

 Nó, Nodo ou Vértice:


Qualquer elemento de um conjunto N.

 Aresta ou Arco:
Qualquer elemento de um conjunto A.

 Nós Adjacentes (Relação de Adjacência):


16712855225

São aqueles nós ligados por um arco (Ex: A é adjacente a D).

 Arco Incidente (Relação de Incidência):


São aqueles arcos que levam a um nó (Ex: (C,D) é incidente em D).

 Grau:
É a quantidade de arcos que partem ou chegam em/de um nó.

 Caminho:
Sequência de arcos que levam de um nó a outro (Ex: AC <(A,B), (B,D), (D,C)>).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

 Circuito ou Ciclo:
É o caminho que leva ao mesmo nó do qual saiu (Ex: <(A,B), (B,D), (D,A)>).

 Laço:
É o circuito de um único arco (<(C,C)>).

 Ordem:
É a quantidade de vértices totais do grafo.

Vamos ver agora alguns conceitos importantes! Um grafo pode ser dirigido –
também chamado direcionado, orientado ou dígrafo –, se as arestas tiverem uma
direção (imagem da esquerda), ou não dirigido, se as arestas não tiverem direção
(imagem central). Se as arestas tiverem associado um peso ou custo, o grafo passa
ser chamado ponderado, valorado ou pesado (imagem da direita).

Um grafo simples é aquele que não contém laços. Um grafo vazio é aquele que
contém exclusivamente vértices (não contém arcos). Um grafo misto é aquele que
possui arestas dirigidas e não-dirigidas. Um grafo trivial é aquele que possui
somente um vértice. Um grafo é denso se contém muitos arcos em relação ao
número de vértices e esparso se contém poucos arcos. Como assim, professor?

Um grafo é denso se o seu número de arcos é da mesma ordem


que o quadrado do número de vértices; e é esparso se o número
16712855225

de arcos for da mesma ordem que o número de vértices. Um


grafo é regular se todos os vértices têm o mesmo grau; e é
completo se todo vértice é adjacente a todos os outros vértices
(o grafo ao lado é regular e completo).

Um grafo é dito conexo ou conectado quando existir pelo menos um caminho entre
cada par de vértices. Caso contrário, ele será dito desconexo, isto é, se há pelo
menos um par de vértices que não esteja ligado a nenhuma cadeia (caminho).
Vejam a imagem do grafo que eu desenhei lá em cima! Ele é conexo ou desconexo?
Ele é desconexo, há um par de vértices (E,F) que não está ligado a nenhum caminho.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Se o grafo for direcionado/orientado, um grafo é dito fortemente conexo se existir


um caminho de A  B e de B  A, para cada par (A,B) de vértices de um grafo. Em
outras palavras, o grafo é fortemente conexo se cada par de vértices participa de
um circuito. Isto significa que cada vértice pode ser alcançável partindo-se de
qualquer outro vértice do grafo.

Galera, existem outras maneiras de representar um grafo. Uma das maneiras mai
comuns é por meio de uma Matriz de Adjacências. A definição precisa das entradas
da matriz varia de acordo com as propriedades do grafo que se deseja representar,
porém de forma geral o valor aij guarda informações sobre como os vértices vi e vj
estão relacionados (isto é, informações sobre a adjacência de vi e vj).

Para representar um grafo não direcionado, simples e sem pesos,


basta que as entradas a da Matriz A contenham 1 se vi e vj são
adjacentes e 0, caso contrário. Se as arestas do grafo tiverem pesos,
aij pode conter, ao invés de 1 quando houver uma aresta entre vi e
vj, o peso dessa mesma aresta.

Vamos entender? O elemento A11 = 1, significando que o Nó 1 tem adjacência com


o Nó 1 (ele mesmo, basta ver a figura); o elemento A12 = 1, significando que o Nó 1
tem adjacência com o Nó 2; elemento A13 = 0, significando que o Nó 1 não tem
adjacência com o Nó 3; o elemento A14 = 0, significando que o Nó 1 não tem
adjacência com o Nó 4. 16712855225

O elemento A15 = 1, significando que o Nó 1 tem adjacência com o Nó 5; o elemento


A16 = 0, significando que o Nó 1 não tem adjacência com o Nó 3. Galera, agora ficou
Fácil de entender, concordam? Lembrando que, se fosse um grafo ponderado,
bastaria colocar o peso, em vez de colocar 1 na Matriz de Adjacências. Existem só
mais alguns detalhes.

Em grafos não direcionados, as matrizes de adjacência são simétricas ao longo da


diagonal principal - isto é, a entrada aij é igual à entrada aji. Matrizes de Adjacência
de grafos direcionados, no entanto, não são assim. Num dígrafo sem pesos, a

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

entrada aij da matriz é 1 se há um arco de vi para vj e 0, caso contrário. Há outra


maneira de representar também chamada Lista de Adjacências.

Se o grafo é não direcionado, cada entrada é um conjunto de dois nós contendo as


duas extremidades da aresta correspondente; se ele for dirigido, cada entrada é
uma tupla de dois nós, um indicando o nó de origem e o outro denotando o nó
destino do arco correspondente. É bem simples, para cada nó, eu escrevo suas
adjacências. No exemplo anterior: Nó 1 = 1, 2, 5; Nó 2 = 1, 3, 5; e assim por diante.

Professor, qual é melhor? Cara, cada representação tem suas vantagens e


desvantagens! É fácil encontrar todos os vértices adjacentes a um vértice dada em
uma representação lista de adjacência; você simplesmente lê a sua lista de
adjacência. Com uma matriz de adjacência em vez disso se tem que pesquisar mais
16712855225

de uma linha inteira, gastando tempo O(n).

Se, pelo contrário, deseja realizar um teste de vizinhança em dois vértices (isto é,
determinar se eles têm uma aresta entre eles), uma matriz de adjacência
proporciona isso na hora. No entanto, este teste de vizinhança em uma lista de
adjacências requer tempo proporcional ao número de arestas associado com os
dois vértices. Há diversos outros aspectos também a considerar, como tamanho.

Pensem comigo! Para um grafo com uma Matriz de Adjacência esparsa (não densa),
uma representação de Lista de Adjacências do grafo ocupa menos espaço, porque
ele não usa nenhum espaço para representar as arestas que não estão presentes.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Lembram-se da lista? Nós só representamos os nós adjacentes, em contraste com a


Matriz de Adjacência. No entanto, quanto mais denso, isso pode mudar.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2010 – TJ/ES – Analista de Suporte Considerando-se a implementação


de um grafo denso, direcionado e ponderado, se o número de vértices ao
quadrado tem valor próximo ao número de arcos, o uso de uma matriz de
adjacência simétrica apresenta vantagens em relação ao uso de uma lista de
adjacência.

Comentários:

Em grafos não direcionados, as matrizes de adjacência são simétricas ao longo da


diagonal principal - isto é, a entrada aij é igual à entrada aji. Matrizes de Adjacência
de grafos direcionados, no entanto, não são assim. Num dígrafo sem pesos, a entrada
aij da matriz é 1 se há um arco de vi para vj e 0, caso contrário. Há outra maneira de
representar também chamada Lista de Adjacências.

Vamos por partes! Ele afirma que o grafo é denso, direcionado e ponderado. Em
seguida, ele afirma que o número de vértices ao quadrado tem valor próximo ao
número de arcos. Precisava dizer isso? Não está errado, mas ele já havia afirmado
que era um grafo denso. A Matriz de Adjacência simétrica é uma representação
utilizada em grafos não-direcionados, logo a questão já está errada.

Gabarito: E

(F - 3 – MPE/SE – Analista do Ministério Público Considere:


16712855225

I. Estrutura de dados que possui uma sequência de células, na qual cada célula
contém um objeto de algum tipo e o endereço da célula seguinte.

II. Podem ser orientados, regulares, completos e bipartidos e possuir ordem,


adjacência e grau.

III. Possuem o método de varredura esquerda-raiz-direita (e-r-d).

Os itens de I a III descrevem, respectivamente,

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

a) árvores binárias, listas ligadas e arrays.


b) arrays, árvores binárias e listas ligadas.
c) grafos, árvores binárias e arrays.
d) listas ligadas, grafos e árvores binárias.
e) grafos, listas ligadas e árvores binárias.

Comentários:

(a) Trata-se das Listas Ligadas, visto que falou de sequência, objeto e endereço da
célula seguinte; (b) Trata-se dos Grafos, visto que falou dos tipos regular, bipartido,
completo e orientado; (c) Trata-se das Árvores Binárias, visto que falou de método
de varredura e raiz.

Gabarito: D

(CESPE - 3 – TCE/ES – Analista de Sistemas) Considerando o grafo ilustrado


acima, assinale a opção em que é apresentada a descrição em vértices (V) e
arestas (A).

a) V = {1, 2, 3, 4, 5, 6 }
A = {(2, 4), (2, 3), (2, 5), (3, 6), (1, 5)} 16712855225

b) V = { 2, 4, 1, 3, 6, 5 }
A = {(4, 2), (1, 3), (5, 2), (6, 3), (5, 3)}

c) V = {1, 2, 3, 4, 5, 6 }
A = {(4, 2), (3, 4), (5, 2), (6, 3), (5, 3)}

d) V = {1, 2, 3, 4, 5, 6 }
A = {(4, 2), (3, 1), (5, 1), (6, 2), (5, 3)}

e) V = { 2, 4, 1, 3, 6, 5 }

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

A = {(4, 2), (3, 1), (5, 2), (6, 3), (5, 3)}

Comentários:

Galera, os vértices não precisam estar ordenados, logo todos os itens estão corretos.
No entanto, as arestas precisam corresponder ao grafo. Vamos por eliminação: (a)
A aresta (2,3) não existe; (b) Quase tudo certo, mas a ordem (1,3) está errada – seria
(3,1); (c) A aresta (3,4) não existe; (d) A aresta (5,1) não existe; (e) Tudo perfeito!

Gabarito: E

(CESPE - 2 – TJ/RO – Analista de Suporte – ITEM B Grafo corresponde a uma


estrutura abstrata de dados que representa um relacionamento entre pares de
objetos e que pode armazenar dados em suas arestas e vértices, ou em ambos.

Comentários:

Fiz uma disciplina na faculdade chamada Teoria dos Grafos! Aquilo era
absurdamente complexo, mas para concursos a teoria é beeeem mais tranquila e
muito rara de cair. Portanto fiquem tranquilos, bacana? Uma definição de grafo
afirma que ele é uma estrutura de dados que consiste em um conjunto de nós (ou
vértices) e um conjunto de arcos (ou arestas).

Em outras palavras, podemos dizer que é simplesmente um conjunto de pontos e


linhas que conectam vários pontos. Ou também que é uma representação abstrata
de um conjunto de objetos e das relações existentes entre eles. Uma grande variedade
de estruturas do mundo real podem ser representadas abstratamente através de
grafos. Professor, pode me passar um exemplo? Claro!
16712855225

Conforme vimos em aula, a definição está perfeita!

Gabarito: C

(CESPE - 2 – PEFOCE – Perito Criminal Considere que um grafo G seja


constituído por um conjunto (N) e por uma relação binária (A), tal que G = (N,
A), em que os elementos de N são denominados nós (ou vértices) e os elementos
de A são denominados arcos (ou arestas). Em face dessas informações e do grafo
abaixo, é correto afirmar que esses conjuntos são N = {1,2,3,4} e A =
{(1,2),(2,1),(2,4),(2,3)}.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Comentários:

Conforme vimos em aula, a questão está perfeita! Temos quatro nós: N = {1,2,3,4};
e quatro arestas: A = {(1,2),(2,1),(2,4),(2,3)} – observem que a ordenação do grafo
ordenado está perfeita.

Gabarito: C

(CESPE - 2 – BASA – Analista de Sistemas É misto o grafo com arestas não


dirigidas que representam ruas de dois sentidos e com arestas dirigidas que
correspondem a trechos de um único sentido, modelado para representar o
mapa de uma cidade cujos vértices sejam os cruzamentos ou finais de ruas e
cujas arestas sejam os trechos de ruas sem cruzamentos.

Comentários:

Um grafo simples é aquele que não contém laços. Um grafo vazio é aquele que
contém exclusivamente vértices (não contém arcos). Um grafo misto é aquele que
possui arestas dirigidas e não-dirigidas. Um grafo trivial é aquele que possui somente
um vértice. Um grafo é denso se contém muitos arcos em relação ao número de
vértices e esparso se contém poucos arcos. Como assim, professor?

Conforme vimos em aula, um grafo misto é aquele que possui arestas dirigidas e
não-dirigidas. O caso citado na questão é um exemplo perfeito e foi retirado
integralmente do livro Projeto de algoritmos: Fundamentos, análise e exemplos da internet de Michael
T. Goodrich e Roberto Tamassia. 16712855225

Gabarito: C

(CESPE - 2 – BASA – Analista de Sistemas Para modelar a rede que conecta


todos os computadores em uma sala de escritório com a menor metragem
possível de cabos, é adequado utilizar um grafo G cujos vértices representem os
possíveis pares (u, v) de computadores e cujas arestas representem o
comprimento dos cabos necessários para ligar os computadores u e v,
determinando-se o caminho mínimo, que contenha todos os vértices de G, a
partir de um dado vértice v.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Comentários:

Galera, leiam devagar a questão! Vejam essa parte: “(...) cujos vértices representem
os possíveis pares (u,v)”. Vocês, é claro, se lembram do conceito de vértices e arestas.
Ora, vértice representa um par de computadores? Não, vértices são os
computadores! Quem representa pares são as arestas!

Gabarito: E

(CESPE - 2012 – BASA – Analista de Sistemas Um grafo completo contém pelo


menos um subgrafo ponderado.

Comentários:

Essa questão não faz o menor sentido! Podemos dizer que um grafo completo
contém pelo menos um subgrafo. No entanto, os conceitos de completude e
ponderação são completamente independentes. Eu posso ter um grafo completo
ponderado ou não; e posso ter um grafo ponderado completo ou não.

Gabarito: E

(CESPE - 2012 – BASA – Analista de Sistemas) Um grafo não direcionado é dito


conectado quando há pelo menos um caminho entre dois vértices quaisquer do
grafo.

Comentários:

Um grafo é dito conexo ou conectado quando existir pelo menos um caminho entre
cada par de vértices. Caso contrário, ele será dito desconexo, isto é, se há pelo menos
16712855225

um par de vértices que não esteja ligado a nenhuma cadeia (caminho). Vejam a
imagem do grafo que eu desenhei lá em cima! Ele é conexo ou desconexo? Ele é
desconexo, há um par de vértices (E,F) que não está ligado a nenhum caminho.

Conforme vimos em aula, a questão comete um minúsculo deslize! Seria mais


correto dizer que um grafo não direcionado é dito conectado quando sempre há
pelo menos um caminho entre dois vértices quaisquer do grafo. Por que, professor?
Vejam o grafo que eu desenhei na teoria dessa aula.

Pela definição da questão, ele é conectado quando há pelo menos um caminho


entre dois vértices quaisquer do grafo. Vamos pegar dois vértices quaisquer? Sim,

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

vamos pegar o par A-C! Há pelo menos um caminho entre eles? Sim, logo podemos
dizer – por essa definição – que ele é conectado.

No entanto, o par D-E não possui um caminho entre eles, mas a definição da
questão não disse para verificar todos os pares de vértices. Entenderam a sutileza?
Portanto, seria ideal dizer que ele é conectado quando há pelo menos um caminho
entre cada par de vértices do grafo.

Dessa forma, cobrimos todos os pares. É tão sutil que nem eu havia percebido –
quem me alertou foi um aluno.

Gabarito: C

10. (CESPE - 2012 – TJ/AC – Analista de Sistemas) Define-se um grafo como


fortemente conexo se todos os nós puderem ser atingidos a partir de qualquer
outro nó.

Comentários:

Se o grafo for direcionado/orientado, um grafo é dito fortemente conexo se existir um


caminho de A  B e de B  A, para cada par (A,B) de vértices de um grafo. Em
outras palavras, o grafo é fortemente conexo se cada par de vértices participa de um
circuito. Isto significa que cada vértice pode ser alcançável partindo-se de qualquer
outro vértice do grafo.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C
16712855225

11. (CESPE - 3 – CRPM – Analista de Sistemas) Considere que o grafo não


orientado representado na figura abaixo possua as seguintes características:

G1 = (V1, A1)
V1 = {A, B, C, D}
A1 = {(A, C), (A, D), (B, C), (B, D), (A,B)}.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

Nesse caso, é correto afirmar que o grafo G1 possui quatro vértices, nomeados de
A, B, C e D, e cinco arcos, que conectam pares de vértices, conforme especificado
em A1.

Comentários:

A questão está quase perfeita, mas ela possui um deslize: não existe a aresta (A,B) –
seria (C,D).

Gabarito: E

12. (CESPE - 2012 – BASA – Analista de Sistemas) A implementação de um grafo do


tipo ponderado e direcionado na forma de uma matriz de adjacência utiliza
menor quantidade de memória que a implementação desse mesmo grafo na
forma de uma lista encadeada.

Comentários:

Pensem comigo! Para um grafo com uma Matriz de Adjacência esparsa (não densa),
uma representação de Lista de Adjacências do grafo ocupa menos espaço, porque ele
não usa nenhum espaço para representar as arestas que não estão presentes.
Lembram-se da lista? Nós só representamos os nós adjacentes, em contraste com a
Matriz de Adjacência. No entanto, quanto mais denso, isso pode mudar.

Conforme vimos em aula, para grafos esparsos (não densos), a Lista de Adjacência
(que é uma lista encadeada) ocupa menos espaço em memória, na medida em que
não necessita representar vértices não adjacentes – diferente da Matriz de
Adjacência. 16712855225

Gabarito: E

13. (CESGRANRIO - 4 – BASA – Analista de Sistemas) O grafo acima pode ser


representado pela seguinte matriz:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

a)

b)

c)

d)

e)

Comentários:

Vamos ver se vocês se lembram! O vértice A11 tem ser 0, porque não há uma aresta
do Nó 1 para o Nó 1. O vértice A12 tem ser 1, porque há uma aresta do Nó 1 para o
Nó 2. O vértice A13 tem ser 0, porque não há uma aresta do Nó 1 para o Nó 3. O
16712855225

vértice A14 tem ser 1, porque há uma aresta do Nó 1 para o Nó 4. O vértice A 15 tem
ser 0, porque não há uma aresta do Nó 1 para o Nó 5. Logo, a primeira linha deve
ser: 0, 1, 0, 1, 0. Eliminamos todos os itens, exceto os dois primeiros. Vamos pegar
um vértice específico agora para descobrir qual está certo. Observem o vértice A23
e percebam que ele deve ser 1, porque existe uma aresta do Nó 2 para o Nó 3.
Descobrimos a resposta!

Gabarito: A

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

14. (CESPE - 2012 – TJ/SE – Analista de Sistemas) Um grafo é formado por um par
de conjuntos de vértices e arestas, não podendo o conjunto de vértices ser
particionado em subconjuntos.

Comentários:

Podem, sim. O nome disso é: Grafo Bipartido! Um grafo é dito ser bipartido quando
seu conjunto de vértices V puder ser particionado em dois subconjuntos V 1 e V2.
Portanto não há óbice quanto ao particionamento de um conjunto de vértices em
subconjuntos.

Gabarito: E

15. (CESPE - 2012 – TRT/AM – Analista de Sistemas) Um grafo é uma estrutura de


dados consistida em um conjunto de nós (ou vértices) e um conjunto de arcos
(ou arestas). O grafo em que os arcos possuem um número ou peso associados
a eles, é chamado de grafo:

a) predecessor.
b) adjacente.
c) incidente.
d) ponderado.
e) orientado.

Comentários:
Vamos ver agora alguns conceitos importantes! Um grafo pode ser dirigido – também
chamado direcionado, orientado ou dígrafo –, se as arestas tiverem uma direção
(imagem da esquerda), ou não dirigido, se as arestas não tiverem direção (imagem
central). Se as arestas tiverem associado um peso ou custo, o grafo passa a ser
16712855225

chamado ponderado, valorado ou pesado (imagem da direita).

Conforme vimos em aula, um grafo com arcos numerados ou com peso são
chamados Grafos Ponderados ou Grafos Valorados ou Grafos Pesados.

Gabarito: D

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

HASHING

As Tabelas de Dispersão, também conhecidas como Tabelas de Espelhamento ou


Tabelas Hashing, armazenam uma coleção de valores, sendo que cada valor está
associado a uma chave. Tais chaves têm que ser todas distintas e são usadas para
mapear os valores na tabela. Esse mapeamento é feito por uma função de hashing
que chamaremos de h.

Por exemplo, podemos implementar uma tabela de dispersão usando um vetor com
oito posições e utilizar h(x) = x MOD 8 como função de hashing5. Dizemos que h(k)
é a posição original da chave k e é nessa posição da tabela que a chave k deve ser
inserida. A imagem abaixo ilustra a inserção de uma coleção de valores com suas
respectivas chaves numa Tabela de Dispersão.

Observe que o valor Gil foi colocado na


posição 7 da tabela, pois a chave associada a
Gil é 31 e h(31) = 7. O que aconteceria se
tratássemos de inserir nessa tabela o valor Ivo
com chave 33? Observe que h(33) = 1, mas a
posição 1 da tabela já está ocupada. Dizemos
que as chaves 25 e 33 colidiram. Mais
precisamente, duas chaves x e y colidem se h(x)
= h(y).

Note que o problema da colisão de chaves


ocorre porque, na maioria dos casos, o
domínio das chaves é maior que a quantidade
de posições da tabela. Sendo assim, pelo
princípio da casa de pombos, qualquer função
16712855225

do conjunto das chaves para o conjunto das


posições da tabela não é injetora.

Não é aceitável recusar a inserção de uma chave que colida com outra já existente
na tabela se ela ainda tiver posições livres. Precisamos de alguma estratégia para
lidar com as colisões de chaves. Há diversas técnicas para lidar com as colisões, tais
como Hashing Fechado ou Hashing Aberto. O Método de Hashing é recomendado
para um grande número de dados que possuam faixas de valores variáveis.

5
Galera... o MOD representa o resto de uma divisão. Ex: 10 mod 8 = 2, porque 10/8 possui quociente 1 e resto
2. Em outras palavras, 8*1 + 2 = 10.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Administração de Dados A pesquisa sequencial é aplicável em
estruturas não ordenadas.

Comentários:

Perfeito! Para fazer uma pesquisa sequencial, não é necessário que os dados
estejam ordenados – diferentemente da pesquisa binária.

Gabarito: C

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) As colisões ocorrem na utilização de tabela hash porque várias chaves
podem resultar na mesma posição.

Comentários:

Perfeito! É raro, mas acontece...

Gabarito: C

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Administração de Dados) Ocorre o hashing quando não há o
16712855225

armazenamento de cada entrada de uma tabela em um específico endereço


calculado a partir da aplicação de uma função chave da entrada.

Comentários:

Pelo contrário, ocorre o hashing quando há o armazenamento de cada entrada de


uma tabela em um específico endereço calculado a partir da aplicação de uma
função chave da entrada.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(FCC - - METRÔ- - Analista Treinee - Análise de Sistemas) O objetivo de


fazer uma busca rápida a partir de uma chave de pesquisa simples e obter o
valor desejado é alcançado pela estrutura de dados especial denominada:

a) array.
b) lista.
c) vetor.
d) árvore binária.
e) tabela de hashing.

Comentários:

Trata-se da Tabela de Hashing!

Gabarito: E

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados A busca que utiliza uma tabela hash realiza comparação das chaves para
encontrar a posição do elemento que está sendo buscado.

Comentários:

Não, eles utilizam a chave para gerar resultados que, esses sim, são comparados.

Gabarito: E

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas No método de hashing, por


meio de acesso sequencial, são utilizados tabelas e mapas para recuperar
informações de endereço de arquivos de forma rápida e eficiente.
16712855225

Comentários:

Não, Método de Hashing não faz Acesso Sequencial.

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

ESTRUTURA DE ARQUIVOS

É senso comum que há a necessidade de salvar ou guardar nossos dados ou


programas. E onde podemos fazer isso? Em geral, em dispositivos persistentes
(Discos, PenDrive, Fitas, etc). O armazenamento de pequenos volumes de dados,
via de regra, não encerra grandes problemas no que diz respeito à distribuição dos
registros dentro de um arquivo.

À medida que cresce o volume de dados, a frequência ou a complexidade dos


acessos, crescem também os problemas de eficiência do armazenamento dos
arquivos e do acesso a seus registros, sendo a sofisticação das técnicas de
armazenamento e recuperação de dados uma consequência da necessidade de
acesso rápido a grandes arquivos ou arquivos muito solicitados.

A maneira intuitiva de armazenar um arquivo consiste na distribuição dos seus


registros em uma ordem arbitrária, um após o outro, dentro da área destinada. Esta
ordem pode ser, por exemplo, aquela na qual os registros são gerados, causando
dificuldade na localização e perda de eficiência, mas esta técnica é bastante usada,
principalmente durante as fases preliminares da geração de um arquivo.

Quando escrevemos um programa para gerar um arquivo de dados, costumamos


agrupar os campos que fornecem informações sobre um mesmo indivíduo em um
registro. Um arquivo é formado por uma coleção de registros lógicos, cada um deles
representando um objeto ou entidade. E o que seria um registro lógico? É uma
sequência de itens, sendo cada item chamado campo ou atributo.

Cada item corresponde a uma característica ou propriedade do objeto


16712855225

representado. Existem três formas de acessar arquivos: sequencial, direta ou


indexado. No primeiro caso, os registros são lidos em sequência, um após o outro.
A cada registro lido o indicador de posição de arquivo é avançado para que a
próxima leitura ocorra iniciando naquele ponto.

No segundo caso, pode-se acessar qualquer posição do arquivo, para tanto é


necessário preciso ajustar o indicador de posição do arquivo para onde deseja-se
realizar uma operação de leitura/escrita. No terceiro caso, o arquivo é visto como
um conjunto de registros indexados por uma chave. Bem, não encontrei uma
questão sequer sobre esse assunto.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


ESTRUTURAS DE DADOS

(FGV – 2015 – DPE/ – Analista de Sistemas) No desenvolvimento de sistemas,


a escolha de estruturas de dados em memória é especialmente relevante. Dentre
outras classificações, é possível agrupar essas estruturas em lineares e não
lineares, conforme a quantidade de sucessores e antecessores que os elementos
da estrutura possam ter. Assinale a opção que apresenta, respectivamente,
estruturas de dados lineares e não lineares.

a) Tabela de dispersão e fila.


b) Estrutura de seleção e pilha.
c) Pilha e estrutura de seleção.
d) Pilha e árvore binária de busca.
e) Fila e pilha.

(CESPE – 2010 – DETRAN/ES – Analista de Sistemas) Um tipo abstrato de dados


apresenta uma parte destinada à implementação e outra à especificação. Na
primeira, são descritas, em forma sintática e semântica, as operações que podem
ser realizadas; na segunda, os objetos e as operações são representados por
meio de representação, operação e inicialização.

(CESPE – 2010 – TRT/RN – Analista de Sistemas) O tipo abstrato de dados


consiste em um modelo matemático (v,o), em que v é um conjunto de valores e
o é um conjunto de operações que podem ser realizadas sobre valores.

(CESPE – 2010 – BASA – Analista de Sistemas) A escolha de estruturas internas


16712855225

de dados utilizados por um programa pode ser organizada a partir de TADs que
definem classes de objetos com características distintas.

(CESPE – 2010 – BASA – Analista de Sistemas) A descrição dos parâmetros das


operações e os efeitos da ativação das operações representam, respectivamente,
os níveis sintático e semântico em que ocorre a especificação dos TDAs.

(FCC – 2010 – TRE/AM – Analista de Sistemas) Em relação aos tipos abstratos de


dados - TAD, é correto afirmar:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

a) O TAD não encapsula a estrutura de dados para permitir que os usuários


possam ter acesso a todas as operações sobre esses dados.

b) Na transferência de dados de uma pilha para outra, não é necessário saber


como a pilha é efetivamente implementada.

c) Alterações na implementação de um TAD implicam em alterações em seu uso.

d) Um programador pode alterar os dados armazenados, mesmo que não tenha


conhecimento de sua implementação.

e) TAD é um tipo de dados que esconde a sua implementação de quem o


manipula.

(FCC – – TRE/PI – Analista de Sistemas) Em relação a tipos abstratos de


dados, é correto afirmar que:

a) o TAD não encapsula a estrutura de dados para permitir que os usuários


possam ter acesso a todas as operações disponibilizadas sobre esses dados.

b) algumas pilhas admitem serem declaradas como tipos abstratos de dados.

c) filas não permitem declaração como tipos abstratos de dados.

d) os tipos abstratos de dados podem ser formados pela união de tipos de dados
primitivos, mas não por outros tipos abstratos de dados.

e) são tipos de dados que escondem a sua implementação de quem o manipula;


de maneira geral as operações sobre estes dados são executadas sem que se
16712855225

saiba como isso é feito.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


VETORES E MATRIZES

(FCC - 2009 - - - Analista Judiciário - Tecnologia da Informação Considere


uma estrutura de dados do tipo vetor. Com respeito a tal estrutura, é correto
que seus componentes são, característicamente,

a) heterogêneos e com acesso FIFO.


b) heterogêneos e com acesso LIFO.
c) heterogêneos e com acesso indexado-sequencial.
d) homogêneos e acesso não indexado.
e) homogêneos e de acesso aleatório por intermédio de índices.

(CETAP - 2010 - - - Analista de Sistemas Matrizes são estruturas de dados


de n-dimensões. Por simplicidade, chamaremos de matrizes as matrizes
bidimensionais numéricas (que armazenam números inteiros). Sendo assim,
marque a alternativa INCORRETA.

a) Uma matriz de m linhas e n colunas contêm (m * n) dados.

b) Uma matriz pode ser representada utilizando listas ligadas.

c) A soma dos elementos de uma matriz pode ser calculada fazendo dois laços
aninhados, um sobre as linhas e o outro sobre as colunas.

d) A soma de duas matrizes de m linhas e n colunas resulta em uma matriz de


2*m linhas e 2*n colunas. 16712855225

e) O produto de duas matrizes de n linhas e n colunas resulta em uma matriz de


n linhas e n colunas.

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Arquitetura de Tecnologia Os dados armazenados em uma
estrutura do tipo matriz não podem ser acessados de maneira aleatória.
Portanto, usa-se normalmente uma matriz quando o volume de inserção e
remoção de dados é maior que o volume de leitura dos elementos armazenados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


Informação Entre alguns tipos de estrutura de dados, podem ser citados os
vetores, as pilhas e as filas.

(CESPE - 2011 - EBC - Analista - Engenharia de Software Vetores são utilizados


quando estruturas indexadas necessitam de mais que um índice para identificar
um de seus elementos.

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Vetores


podem ser considerados como listas de informações armazenadas em posição
contígua na memória.

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Uma posição


específica de um vetor pode ser acessada diretamente por meio de seu índice.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


LISTA ENCADEADA

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) O tempo de busca de um elemento em uma lista duplamente encadeada
é igual à metade do tempo da busca de um elemento em uma lista simplesmente
encadeada.

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) Em algumas implementações, uma lista vazia pode ter um único nó,
chamado de sentinela, nó cabeça ou header. Entre suas possíveis funções, inclui-
se simplificar a implementação de algumas operações realizadas sobre a lista,
como inserir novos dados, recuperar o tamanho da lista, entre outras.

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) Estruturas ligadas como listas encadeadas superam a limitação das
matrizes que não podem alterar seu tamanho inicial.

(CESPE - 2012 - nco da Amazônia - Técnico Científico - Administração de


Dados) As listas duplamente encadeadas diferenciam-se das listas simplesmente
encadeadas pelo fato de, na primeira, os nós da lista formarem um anel com o
último elemento ligado ao primeiro da lista.

(FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas - E) Numa lista


singularmente encadeada, para acessar o último nodo é necessário partir do
primeiro e ir seguindo os campos de ligação até chegar ao final da lista.
16712855225

(CESPE - 2011 - EBC - alista - Engenharia de Software) Uma lista é uma coleção
de elementos do mesmo tipo dispostos linearmente, que podem ou não seguir
determinada organização. As listas podem ser dos seguintes tipos: de
encadeamento simples, duplamente encadeadas e ordenadas.

(CESPE - - ANAC - Técnico Administrativo - Informática) Em uma lista


circular duplamente encadeada, cada nó aponta para dois outros nós da lista,
um anterior e um posterior.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

(CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


Informação) A principal característica de uma lista encadeada é o fato de o último
elemento da lista apontar para o elemento imediatamente anterior.

(CESPE - - TCE-AC - Analista de Controle Externo - Processamentos de


Dados) Uma lista encadeada é uma coleção de nodos que, juntos, formam uma
ordem linear. Se é possível os nodos se deslocarem em ambas as direções na
lista, diz-se que se trata de uma lista simplesmente encadeada.

10. (CESPE - 2008 – HEMOBRÁS – Técnico de Informática) Uma estrutura do tipo


lista, em que é desejável percorrer o seu conteúdo nas duas direções
indiferentemente, é denominado lista duplamente encadeada.

11. (CESPE - 2010 – TRE/MT – Analista de Sistemas – C) Uma lista duplamente


encadeada é uma lista em que o seu último elemento referencia o primeiro.

12. (CESPE - 2006 – SGA/AC – Analista de Sistemas) O principal problema da


alocação por lista encadeada é a fragmentação.

13. (CESPE - – MCT – Analista de Sistemas) O armazenamento de arquivos em


disco pode ser feito por meio de uma lista encadeada, em que os blocos de
disco são ligados por ponteiros. A utilização de lista encadeada elimina
completamente o problema de fragmentação interna.

14. (CESPE - – FINEP – Analista de Sistemas) Uma lista encadeada é uma


representação de objetos na memória do computador que consiste de uma
sequência de células em que:

a) cada célula contém apenas o endereço da célula seguinte.


16712855225

b) cada célula contém um objeto e o tipo de dados da célula seguinte.

c) o último elemento da sequência aponta para o próximo objeto que


normalmente possui o endereço físico como not null.

d) cada célula contém um objeto de algum tipo e o endereço da célula seguinte.

e) a primeira célula contém o endereço da última célula.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

15. (CESPE - 2010 – BASA – Analista de Sistemas) Em uma lista encadeada, o tempo
de acesso a qualquer um de seus elementos é constante e independente do
tamanho da estrutura de dados.

16. (CESPE - 2010 – INMETRO – Analista de Sistemas – C) Considere que Roberto


tenha feito uso de uma lista encadeada simples para programar o
armazenamento e o posterior acesso aos dados acerca dos equipamentos
instalados em sua empresa. Considere, ainda, que, após realizar uma consulta
acerca do equipamento X, Roberto precisou acessar outro equipamento Y que
se encontrava, nessa lista, em posição anterior ao equipamento X. Nessa
situação, pela forma como os ponteiros são implementados em uma lista
encadeada simples, o algoritmo usado por Roberto realizou a consulta ao
equipamento Y sem reiniciar a pesquisa do começo da lista.

17. (FCC - – TRE/AM – Analista de Sistemas) Os dados contidos em uma lista


encadeada estão:

a) ordenados seqüencialmente.
b) sem ordem lógica ou física alguma.
c) em ordem física e não, necessariamente, em ordem lógica.
d) em ordem lógica e, necessariamente, em ordem física.
e) em ordem lógica e não, necessariamente, em ordem física.

18. (FCC - 2010 – DPE/SP – Analista de Sistemas) Uma estrutura de dados que possui
três campos: dois ponteiros e campo de informação denomina-se:

a) lista encadeada dupla.


b) Lista encadeada simples.
c) pilha. 16712855225

d) fila.
e) vetor.

19. (CESPE - 2010 – TRE/MT – Analista de Sistemas) O algoritmo para inclusão de


elementos em uma pilha é usado sem nenhuma alteração para incluir elementos
em uma lista.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


PILHAS

(CESPE - 2011 - FUB - Analista de Tecnologia da Informação - Específicos) As


pilhas são listas encadeadas cujos elementos são retirados e acrescentados
sempre ao final, enquanto as filas são listas encadeadas cujos elementos são
retirados e acrescentados sempre no início.

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) Na estrutura de dados do tipo lista, todo elemento
novo que é introduzido na pilha torna-se o elemento do topo.

(CESPE - 2012 - -RO - Analista Judiciário - Analista de Sistemas Suporte – E)


Visitas a sítios armazenadas em um navegador na ordem last-in-first-out é um
exemplo de lista.

(ESAF - 2013 - DNIT - Analista Administrativo - Tecnologia da Informação)


Assinale a opção correta relativa às operações básicas suportadas por pilhas.

a) Push: insere um novo elemento no final da pilha.


b) Pop: adiciona elementos ao topo da pilha.
c) Pull: insere um novo elemento no interior da pilha.
d) Top: transfere o último elemento para o topo da pilha.
e) Top: acessa o elemento posicionado no topo da pilha.

(FCC - 2012 – TST - Analista de Sistemas – C) As pilhas e as filas são estruturas


de dados essenciais para os sistemas computacionais. É correto afirmar que a
16712855225

pilha é conhecida como lista FIFO - First In First Out.

(FCC - 2012 – TRE/CE - Analista de Sistemas) Sobre pilhas é correto afirmar:

a) Uma lista LIFO (Last-In/First-Out) é uma estrutura estática, ou seja, é uma


coleção que não pode aumentar e diminuir durante sua existência.

b) Os elementos na pilha são sempre removidos na mesma ordem em que foram


inseridos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

c) Uma pilha suporta apenas duas operações básicas, tradicionalmente


denominadas push (insere um novo elemento no topo da pilha) e pop (remove
um elemento do topo da pilha).

d) Cada vez que um novo elemento deve ser inserido na pilha, ele é colocado
no seu topo e, em qualquer momento, apenas aquele posicionado no topo da
pilha pode ser removido.

e) Sendo P uma pilha e x um elemento qualquer, a operação Push(P,x) diminui


o tamanho da pilha P, removendo o elemento x do seu topo.

(CESPE - 2011 - EBC - Analista - Engenharia de Software) As pilhas, também


conhecidas como listas LIFO ou PEPS, são listas lineares em que todas as
operações de inserção e remoção de elementos são feitas por um único extremo
da lista, denominado topo.

(VUNESP - 2011 - TJM- - Analista de Sistemas - Judiciário) Lista do tipo LIFO


(Last in, First Out) e lista do tipo FIFO (Firstin,First Out) são, respectivamente,
características das estruturas de dados denominadas:

a) Fila e Pilha.
b) Pilha e Fila.
c) Grafo e Árvore.
d) Árvore e Grafo.
e) Árvore Binária e Árvore Ternária.

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Arquitetura de Tecnologia) A definição da estrutura pilha permite
a inserção e a eliminação de itens, de modo que uma pilha é um objeto
16712855225

dinâmico, cujo tamanho pode variar constantemente.

10. (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Administração de Dados) Na representação física de uma pilha
sequencial, é necessário uso de uma variável ponteiro externa que indique a
extremidade da lista linear onde ocorrem as operações de inserção e retirada de
nós.

11. (CESPE - - ANAC - Técnico Administrativo - Informática) As operações de


inserir e retirar sempre afetam a base de uma pilha.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

12. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da
Informação) Pilha é uma estrutura de dados:

a) cujo acesso aos seus elementos segue tanto a lógica LIFO quanto a FIFO.
b) cujo acesso aos seus elementos ocorre de forma aleatória.
c) que pode ser implementada somente por meio de vetores.
d) que pode ser implementada somente por meio de listas.
e) cujo acesso aos seus elementos segue a lógica LIFO, apenas.

13. (CESPE - 04 – STJ – Analista de Sistemas Em geral, em uma pilha só se admite


ter acesso ao elemento localizado em seu topo. Isso se adapta perfeitamente à
característica das seqüências em que só o primeiro componente é diretamente
acessível.

14. (CESPE - 2004 – STJ – Analista de Sistemas) A seguir, está representada


corretamente uma operação de desempilhamento em uma pilha de nome p.

se p.topo = 0 então
nada {pilha vazia}
senão p.topo  p.topo-1

15. (CESPE - 2010 – TRE/MT - Analista de Sistemas – A) O tipo nó é inadequado para


implementar estruturas de dados do tipo pilha.

16. (FGV – 2015 – DPE/ – Analista de Sistemas) Assinale a opção que apresenta a
estrutura de dados na qual o primeiro elemento inserido é o último a ser
removido.
16712855225

a) Árvore
b) Fila
c) Pilha
d) Grafo
e) Tabela de dispersão

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


FILAS

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Análise de Sistemas) Em um programa existe a necessidade de
guardar todas as alterações feitas em determinado dado para que seja possível
desfazer alterações feitas ao longo de toda a sua existência. Nessa situação, a
estrutura de dados mais adequada para o armazenamento de todas as
alterações citadas seria uma fila.

(CESPE - 2012 – TST – Analista de Sistemas – A) As pilhas e as filas são estruturas


de dados essenciais para os sistemas computacionais. É correto afirmar que a fila
é conhecida como lista LIFO - Last In First Out.

(CESPE - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) As filas


são estruturas com base no princípio LIFO (last in, first out), no qual os dados
que forem inseridos primeiro na fila serão os últimos a serem removidos. Existem
duas funções que se aplicam a todas as filas: PUSH, que insere um dado no topo
da fila, e POP, que remove o item no topo da fila.

(FCC - 2012 - MPE-AP – Analista de Sistemas - A) Nas estruturas de dados,


devido às características das operações da fila, o primeiro elemento a ser inserido
será o último a ser retirado. Estruturas desse tipo são conhecidas como LIFO.

(FCC - 2012 - MPE-AP – Analista de Sistemas - C) Nas estruturas de dados, a fila


é uma lista linear na qual as operações de inserção e retirada ocorrem apenas
no início da lista. 16712855225

(FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas – D) Pela definição


de fila, se os elementos são inseridos por um extremo da lista linear, eles só
podem ser removidos pelo outro.

(FCC - 2011 - TRT - 19ª Região (AL) - Analista Judiciário - Tecnologia da


Informação) FIFO refere-se a estruturas de dados do tipo:

a) fila.
b) árvore binária.
c) pilha.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

d) matriz quadrada.
e) cubo.

(ESAF - 2010 - CVM - Analista de Sistemas - prova 2) Uma fila é um tipo de lista
linear em que:

a) as inserções são realizadas em um extremo e as remoções no outro extremo.


b) as inserções e remoções são realizadas em um mesmo extremo.
c) podem ser realizadas apenas inserções.
d) a inserção de um elemento requer a remoção de outro elemento.
e) a ordem de saída não corresponde à ordem de entrada dos elementos.

(CESPE - 2010 - DETRAN-ES - alista de Sistemas) No armazenamento de


dados pelo método FIFO (first in - first out), a estrutura de dados é representada
por uma fila, em cuja posição final ocorrem inserções e, na inicial, retiradas.

10. (CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


Informação) Entre alguns tipos de estrutura de dados, podem ser citados os
vetores, as pilhas e as filas.

11. (CESPE - 2004 – SES/PA – Analista de Sistemas) Uma estrutura mais geral que as
pilhas e filas é o deque, em que as inserções, retiradas e acessos são permitidos
em ambas as extremidades.

12. (CESPE - – TCE/AC – Analista de Sistemas – D) Um deque (double ended


queue) requer inserção e remoção no topo de uma lista e permite a
implementação de filas com algum tipo de prioridade. A implementação de um
deque, geralmente é realizada com a utilização de uma lista simplesmente
encadeada. 16712855225

13. (FCC - 2007 – TRT/23 – Analista de Sistemas) Uma estrutura de dados com
vocação de FIFO de duplo fim e que admite a rápida inserção e remoção em
ambos os extremos é:

a) uma pilha.
b) uma splay tree.
c) um deque.
d) uma lista linear.
e) uma árvore AVL.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

14. (CESPE - 2004 – PBV/RR - Analista de Sistemas) As filas com prioridade são listas
lineares nas quais os elementos são pares da forma (qi, pi), em que q é o
elemento do tipo base e p é uma prioridade. Elas possuem uma política de fila
do tipo FIFO (first in first out) entre os elementos de mesma prioridade.

15. (CESPE - 2004 – STJ – Analista de Sistemas) A seguir, está representada


corretamente uma operação de retirada em uma fila de nome f.

se f.começo = nil então


erro {fila vazia}
senão j  f.começo.info

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


ÁRVORES

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) As operações de busca em uma árvore binária não a alteram, enquanto
operações de inserção e remoção de nós provocam mudanças sistemáticas na
árvore.

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) O tipo de dados árvore representa organizações hierárquicas entre
dados.

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas) Denomina-se árvore binária


a que possui apenas dois nós.

(CESPE - - ANAC - Especialista em Regulação - Economia) Considerando-


se uma árvore binária completa até o nível 5, então a quantidade de folhas nesse
nível será 24.

(CESPE - – ANAC - Analista de Sistemas) Uma árvore binária completa até


o nível 10 tem 2.047 nós.

(CESPE - 2010 – TRE/MT – Analista de Sistemas – B) As listas, pilhas, filas e árvores


são estruturas de dados que têm como principal característica a sequencialidade
dos seus elementos.

(CESPE - 2010 – TRE/MT - Analista de Sistemas – E) O uso de recursividade é


16712855225

totalmente inadequado na implementação de operações para manipular


elementos de uma estrutura de dados do tipo árvore.

(CESPE - 2011 – STM – Analista de Sistemas) Enquanto uma lista encadeada


somente pode ser percorrida de um único modo, uma árvore binária pode ser
percorrida de muitas maneiras diferentes.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


ÁRVORES

- 2012 - MPE-AP - Analista Ministerial - Tecnologia da Informação – A) A


árvore é uma estrutura linear que permite representar uma relação de hierarquia.
Ela possui um nó raiz e subárvores não vazias.

(FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da


Informação) Em uma árvore binária, todos os nós têm grau:

a) 2.
b) 0, 1 ou 2.
c) divisível por 2.
d) maior ou igual a 2.
e) 0 ou 1.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


ÁRVORES

(CETAP - 2010 - - - Analista de Sistemas - A) Uma árvore binária é aquela


que tem como conteúdo somente valores binários.

(CETAP - 2010 - - - Analista de Sistemas - B) Uma árvore é composta por


duas raízes, sendo uma principal e a outra secundária.

(FUNCAB - 2010 - SEJUS-R - Analista de Sistemas - II) Árvores são estruturas


de dados estáticas com sua raiz representada no nível um.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


GRAFOS

(CESPE - 2010 – TJ/ES – Analista de Suporte Considerando-se a implementação


de um grafo denso, direcionado e ponderado, se o número de vértices ao
quadrado tem valor próximo ao número de arcos, o uso de uma matriz de
adjacência simétrica apresenta vantagens em relação ao uso de uma lista de
adjacência.

(FCC - 3 – MPE/SE – Analista do Ministério Público Considere:

I. Estrutura de dados que possui uma sequência de células, na qual cada célula
contém um objeto de algum tipo e o endereço da célula seguinte.

II. Podem ser orientados, regulares, completos e bipartidos e possuir ordem,


adjacência e grau.

III. Possuem o método de varredura esquerda-raiz-direita (e-r-d).

Os itens de I a III descrevem, respectivamente,

a) árvores binárias, listas ligadas e arrays.


b) arrays, árvores binárias e listas ligadas.
c) grafos, árvores binárias e arrays.
d) listas ligadas, grafos e árvores binárias.
e) grafos, listas ligadas e árvores binárias.

3 – TCE/ES – Analista de Sistemas) Considerando o grafo ilustrado


16712855225

(CESPE -
acima, assinale a opção em que é apresentada a descrição em vértices (V) e
arestas (A).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

a) V = {1, 2, 3, 4, 5, 6 }
A = {(2, 4), (2, 3), (2, 5), (3, 6), (1, 5)}

b) V = { 2, 4, 1, 3, 6, 5 }
A = {(4, 2), (1, 3), (5, 2), (6, 3), (5, 3)}

c) V = {1, 2, 3, 4, 5, 6 }
A = {(4, 2), (3, 4), (5, 2), (6, 3), (5, 3)}

d) V = {1, 2, 3, 4, 5, 6 }
A = {(4, 2), (3, 1), (5, 1), (6, 2), (5, 3)}

e) V = { 2, 4, 1, 3, 6, 5 }
A = {(4, 2), (3, 1), (5, 2), (6, 3), (5, 3)}

(CESPE - 2 – TJ/RO – Analista de Suporte – ITEM B Grafo corresponde a uma


estrutura abstrata de dados que representa um relacionamento entre pares de
objetos e que pode armazenar dados em suas arestas e vértices, ou em ambos.

(CESPE - 2 – PEFOCE – Perito Criminal Considere que um grafo G seja


constituído por um conjunto (N) e por uma relação binária (A), tal que G = (N,
A), em que os elementos de N são denominados nós (ou vértices) e os elementos
de A são denominados arcos (ou arestas). Em face dessas informações e do grafo
abaixo, é correto afirmar que esses conjuntos são N = {1,2,3,4} e A =
{(1,2),(2,1),(2,4),(2,3)}.

16712855225

(CESPE - 2 – BASA – Analista de Sistemas É misto o grafo com arestas não


dirigidas que representam ruas de dois sentidos e com arestas dirigidas que
correspondem a trechos de um único sentido, modelado para representar o
mapa de uma cidade cujos vértices sejam os cruzamentos ou finais de ruas e
cujas arestas sejam os trechos de ruas sem cruzamentos.

(CESPE - 2 – BASA – Analista de Sistemas Para modelar a rede que conecta


todos os computadores em uma sala de escritório com a menor metragem
possível de cabos, é adequado utilizar um grafo G cujos vértices representem os
possíveis pares (u, v) de computadores e cujas arestas representem o

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

comprimento dos cabos necessários para ligar os computadores u e v,


determinando-se o caminho mínimo, que contenha todos os vértices de G, a
partir de um dado vértice v.

(CESPE - 2012 – BASA – Analista de Sistemas Um grafo completo contém pelo


menos um subgrafo ponderado.

(CESPE - 2012 – BASA – Analista de Sistemas) Um grafo não direcionado é dito


conectado quando há pelo menos um caminho entre dois vértices quaisquer do
grafo.

10. (CESPE - 2012 – TJ/AC – Analista de Sistemas) Define-se um grafo como


fortemente conexo se todos os nós puderem ser atingidos a partir de qualquer
outro nó.

11. (CESPE - 3 – CRPM – Analista de Sistemas) Considere que o grafo não


orientado representado na figura abaixo possua as seguintes características:

G1 = (V1, A1)
V1 = {A, B, C, D}
A1 = {(A, C), (A, D), (B, C), (B, D), (A,B)}.

Nesse caso, é correto afirmar que o grafo G1 possui quatro vértices, nomeados de
A, B, C e D, e cinco arcos, que conectam pares de vértices, conforme especificado
16712855225

em A1.

12. (CESPE - 2012 – BASA – Analista de Sistemas) A implementação de um grafo do


tipo ponderado e direcionado na forma de uma matriz de adjacência utiliza
menor quantidade de memória que a implementação desse mesmo grafo na
forma de uma lista encadeada.

13. (CESGRANRIO - 4 – BASA – Analista de Sistemas) O grafo acima pode ser


representado pela seguinte matriz:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

a)

b)

c)

d)

e)

14. (CESPE - 2012 – TJ/SE – Analista de Sistemas) Um grafo é formado por um par
16712855225

de conjuntos de vértices e arestas, não podendo o conjunto de vértices ser


particionado em subconjuntos.

15. (CESPE - 2012 – TRT/AM – Analista de Sistemas) Um grafo é uma estrutura de


dados consistida em um conjunto de nós (ou vértices) e um conjunto de arcos
(ou arestas). O grafo em que os arcos possuem um número ou peso associados
a eles, é chamado de grafo:

a) predecessor.
b) adjacente.
c) incidente.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

d) ponderado.
e) orientado.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


HASHING

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Administração de Dados A pesquisa sequencial é aplicável em
estruturas não ordenadas.

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


Dados) As colisões ocorrem na utilização de tabela hash porque várias chaves
podem resultar na mesma posição.

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Administração de Dados) Ocorre o hashing quando não há o
armazenamento de cada entrada de uma tabela em um específico endereço
calculado a partir da aplicação de uma função chave da entrada.

(FCC - - METRÔ- - Analista Treinee - Análise de Sistemas) O objetivo de


fazer uma busca rápida a partir de uma chave de pesquisa simples e obter o
valor desejado é alcançado pela estrutura de dados especial denominada:

a) array.
b) lista.
c) vetor.
d) árvore binária.
e) tabela de hashing.

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de


16712855225

Dados A busca que utiliza uma tabela hash realiza comparação das chaves para
encontrar a posição do elemento que está sendo buscado.

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas No método de hashing, por


meio de acesso sequencial, são utilizados tabelas e mapas para recuperar
informações de endereço de arquivos de forma rápida e eficiente.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


ESTRUTURAS DE DADOS

1 2 3 4 5 6 7 8 9 10
D E C E C C E

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


VETORES E MATRIZES

1 2 3 4 5 6 7 8 9 10
E D E C E C C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


LISTA ENCADEADA

1 2 3 4 5 6 7 8 9 10
E C C E C C C E E C
11 12 13 14 15 16 17 18 19 20
E E E D E E E A C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


PILHAS
16712855225

1 2 3 4 5 6 7 8 9 10
E E E E E D E B C C
11 12 13 14 15 16 17 18 19 20
E E C C E C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


FILAS

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

1 2 3 4 5 6 7 8 9 10
E E E E E C A A C C
11 12 13 14 15 16 17 18 19 20
C E C C E

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


ÁRVORES

1 2 3 4 5 6 7 8 9 10
C C E E C E E C

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


ÁRVORES

1 2 3 4 5 6 7 8 9 10
E B

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


ÁRVORES

1 2 3 4 5 6 7 8 9 10
E E E 16712855225

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


GRAFOS

1 2 3 4 5 6 7 8 9 10
E D E C C C E E C C
11 12 13 14 15 16 17 18 19 20
E E A E D

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 00

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


HASHING

1 2 3 4 5 6 7 8 9 10
C C E E E E

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 91 de 91


Aula 02

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

AULA 02

SUMÁRIO PÁGINA
Apresentação 01
- Padrões de Projeto 02
- Padrões Java EE 63
- Padrões de Projeto (GRASP) 72
Lista de Exercícios Comentados 82
Gabarito 105

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

PADRÕES DE PROJETO

Pessoal, vamos iniciar pelo básico! O que é um Padrão? É um modelo testado ou


documentado para se alcançar um determinado objetivo. O autor Christopher
Alexander afirma que cada padrão descreve um problema que ocorre repetidas
vezes em nosso ambiente e o núcleo de sua solução, de tal forma que ela pode ser
usada diversas vezes sem que seja realizada da mesma maneira.

E o que seriam Padrões de Projeto (do inglês, Design Patterns)? Respondo: são
descrições de objetos que se comunicam e classes que são customizadas para
resolver um problema genérico em um contexto específico. Esses padrões
nomeiam, abstraem e identificam aspectos comuns em uma estrutura e os torna
úteis para que sejam realizados. Como é isso, professor?

Suponham que haja uma fábrica de software que desenvolve diversos sistemas para
as mais variadas áreas de negócio. Sabe-se que, mesmo em áreas aparentemente
distintas ou contrastantes, grande parte dos problemas já possuem uma solução
conhecida, formalmente documentada e exaustivamente testada, uma vez que se
tratam de problemas recorrentes.

Portanto, não há necessidade de se resolver o problema do


início se já existe uma solução adequada. Assim sendo, os
padrões de projeto são modelos para solucionar problemas
gerais de projeto em um contexto particular. Poxa,
professor... o engenheiro de software que inventou isso era
genial, né?! Qual é, pessoal! Mais uma vez, nós “roubamos”
isso de outras engenharias. Em meados de 1977, um sujeito
16712855225

chamado Christopher Alexander (arquiteto, matemático e


urbanista austríaco) estudava como melhorar o projeto de
edifícios. Ao se cansar de observar repetidos problemas, ele
lançou um manifesto com o registro de diversos padrões
de projeto recorrentes na engenharia civil.

Esse manifesto continha algumas regras e figuras que descreviam métodos para a
construção de projetos práticos, seguros e atrativos em quaisquer escalas, desde
regiões inteiras a cidades, vizinhanças, jardins, edifícios, salas, entre outros. Cada
padrão foi testado no mundo real, sendo revisado por diversos arquitetos e
engenheiros.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Alexander fez uma importante declaração a respeito de padrões de projeto de


arquitetura: “Cada padrão descreve um problema que ocorre repetidas vezes em
nosso ambiente e, então, descreve o núcleo da solução para aquele problema, de tal
maneira que pode-se usar essa solução milhões de vezes sem nunca fazê-la da
mesma forma duas vezes”.

Bem, isso chamou a atenção de programadores que estavam de saco cheio de ter
que refazer várias partes do código para cada projeto. Foi então que, em 1994
quatro engenheiros de software, conhecidos como The Gang of Four, resolveram
compilar bibliotecas de soluções para problemas comuns de codificação e lançaram
um livro com 23 Padrões de Projeto de Software.

Esse livro se tornou um clássico best-seller da literatura orientada a objetos e é


recomendado na nossa bibliografia, não obstante ser de leitura extremamente
técnica. Concernente aos padrões de projeto, os autores desse livro dizem: “São
descrições de objetos que se comunicam e classes que são customizadas para resolver
um problema genérico de design em um contexto específico”.

Professor, que contexto específico é esse? Bem, o contexto é inerente a área de


negócio! Cada um adapta o padrão genérico ao seu ambiente específico para
resolver um mesmo problema. Os padrões de projeto abstraem e identificam os
aspectos-chave de uma estrutura de projeto comum para torná-la reutilizável. A
tabela abaixo apresenta diversos benefícios dos padrões de projeto:

BENEFÍCIOS E VANTAGENS DOS PADRÕES DE PROJETO

Aprender com a experiência de outros, identificando problemas comuns de engenharia de software e


utilizando soluções testadas e bem documentadas.
Utilizar soluções com nomes que facilitam a comunicação, compreensão e documentação.
16712855225

Facilitam o reúso de soluções arquiteturais bem-sucedidas.

Desenvolver softwares de melhor qualidade.

Padrões capturam a estrutura estática e a colaboração dinâmica entre objetos participantes no projeto de
sistemas.
Utilizam polimorfismo, herança, modularidade, composição, abstração para construir código reutilizável,
eficiente, de alta coesão e baixo acoplamento.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Professor, então há apenas benefícios em se utilizar padrões de projetos? Claro que


não! Muitas vezes, as tentativas de se escrever um código que esteja em
conformidade com um determinado padrão de projeto aumentam
desnecessariamente a complexidade do código. Em outras palavras, a tentativa de
simplificar pode acabar complicando a implementação.

Ademais, estudos mostram que grande parte dos padrões podem ser simplificados
ou eliminados utilizando-se recursos diretos das próprias linguagens de
programação, como em LISP e DYLAN. Portanto, os Design Patterns podem ser
simplesmente um indicativo de que algumas linguagens de programação falham
em oferecer determinadas características.

Cada padrão de projeto é organizado segundo quatro


elementos: Nome, Problema, Solução e Consequências.
Nome simplesmente identifica o padrão; Problema descreve
a condição em que ele deve ser aplicado; Solução descreve
como resolvê-lo; e Consequência descreve os impactos.

Por fim, algumas observações importantes! Esses 23 Design Patterns somente podem
ser utilizados em projetos de tecnologia da informação? Claro, eles são padrões de
projeto de software. Esses 23 Design Patterns somente podem ser utilizados em
projetos orientados a objetos? Sim, também. Pessoal, Padrões GOF somente com
OO! Padrões de Projeto, em geral, podem usar qualquer paradigma ou linguagem!

16712855225

Os 23 Padrões de Projeto podem ser classificados quanto aos seus propósitos em


três tipos: Padrões Criacionais, Padrões Estruturais e Padrões Comportamentais.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Infelizmente, vocês têm que decorar como se classificam todos os padrões de


projeto. A tabela acima apresenta todos os padrões de acordo com seus respectivos
propósitos.

Os Padrões Criacionais abstraem o processo de criação de objetos a partir da


instanciação de classes. Já os Padrões Estruturais tratam da forma como classes e
objetos estão organizados para formar estruturas maiores. Por fim, Padrões
Comportamentais se preocupam com os algoritmos e responsabilidades dos
objetos, que ocorrem em tempo de execução.

Pessoal... quando eu estudei esse assunto na minha vida de concurseiro, eu tive uma
ajuda sensacional para decorar essa classificação! Eu me utilizei de um mnemônico
genialmente criado por um professor chamado Rogério Araújo para - a partir de
duas frases bastantes simples - decorar os padrões criacionais e estruturais, como
mostra imagem abaixo.

Explicação: A fábrica (Factory Method) abstrata (Abstract Factory) constrói (Builder)


um protótipo (Prototype) único (Singleton). A ponte (Bridge) adaptada (Adapter) é
composta (Composite) de decorações (Decorator) na fachada (Façade) para o peso-
16712855225

mosca (Flyweight) se aproximar (Proxy). E não tem frase para o último? Não, se não
é criacional ou estrutural, é comportamental.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

PADRÕES CRIACIONAIS

 Abstract Factory: fornece uma interface para criar famílias de objetos relacionados
ou dependentes sem especificar suas classes concretas.

Pessoal, esse padrão de projeto deve ser utilizado quando o sistema for configurado
como uma família de produtos, que – uma vez relacionados – são projetados para
serem utilizados em conjunto. O Abstract Factory busca assegurar essa restrição,
revelando apenas suas interfaces e, não, suas implementações. Considerem a
hipótese de se visualizar a globo.com de um desktop ou de um smartphone.

Evidentemente, são duas interfaces gráficas diferentes (Clássica e Mobile). Apesar de


serem distintas, há bastantes similaridades entre elas. Portanto, é útil aproveitar todo
código em comum e implementar com as classes concretas apenas as diferenças.
Portanto, o usuário interage apenas com a interface provida pelo padrão Abstract
Factory. Entendido?

Em tempo de execução, ela descobre, a partir de algum parâmetro fornecido, se o


acesso parte de um smartphone ou de um desktop e, então, instancia apenas a
classe concreta específica que irá renderizar a interface gráfica pretendida. Galera,
todos os padrões do tipo Factory encapsulam a criação de objetos. O padrão
Factory Method, por exemplo, deixa as subclasses decidirem quais objetos criar.

 Builder: separa a construção de um objeto complexo da sua representação, de


forma que o mesmo processo de construção possa criar diferentes tipos de
representações.

Pessoal, esse padrão de projeto deve ser utilizado quando o algoritmo para criação
16712855225

de um objeto complexo for independente das partes que compõem o objeto e


independente de como ele é montado. Ademais, o processo de construção deve
permitir diferentes representações para o objeto que será construído. Esse padrão
é bastante parecido com o Abstract Factory.

A diferença é que não se constrói uma família de objetos de uma única vez, mas
partes do objeto passo-a-passo! No exemplo anterior, havia duas famílias de
objetos compostas de várias partes (botões, barra de rolagem, caixas de seleção,
ícones, etc), que compunham a interface de um website em um smartphone ou
desktop.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Ao se descobrir de que dispositivo se tratava, instanciava-se a interface completa do


smartphone ou desktop. Agora suponham que um tablete seja capaz de reunir
simultaneamente elementos de ambas as interfaces gráficas. O Builder é capaz de
coordenar a construção da interface gráfica do tablete ao instanciar partes dessas
duas interfaces.

Portanto, ele pode criar diferentes representações de suas interfaces gráficas ao


instanciar, por exemplo, um botão da interface do smartphone, a barra de rolagem
da interface do desktop, caixas de seleção da interface do smartphone e ícones da
interface do desktop. O Builder possui uma classe que coordena a construção desses
objetos até a criação da representação final.

 Factory Method: define uma interface para criar um objeto, mas deixa as
subclasses decidirem qual classe instanciar.

Pessoal, esse padrão de projeto deve ser utilizado quando uma classe não puder
antecipar qual objeto ela deve criar. Deve ser usado, também, quando uma classe
quer que suas subclasses especifiquem os objetos que ela criar. Por fim, deve ser
usado para delegar responsabilidades a diversas outras subclasses. Considerem a
hipótese de se visualizar as características de um carro de uma concessionária.

No entanto, sabe-se que em uma concessionária há diversos modelos de carro.


Então, pode-se criar uma classe abstrata base para representar todos os carros e
especializá-la em subclasses que representem cada tipo de carro (Corsa, Celta,
Cruze, Camaro, etc). No entanto, o problema surge quando se quer criar um objeto,
uma vez que – de alguma forma – precisa-se identificar qual objeto se deseja criar.

O Factory Method cria objetos concretos que implementam a classe base e


16712855225

especializam cada objeto, sendo definidos, pelo usuário, em tempo de execução,


qual carro deverá ser instanciado. É bom destacar que ele – conforme especificado
– contém diversos elementos, tais como: Creator, ConcreteCreator, Product e
ConcreteProduct.

 Prototype: especifica os tipos de objetos para criar usando uma instância como
protótipo e cria novos objetos copiando este protótipo.

Pessoal, esse padrão de projeto deve ser utilizado quando um sistema possuir
componentes cujo estado inicial tenha poucas variações. É oportuno disponibilizar

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

um conjunto pré-estabelecido de protótipos que dão origem aos objetos que


compõem o sistema. Dessa forma, basta modificar os atributos que forem diferentes
e adaptar o objeto para o uso pretendido.

Considerem a hipótese de se preencher os dados de todas as pessoas de uma


família e que cada objeto Pessoa contenha centenas de atributos, tais como: Nome,
Idade, Endereço, Telefone Residencial, Nacionalidade, Classe Social, etc. Vamos
supor que sejam preenchidos todos os atributos do objeto Pessoa referente ao pai,
mas ainda falta preencher os dados da mãe e filhos.

Portanto, sabe-se que atributos como Endereço, Telefone Residencial,


Nacionalidade, etc provavelmente serão idênticos para todos os membros da
família. Logo, ao invés de se criar um novo objeto para cada membro e preenchê-
los um a um integralmente, pode-se clonar o objeto pai já preenchido e modificar
apenas os atributos diferentes, como Nome, Idade, entre outros.

Entre os benefícios adicionais decorrentes da utilização desse padrão, inserem-se:


acrescenta e remove produtos em tempo de execução; reduz o número de
subclasses; configura dinamicamente uma aplicação com classes; especifica novos
objetos pela variação de valores; e especifica novos objetos pela variação da
estrutura. Bacana?

 Singleton: garante que uma classe tenha apenas uma instância e provê um ponto
de acesso global a ela.

Pessoal, esse padrão de projeto deve ser utilizado quando houver a necessidade de
existir exatamente uma instância de uma classe e ela deverá ser acessível aos clientes
a partir de um ponto de acesso conhecido. Vamos considerar a hipótese de um
16712855225

sistema que trabalhe com diversas conexões com o banco de dados em uma mesma
execução.

Imaginem a perda de desempenho ao se instanciar a classe de conexão com o


banco de dados várias vezes. O Padrão Singleton resolve esse problema ao garantir
que só haverá uma instância de conexão com o banco de dados e, assim, assegurar
que – pelo menos durante uma determinada execução – a classe será instanciada
apenas uma única vez.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

PADRÕES ESTRUTURAIS

 Adapter: converte a interface de uma classe em outra interface que normalmente


não poderiam trabalhar juntas por serem incompatíveis.

Pessoal, esse padrão de projeto deve ser utilizado quando se quer usar uma classe
e sua interface não é compatível com aquela de que você necessita. Deve ser usado,
também, quando se quer criar classes reusáveis que cooperem com classes que não
têm necessariamente interfaces compatíveis. Essa classe funciona como um
adaptador de tomada.

Frequentemente, quer se utilizar uma tomada de três pinos, porém a tomada


disponível só permite dois pinos. Usa-se, então, um adaptador que converte a
interface de uma das tomadas permitindo que se faça a conexão normalmente. Ela
permite que um objeto cliente utilize serviços de outros objetos com interfaces
diferentes.

Considerem a hipótese de um objeto que contenha dados de um formulário de


Vistos de Imigração do sistema da polícia federal, como Data de Nascimento (no
formato DD:MM:AAAA). Entretanto, esse objeto deve se comunicar com outro
objeto do sistema da embaixada americana, que adota o formato MM:DD:AAAA.
Nesse caso, um Adapter seria extremamente oportuno!

 Bridge: desacopla uma interface de sua implementação, de forma que ambas


possam variar independentemente.

Pessoal, esse padrão de projeto deve ser utilizado quando se deseja evitar um
vínculo permanente entre uma abstração e sua implementação. Ele é recomendado
16712855225

também quando se quer evitar que mudanças na implementação de uma abstração


causem impacto nos clientes, i.e., seu código não deve ter que ser recompilado.
Entenderam?

O Bridge fornece um nível de abstração maior que o Adapter, na medida em que


permite variações independentes da interface e da implementação. Ele provê alto
nível de desacoplamento de componentes, fazendo uma ponte entre as hierarquias
de classes relacionadas. Esse padrão de projeto é um pouco complicado de se
entender, portanto prestem atenção!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Considerem a hipótese de um conjunto de janelas gráficas que funcionem em


diversas plataformas (Windows, Linux, Mac, etc). Professor, por que não usar o
Adapter? De fato, ele poderia adaptar interfaces para cada uma das plataformas. No
entanto, há dezenas de tipos de janelas gráficas (Diálogo, Aviso, Erro, etc), tornando
a utilização inviável para grandes quantidades.

Uma ideia melhor seria criar uma interface para as plataformas e outra para as
janelas. A primeira conteria os elementos comuns das plataformas e teria classes
concretas específicas para implementar janelas em Linux, Mac, etc. A segunda
conteria os elementos comuns das janelas e teria classes concretas específicas para
implementar Janelas de Diálogo, Aviso, Erro, etc.

Portanto, ao chamar um método da classe concreta da interface de janelas, ela


realizará chamadas aos métodos concretos da interface de plataformas. Assim, caso
se queira adicionar mais tipos de janelas ou mais plataformas, não haverá impacto
no cliente, não haverá recompilação de código e não haverá vínculo entre as
interfaces de um e implementações de outros.

O desacoplamento permite que se modifique o código da interface de plataformas


sem alterar a implementação das janelas e vice-versa. Vocês percebem que, assim,
pode-se combinar as interfaces e implementações de quaisquer maneiras possíveis?
Pois é, esse é o grande benefício do padrão Bridge. Como nós vimos anteriormente,
basta lembrar de uma ponte.

 Composite: compõe objetos em estruturas de árvore para representar hierarquias


parte-todo, permitindo aos clientes tratarem objetos individuais e composições
de objetos uniformemente.
16712855225

Pessoal, esse padrão de projeto deve ser utilizado quando se deseja representar
hierarquias parte-todo de objetos e quando se deseja que os clientes ignorem a
diferença entre composições de objetos e objetos individuais. Assim, eles tratarão
todos os objetos em uma estrutura composta uniformemente. Considerem a
hipótese de uma interface gráfica composta de vários objetos.

Em muitos casos, esses objetos são compostos de outros objetos. Uma excelente
implementação dessa interface seria, por exemplo, por meio de uma árvore, porém
tudo deve ser transparente para o cliente – ele precisa saber de nada disso. Dessa
forma, ele não deve diferenciar objetos individuais (Folhas) de outros objetos
compostos (Nós).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

 Decorator: anexa responsabilidades adicionais a um objeto dinamicamente.


Fornece uma alternativa flexível em relação à herança para estender
funcionalidades.

Pessoal, esse padrão de projeto deve ser utilizado quando se quer adicionar
responsabilidades a objetos individuais dinâmica e transparentemente, i.e., sem
afetar outros objetos. Também é utilizado quando extensões por subclasses forem
impraticáveis, tendo em vista o possível número de extensões independentes.
Considerem a hipótese de um Subway!

Usando-se herança, cria-se uma classe abstrata sanduíche e várias classes concretas
para implementá-la. No entanto, há sanduíches com almôndega, sem queijo, com
tomate, sem cebola, etc. É customizável, portanto é completamente inviável
construir classes concretas para cada tipo de sanduíche, devido a gigantesca
quantidade de combinações.

O Padrão Decorator sugere que o objeto sanduíche anexe diversas


responsabilidades dinamicamente. Dessa forma, em tempo de execução, à medida
que se adicione um novo ingrediente, cria-se mais uma responsabilidade. Ao
contrário da herança, que aplica funcionalidades a todos os seus objetos, o
Decorator aplica apenas a um objeto específico.

 Façade: oferece uma interface unificada para um conjunto de interfaces em um


subsistema, definindo uma interface de alto nível que facilita a utilização do
subsistema.
16712855225

Pessoal, o Padrão de Projeto Façade (também é um dos mais importantes) deve ser
utilizado quando se desejar fornecer uma interface simples para um subsistema
complexo ou também quando se deseja dividir em camadas os subsistemas. É
também utilizando quando existem diversas dependências entre clientes e as classes
de implementação de uma abstração.

Considerem a hipótese de um banco com um sistema legado de informações de


crédito muito complexo, que deve interagir com um sistema de banco de dados
recém implementado. Para que ele acesse o sistema legado, pode-se utilizar o
padrão Façade para facilitar a utilização por meio de uma interface de alto nível e,
assim, não há de se interagir diretamente com o sistema complexo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

 Flyweight: usa compartilhamento para suportar eficientemente grandes


quantidades de objetos de baixa granularidade.

Pessoal, esse padrão de projeto deve ser utilizado quando uma aplicação usa
grande número de objetos e os custos de armazenamento forem altos. Deve ser
utilizado, também, quando muitos grupos de objetos puderem ser substituídos por
relativamente poucos objetos compartilhados, uma vez que os estados extrínsicos
forem removidos.

Considerem a hipótese de um texto escrito no Microsoft Word, em que cada


caractere seja um objeto que contenha posição, formato e tamanho – isso poderia
ocupar toda memória disponível no sistema, mas percebam que vários caracteres
se repetem diversas vezes (ex: letra A) e eles são exatamente iguais, muda-se
somente a posição (ex: 200 ocorrências da letra A em várias posições).

Portanto, cada caractere deve possuir uma referência para um objeto Flyweight, que
deverá ser compartilhado por todas as instâncias do mesmo caractere do
documento, exceto a posição que será variável. Portanto, em vez de armazenarem
800 objetos com três atributos, armazenam-se 800 objetos com um atributo e
ponteiro para o objeto Flyweight.

 Proxy: provê um substituto ou ponto através do qual um objeto pode controlar


o acesso a outro objeto.

Pessoal, esse padrão de projeto deve ser utilizado quando houver uma necessidade
de uma referência mais versátil ou sofisticada para um objeto do que um simples
16712855225

ponteiro. Por exemplo, proxies virtuais criam objetos caros por demanda e proxies
de proteção controlam o acesso ao objeto original. Considerem a hipótese de um
sistema que acesse um banco de dados por meio de uma classe de conexão.

No entanto, por medidas de segurança, vamos supor que se deseja que esse sistema
não tenha acesso direto ao banco de dados referido. Dessa forma, o usuário se
conectará ao Proxy (i.e., a classe substituta ou suplente) e o Proxy que irá se conectar
ao banco de dados. Claro, tudo isso ocorrendo de maneira transparente para o
usuário.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

PADRÕES COMPORTAMENTAIS
 Chain of Responsability: evita o acoplamento do remetente de uma requisição ao
seu receptor ao dar a mais de um objeto a chance de lidar com a requisição.

Pessoal, esse padrão de projeto deve ser utilizado quando se deseja emitir uma
solicitação para um dentre vários objetos, sem especificar explicitamente o receptor
ou quando mais de um objeto é capaz de lidar com a requisição e ele não for
conhecido a priori. Também é utilizado quando um conjunto de objetos que podem
lidar com uma requisição forem especificados dinamicamente.

Esse padrão acaba com estruturas de decisão ao criar uma cadeia de objetos em
que se passa a responsabilidade até encontrar aquele que pode respondê-la.
Consideremos a hipótese de uma loja virtual que permite pagamento online por
meio de diversos bancos. Dado um parâmetro, deve-se identificar qual banco deve
ser utilizado para o pagamento.

Esse problema pode ser resolvido com outros padrões, entretanto o Chain of
Responsability fornece uma solução com fraco acoplamento ao dar a cada elemento
da cadeia a oportunidade de implementar a requisição da maneira que quiserem.
Assim, não há uma associação direta entre o remetente e o receptor que irá lidar
com a requisição.

 Command: encapsula a requisição de um objeto, portanto permitindo que se


parametrize os clientes com diferentes requisições.

Pessoal, esse padrão de projeto deve ser utilizado quando se deseja parametrizar
objetos para realizar alguma execução ou também para especificar, enfileirar e
16712855225

executar requisições a qualquer momento. Ele também é utilizado para suportar


mudanças de log de maneira que possa ser reaplicado no caso de uma queda no
sistema. Entenderam?

Considerem a hipótese de um interruptor que ligue ou desligue uma lâmpada. Esse


interruptor encapsula uma requisição, de tal modo que se possa utilizá-lo para
diferentes dispositivos. Em outras palavras, se eu retirar um interruptor de uma
lâmpada, conectar adequadamente aos fios de um computador, é possível
ligar/desligar o computador com o mesmo interruptor.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Portanto, o interruptor tem sua interface encapsulada, logo pode ser utilizado em
qualquer dispositivo que tenha uma interface Ligar/Desligar. Imaginem agora uma
classe que faz diversas conexões a um banco de dados. Não é recomendável que a
classe tenha um método que se conecte diretamente ao banco, portanto encapsula-
se essa conexão, diminuindo a dependência.

 Interpreter: dada uma linguagem, define uma representação para sua gramática
em conjunto com um interpretador que utiliza a representação para interpretar
sentenças na linguagem.

Pessoal, esse padrão de projeto deve ser utilizado quando houver uma linguagem
para interpretar e quando se puder representar declarações nessa linguagem como
árvores sintáticas abstratas. Ele funciona bem quando a gramática é simples,
permitindo um fácil gerenciamento e quando a eficiência não é um fator crítico de
sucesso. Basta lembrar do Java, que é uma linguagem interpretada.

O que isso quer dizer esse negócio de interpretada, professor? Bem, isso significa que
o código fonte é compilado em um bytecode, que é então posteriormente
interpretado por um interpretador. Dessa forma, esse padrão de projeto é utilizado
nos casos em que é possível definir uma linguagem com uma gramática que possa
ser, posteriormente, interpretada.

 Iterator: fornece uma maneira de acessar elementos de um objeto agregado


sequencialmente sem expor sua representação interna.

Pessoal, esse padrão de projeto deve ser utilizado quando se deseja acessar o
conteúdo de um objeto agregado sem expor a sua representação interna e para
16712855225

fornecer uma interface uniforme para diferentes estruturas de agregação. Ele


também é recomendado para suportar múltiplos acessos a objetos agregados.
Entendido? Vamos ver um exemplo!

Considerem a hipótese de se desejar percorrer sequencialmente quatro coleções


distintas (Lista, Arrays, Map e Set) de objetos bastante complexos. Em uma situação
normal, deve-se conhecer a representação interna de cada uma dessas coleções. O
Iterator permite que se percorra todas essas coleções sem precisar saber detalhes
de seu funcionamento.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

 Mediator: define um objeto que encapsula a forma como um conjunto de objetos


interagem, promovendo um fraco acoplamento ao evitar que objetos se refiram
aos outros explicitamente.

Pessoal, esse padrão de projeto deve ser utilizado quando um conjunto de objetos
se comunicar de maneira bem definida, porém complexa e quando o reúso de um
objeto for difícil por referenciar e se comunicar com muitos outros objetos. Ademais,
ele é utilizado quando um comportamento distribuído entre diversas classes puder
ser customizado sem a criação de muitas subclasses.

Considerem a hipótese de um software complexo com grandes quantidades de


classes, de tal modo que a lógica de processamento está distribuída entre elas. Todo
mundo sabe que, há cada manutenção ou refatoração, o desenho do software pode
se tornar mais complexo e a comunicação entre as classes pode ser mais difícil de
ler entender.

Portanto, o Padrão Mediator permite que a comunicação entre objetos seja


encapsulada em um outro objeto mediador. Assim, não haverá mais uma
comunicação direta entre as classes, reduzindo o acoplamento, garantindo que
todos fiquem mais livres para serem modificados e diminuindo a complexidade de
comunicação entre objetos.

 Memento: captura e externaliza o estado interno de um objeto, sem violar seu


encapsulamento, de maneira que o objeto possa ser restaurado posteriormente.

Pessoal, esse padrão de projeto deve ser utilizado quando uma parte do estado de
um objeto precisar ser armazenada, de forma que possa ser recuperada
posteriormente. Ele é utilizado, também, para evitar que uma interface direta para
16712855225

obter um estado exponha detalhes de implementação e quebrem o


encapsulamento do objeto.

Considerem a hipótese de um editor de texto que guarde o estado interno do


objeto, i.e., o que o usuário está digitando, aí ele deleta uma palavra, mas se
arrepende e deseja voltar ao estado anterior. Bem, o memento oferece uma maneira
de desfazer ações sem ter acesso ao que estava sendo escrito, ele apenas retorna
o estado anterior, mas sem olhar o que estava escrito.

Portanto, o Padrão Memento permite a captura e externalização do estado interno


de um objeto, sem violar seu encapsulamento, i.e., ele captura o que estava escrito

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

e mostra ao usuário, porém sem ter acesso direto ao que estava escrito. Dessa
forma, pode-se cancelar operações e desfazer alterações para retornar ao estado
anterior.

 Observer: define uma dependência um-para-muitos entre objetos para que,


quando um objeto mudar de estado, os seus dependentes sejam notificados e
atualizados automaticamente.

Pessoal, esse padrão de projeto deve ser utilizado quando uma mudança em um
objeto requisitar mudanças em outros e não se souber quantos objetos necessitam
ser modificados. Ele também é utilizado quando uma abstração possuir dois
aspectos, um dependente do outro. Ademais, é recomendado quando um objeto
for capaz de notificar outros sem assumir quem são.

Considerem a hipótese de uma tabela de classificação do campeonato brasileiro


com um gráfico de pizza informando vitórias, empates e derrotas de um
determinado time, assim como um gráfico com a variação de posição do time do
campeonato. Aí chega o domingão, ocorrem 10 jogos e o estagiário altera a tabela
com os novos dados.

E agora? Como ficam os gráficos? Tem que atualizar cada um na mão? Enquanto ele
não atualiza, os gráficos ficarão desatualizados? Não haverá nem uma notificação
de que há novos dados? Bem, o padrão Observer serve para isso! Ele cria uma
dependência dos gráficos em relação à tabela de modo que, quando a tabela muda
de estado, os gráficos são atualizados automaticamente.

 State: permite a um objeto alterar o seu comportamento quando o seu estado


16712855225

interno for modifica .

Pessoal, esse padrão de projeto deve ser utilizado quando o comportamento de um


objeto depender de seu estado e ele deve mudar este comportamento em tempo
de execução de acordo com este estado. Ademais, é recomendado quando
operações tiverem declarações condicionais grandes que dependam do estado do
objeto.

Considerem a hipótese do jogo Super Mario Bros! Lembram-se de quando ele


conseguia uma flor de fogo? Se ele estivesse pequeno, ele ficava grande e pegando
fogo! Se ele estivesse grande, ele ficava pegando fogo! Se ele já estivesse pegando

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

fogo, ele ganhava 1000 pontos! Se ele tivesse com uma capa de voo, ele perdia a
capa e ficava pegando fogo!

Portanto, notem que o estado futuro depende de seu estado atual e o estado futuro
é decidido em tempo de execução, i.e., durante o jogo. O Padrão State elimina a
necessidade de condicionais complexos, tendo em vista que podem haver dezenas
ou centenas de estados possíveis. A grande vantagem é que esta solução torna mais
simples adicionar estados e suas transições.

 Strategy: define uma família de algoritmos, encapsula cada um e faz deles


intercambiáveis.

Pessoal, esse padrão de projeto deve ser utilizado quando várias classes
relacionadas diferirem apenas em seus comportamentos e que houver necessidade
de diferentes variantes de um algoritmo. Ele também é utilizado quando uma classe
definir muitos comportamentos e eles aparecerem como declarações condicionais
em suas operações.

Considerem a hipótese de uma escola querer organizar os meninos e as meninas


por ordem de idade. Há uma família de algoritmos capaz de realizar essa operação
(BubbleSort, QuickSort, Heapsort, MergeSort, etc). Uma maneira de realizar essa
operação é por meio de operadores condicionais (if-else), porém isso pode ser
muito trabalhoso em grandes quantidades.

Uma boa estratégia seria encapsular os algoritmos de ordenação, de modo que se


possa trocar de algoritmo sempre que quiser. Assim, basta chamar o método
OrdenaAluno com os parâmetros sexoAluno e algoritmoOrdenacao. Dessa forma,
é possível chamar o método ordenaAluno(menino, bubbleSort) ou
16712855225

ordenaAluno(menina, mergeSort), etc, diminuindo o acoplamento.

 Template Method: define o esqueleto de um algoritmo dentro de uma operação,


deixando alguns passos a serem preenchidos pelas subclasses.

Pessoal, esse padrão de projeto deve ser utilizado quando se deseja implementar a
parte invariante de um algoritmo e deixar que as subclasses implementem o
comportamento variável. Ele também é recomendado quando comportamentos
comuns entre subclasses forem fatorados e localizados em uma classe comum, para
evitar duplicação de código.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Considerem a hipótese de uma franquia de McDonald’s fabricando um sanduíche.


Bem, o cliente pode pedir para colocar mais queijo, tirar os picles, adicionar ketchup,
não colocar sal, entre outras opções. No entanto, observem que operações como:
abrir o pão, posicionar o hambúrguer no meio e fechar o pão são operações que
sempre irão ocorrer.

Portanto, esse esqueleto de algoritmo jamais irá mudar. Já as opções de


condimentos, verduras, etc podem ser modificadas de acordo com o gosto do
cliente. Sendo assim, a parte invariável será implementada na classe abstrata e a
parte variável será implementada pelas classes filhas de acordo com as necessidades
do usuário.

 Visitor representa uma operação a ser realizada sobre elementos de uma


estrutura de objetos e permite definir uma nova operação sem mudar as classes
dos elementos sobre os quais opera.

Pessoal, esse padrão de projeto deve ser utilizado quando muitas operações
distintas e não relacionadas precisarem ser executadas sobre uma estrutura de
objetos e se quer evitar a poluição das classes com essas operações. Ademais, são
recomendadas quando as classes que definem a estrutura do objeto raramente
forem modificadas.

Considerem a hipótese de uma compra em um supermercado. O carrinho de


compras é a estrutura de dados que contém um conjunto de elementos. Ao finalizar
a compra, deve-se passar a responsabilidade para o caixa (Visitor). A partir deste
momento, ele estará no comando, porque ele que realizará a soma dos preços,
pesará as frutas, verduras, vegetais, etc (entre outras operações).
16712855225

Portanto, algumas operações se aplicam a alguns elementos, mas não se aplicam a


outros, i.e., uma cerveja já possui um valor, mas uma maça precisa ser pesada. No
entanto, ambas fazem parte da mesma estrutura de dados. Sendo assim, o Visitor
recebe o elemento e sabe qual operação deve realizar. Ademais, se houver uma
nova operação, é mais fácil de acomodar no Visitor.

FALOU EM... ...SERÁ: FREQUÊNCIA1

1
Frequência de aparições em prova! Os mais frequentes são: Singleton, Adapter, Façade e Abstract Factory.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Criar famílias de objetos relacionados... Abstract Factory 5

Construção de um objeto complexo com diferentes Builder 4


representações...
Deixar subclasses decidirem... Factory Method 3

Criar uma instância prototípica... Prototype 2

Apenas uma instância com um ponto global a ela... Singleton 9

Converte uma interface em outra, por serem incompatíveis... Adapter 8


.
Desacoplar interface da implementação... Bridge 2

Estruturas de árvore em hierarquia parte-todo... Composite 1

Anexa responsabilidades adicionais dinamicamente... Decorator 1

Interface unificada de alto nível para simplificar outra Façade 7


complexa...
Compartilhamento para suportar grandes quantidades de Flyweight 0
objetos...
Prover substituto para controlar um objeto Proxy 1

Evitar o acoplamento dando oportunidade a outros objetos... Chain of Responsability 2

Encapsula requisição de objetos... Command 2

Representação de uma gramática... Interpreter 0

Interface única para acessar coleções sequencialmente... Iterator 4


16712855225

Encapsula a forma como objetos interagem... Mediator 1

Captura o estado interno de um objeto... Memento 1

Quando objeto mudar de estado, notifica os dependentes... Observer 3

Altera comportamentos quando modificar o estado interno... State 0

Família de algoritmos... Strategy 1

Esqueleto de algoritmos... Template Method 2

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Operação a ser realizada sobre uma estrutura de objetos... Visitor 0

Galera, vou ser bem sincero com vocês: esse assunto é chato pacas – é muito
decoreba! Então, vou explicar o que eu recomendo para o estudo dessa aula – fiz
a análise estatístico rápida e cheguei a algumas conclusões! Primeiro de tudo,
decore as frases porque cerca de 15% das questões de prova exigem apenas saber
qual Padrão de Projeto GOF pertence a qual categoria.

Vocês matam 15% das questões apenas decorando aquelas frases, bacana? Segundo,
se você estiver sem tempo, ignore a categoria comportamental, visto a distribuição
de questões segue a tabela mostrada acima. Além disso, dos 23 Padrões de Projeto,
seis correspondem à 55% das questões de prova (dos 85% restantes, i.e., sem as
questões de categorias). São eles, em ordem:

16712855225

Pessoal, se tiver com o tempo apertado, estudem apenas esses acima! Do mesmo
modo, podemos afirmar que, dos 23 Padrões de Projeto, onze correspondem à 15%
das questões de prova: Decorator, Flyweight, Proxy, Chain of Responsability,

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Interpreter, Mediator, Memento, State, Strategy e Template Method. Os seis padrões


restantes, estão no meio termo e correspondem a 30% das questões de prova.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) O padrão bridge, além de converter a interface de
uma classe existente em outra interface esperada pelos clientes, permite que
algumas classes com interfaces diferentes funcionem conjuntamente.

Comentários:

Bridge: desacopla uma interface de sua implementação, de forma que ambas possam
variar independentemente.

Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.

Converte a interface de uma classe existente em outra interface? Opa, isso é Adapter!

Gabarito: E

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) Design patterns não se aplicam, exclusivamente, ao
Java, podendo ser empregados em projetos que utilizam linguagem C#.

Comentários:
16712855225

Por fim, algumas observações importantes! Esses 23 Design Patterns somente podem
ser utilizados em projetos de tecnologia da informação? Claro, eles são padrões de
projeto de software. Esses 23 Design Patterns somente podem ser utilizados em
projetos orientados a objetos? Sim, também. Pessoal, Padrões GOF somente com OO!
Padrões de Projeto, em geral, podem usar qualquer paradigma ou linguagem!

Padrões de Projeto (Design Patterns) se aplicam a qualquer linguagem de


programação e qualquer paradigma.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - 2012 - MPE-PI - Analista Ministerial - Informática - Cargo 6) O padrão


de projeto conhecido como façade é indicado para a definição de uma interface
de nível mais alto que torne mais fácil a comunicação entre os subsistemas de
um sistema complexo.

Comentários:

Façade: oferece uma interface unificada para um conjunto de interfaces em um


subsistema, definindo uma interface de alto nível que facilita a utilização do
subsistema.

Definição de uma interface de nível mais alto que torne mais fácil a comunicação?
Opa, isso é Façade.

Gabarito: C

(CESPE - 2010 - TRT - 21ª Região (RN) - Técnico Judiciário - Tecnologia da


Informação) Os padrões de projeto podem ser definidos como soluções já
testadas para problemas que ocorrem frequentemente durante o projeto de
software.

Comentários:

E o que seriam Padrões de Projeto (do inglês, Design Patterns)? Respondo: são
descrições de objetos que se comunicam e classes que são customizadas para resolver
um problema genérico em um contexto específico. Esses padrões nomeiam, abstraem
e identificam aspectos comuns em uma estrutura e os torna úteis para que sejam
realizados. Como é isso, professor?
16712855225

Essa ficou fácil, questiona apenas a definição! É isso mesmo...

Gabarito: C

(CESPE - 2008 - STJ - Analista Judiciário - Tecnologia da Informação) Os padrões


de projeto podem ser usados no projeto orientado a objetos para apoiar o reúso
de software. Esses padrões frequentemente empregam a herança e o
polimorfismo para prover generalidade. Abstract factory, strategy e template
method são padrões de projeto que podem ser empregados nos frameworks
orientados a objetos para facilitar a adaptação dos frameworks.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Comentários:

A questão está toda correta! A única dúvida que poderia gerar seria em relação a
última parte, porém esses três padrões têm o intuito – sim – de adaptar frameworks.

Gabarito: C

(CESPE - 2008 - -DF - Analista Judiciário - Tecnologia da Informação) O padrão


de projeto orientado a objetos denominado singleton exprime o fenômeno
recorrente na análise que é a existência de muitas aplicações nas quais há um
objeto que é a única instância de sua classe.

Comentários:

Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.

Um objeto que é a única instância de sua classe? Opa, isso é Singleton!

Gabarito: C

(CESPE - - ANAC - Técnico Administrativo - Informática) O uso de padrões


de projeto somente pode ser aplicado a projetos que implementam o paradigma
de programação orientada a objetos.

Comentários:

Por fim, algumas observações importantes! Esses 23 Design Patterns somente podem
ser utilizados em projetos de tecnologia da informação? Claro, eles são padrões de
16712855225

projeto de software. Esses 23 Design Patterns somente podem ser utilizados em


projetos orientados a objetos? Sim, também. Pessoal, Padrões GOF somente com OO!
Padrões de Projeto, em geral, podem usar qualquer paradigma ou linguagem!

Pessoal, não caiam nessa pegadinha! Padrões GOF somente podem ser aplicados a
projetos orientados a objetos. No entanto, Padrões de Projeto (sem especificar
quais) podem ser usados com qualquer paradigma.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - 2008 - SERPRO - Analista - Desenvolvimento de Sistemas) Adapter é


um padrão estrutural utilizado para compatibilizar interfaces de modo que elas
possam interagir.

Comentários:

Estrutural? Lembrem-se do mnemônico: “A Ponte Adaptada (...)”, portanto é


estrutural. Compatibilizar interfaces de modo que elas possam interagir? Opa, isso é
Adapter! Logo, a questão está toda correta.

Gabarito: C

(CESPE - 2008 - SERPRO - Analista - Desenvolvimento de Sistemas) O Singleton


é um padrão que garante que uma classe tenha apenas uma instância.
16712855225

Comentários:

Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.

Classe com apenas uma instância? Opa, isso é Singleton!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

10. (CESPE - - SERPRO - Analista - Desenvolvimento de Sistemas) Alguns


padrões de criação como o Prototype, o Proxy e o Façade não são adequados
para a programação orientada a objetos.

Comentários:

Como é? Não faz nenhum sentido! Questão errada!

Gabarito: E

11. (CESPE - - TCU - Analista de Controle Externo - Tecnologia da Informação


- Prova 2) Caso seja verificado no desenvolvimento de um sistema forte
acoplamento entre as classes, recomenda-se o uso do padrão de
comportamento Factory Method, que evita o acoplamento do remetente de uma
solicitação ao seu receptor, dando a mais de um objeto a oportunidade de tratar
uma solicitação, mesmo nos casos em que o conjunto de objetos não seja
conhecido a priori ou seja definido dinamicamente.

Comentários:

16712855225

Padrão de Comportamento Factory Method? Espera aí: “A fábrica abstrata constrói


(...)”. Opa, Factory Method é um padrão criacional! Ademais, a descrição se trata do
padrão Chain of Responsability!

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

12. (CESPE - - TCU - Analista de Controle Externo - cnologia da Informação


- Prova 2) No desenvolvimento de um sistema estruturado em subsistemas para
facilitar o acesso e minimizar a comunicação e dependências entre os
subsistemas, o padrão de criação Factory Method, que fornece uma interface
para a criação de famílias de objetos relacionados ou dependentes sem
especificar suas classes concretas, é mais indicado que o padrão de criação
Prototype.

Comentários:

Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.

Factory Method: define uma interface para criar um objeto, mas deixa as subclasses
decidirem qual classe instanciar.

Fornece uma interface para a criação de famílias de objetos? Opa, isso é Abstract
Factory - não confundam com Factory Method! Um aluno já me perguntou sobre o
início da questão, mas cuidado: no início, fala-se de um sistema estruturado, mas
isso nada tem a ver com paradigma estruturado – é estruturado, no sentido de
organizado.

Gabarito: E

13. (CESPE - - TCU - Analista de Controle Externo - Tecnologia da Informação


- Prova 2) Se, no desenvolvimento de uma aplicação que leia documentos do
tipo txt e seja capaz de converter o documento em vários formatos distintos,
houver a necessidade de facilitar acréscimos de novos tipos de conversão, será
mais indicado o uso do padrão de estrutura Adapter que o uso do padrão de
16712855225

estrutura Bridge, pois o padrão Adapter separa a construção de um objeto


complexo de sua representação para criar representações diferentes com o
mesmo processo.

Comentários:

Builder: separa a construção de um objeto complexo da sua representação, de forma


que o mesmo processo de construção possa criar diferentes tipos de representações.

Separa a construção de um objeto complexo de sua representação? Opa, isso é


Builder!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Gabarito: E

14. (CESPE - 2013 - ANTT - Desenvolvimento de Sistemas) Em programação


orientada a objetos, o padrão de projeto denominado Iterator define uma forma
de acesso sequencial aos elementos de um objeto agregado, sem expor sua
representação interna.

Comentários:

Iterator: fornece uma maneira de acessar elementos de um objeto agregado


sequencialmente sem expor sua representação interna.

Acesso sequencial aos elementos de um objeto agregado? Opa, isso é Iterator!

Gabarito: C

15. (CESPE - 2013 - ANTT - Desenvolvimento de Sistemas) Em programação


orientada a objetos, o padrão de projeto denominado Singleton define uma
classe que possui apenas uma instância e provê um ponto de acesso local a ela.

Comentários:

Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.

Classe que possui apenas uma instância? Opa, isso é Singleton! No entanto, ele diz
que é um ponto de acesso local! Opa... não, é um ponto de acesso global!
16712855225

Gabarito: E

16. (CESPE - 2013 – TCO/RO - Analista de Informática – Desenvolvimento de


Sistemas) Uma das aplicabilidades do padrão Iterator é a representação de
hierarquias do tipo todo-parte de objetos, de modo que a aplicação seja capaz
de ignorar a diferença entre composições de objetos e objetos individuais, haja
vista que todos os objetos tratados no padrão têm comportamento uniforme.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Composite: compõe objetos em estruturas de árvore para representar hierarquias


parte-todo, permitindo aos clientes tratarem objetos individuais e composições de
objetos uniformemente.

Iterator: fornece uma maneira de acessar elementos de um objeto agregado


sequencialmente sem expor sua representação interna.

Representação de hierarquias do tipo todo-parte? Comportamento uniforme? Opa,


isso é Composite!

Gabarito: E

17. (CESPE - 2013 – TCO/RO - Analista de Informática – Desenvolvimento de


Sistemas) O padrão Adapter será mais apropriado que o Façade quando for
necessário fornecer uma interface unificada para um conjunto de interfaces em
um subsistema.

Comentários:

Façade: oferece uma interface unificada para um conjunto de interfaces em um


subsistema, definindo uma interface de alto nível que facilita a utilização do
subsistema.

Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.

Interface unificada para um conjunto de interfaces em um subsistema? Opa, isso é


Façade, logo ele é mais indicado!
16712855225

Gabarito: E

18. (CESPE - 2013 – TCO/RO - Analista de Informática – Desenvolvimento de


Sistemas) O uso do padrão Builder tem a vantagem de permitir acesso
controlado à instância de uma classe, uma vez que ele encapsula a classe,
criando um ponto global único de acesso.

Comentários:

Builder: separa a construção de um objeto complexo da sua representação, de forma


que o mesmo processo de construção possa criar diferentes tipos de representações.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.

Ponto global único de acesso? Opa, isso é Singleton!

Gabarito: E

19. (CESPE - 2013 – TCO/RO - Analista de Informática – Desenvolvimento de


Sistemas) Os padrões estruturais, tais como o Bridge e o Proxy, abstraem o
processo de instanciação, ajudando a tornar um sistema independente de como
os seus objetos são criados. Já os padrões de criação, como Prototype e o
Builder, se preocupam com a forma como as classes e os objetos são criados
para formar estruturas compostas maiores.

Comentários:

Os Padrões Criacionais abstraem o processo de criação de objetos a partir da


instanciação de classes. Já os Padrões Estruturais tratam da forma como classes e
objetos estão organizados para formar estruturas maiores. Por fim, Padrões
Comportamentais se preocupam com os algoritmos e responsabilidades dos objetos,
que ocorrem em tempo de execução.

A questão inverteu os conceitos! Os padrões estruturais tratam da forma como as


classes e objetos são organizados (a banca usou o termo “criados”, que não é o
mais correto) para formar estruturas maiores e os padrões criacionais abstraem o
processo de instanciação.

16712855225

Gabarito: E

(CESPE - 2012 - BASA - Tecnologia da Informação – Técnico Científico) O padrão


mediator define um objeto que encapsula como um conjunto de objetos
interage. Esse padrão torna desnecessário que cada objeto armazene referências
para todos os objetos com os quais interage e pode ser usado quando objetos
se comunicam de forma definida, mas complexa.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Mediator: define um objeto que encapsula a forma como um conjunto de objetos


interagem, promovendo um fraco acoplamento ao evitar que objetos se refiram aos
outros explicitamente.

Encapsula a forma como um conjunto de objetos interagem? Opa, isso é Mediator!


O restante da descrição também está certo.

Gabarito: C

21. (CESPE - 2012 - BASA - Tecnologia da Informação – Técnico Científico) O padrão


adapter define uma família de algoritmos, permite o encapsulamento de
algoritmos e possibilita a substituição desses algoritmos. Os algoritmos podem
variar independentemente dos seus clientes. Esse padrão pode ser usado
quando várias classes relacionadas diferirem apenas nos seus comportamentos.

Comentários:

Strategy: define uma família de algoritmos, encapsula cada um e faz deles


intercambiáveis.

Família de algoritmos? Opa, isso é Strategy!

Gabarito: E

(CESPE - - TCE-RN – Assessor Técnico de Informática) O template method


se aplica primariamente às classes, sendo um padrão de projeto com finalidade
comportamental, ou seja, caracterizado pela maneira como as classes interagem
e distribuem responsabilidades.
16712855225

Comentários:

Template Method: define o esqueleto de um algoritmo dentro de uma operação,


deixando alguns passos a serem preenchidos pelas subclasses.

Questão perfeita! Alguns métodos se aplicam primariamente às classes, como:


Template Method, Interpreter, Adapter e Factory Method. O restante se aplica
primariamente a objetos.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - 2010 – TRT/RN – Técnico Judiciário – Tecnologia da Informação) Os


padrões de projeto podem ser definidos como soluções já testadas para
problemas que ocorrem frequentemente durante o projeto de software.

Comentários:

E o que seriam Padrões de Projeto (do inglês, Design Patterns)? Respondo: são
descrições de objetos que se comunicam e classes que são customizadas para resolver
um problema genérico em um contexto específico. Esses padrões nomeiam, abstraem
e identificam aspectos comuns em uma estrutura e os torna úteis para que sejam
realizados. Como é isso, professor?
Apenas a definição! Fácil, fácil, né?!

Gabarito: C

24. (CESPE - 2007 - TST - Analista Judiciário – Análise de Sistemas) Um dos


mecanismos da orientação a objetos para reutilização de software é a
identificação e documentação de padrões de projeto (design patterns), que são
modelos particulares de classes e de objetos comunicantes que se repetem de
um projeto para outro e que podem assim ser padronizados.

Comentários:

E o que seriam Padrões de Projeto (do inglês, Design Patterns)? Respondo: são
descrições de objetos que se comunicam e classes que são customizadas para resolver
um problema genérico em um contexto específico. Esses padrões nomeiam, abstraem
e identificam aspectos comuns em uma estrutura e os torna úteis para que sejam
realizados. Como é isso, professor?
16712855225

Definição de Design Pattern!

Gabarito: C

(CESPE - 2006 – DATAPREV - Analista de Sistemas) As seguintes situações


justificam o uso do padrão Abstract Factory: o sistema deve ser independente
de como os objetos são criados; o sistema deve poder ser configurado com
diferentes famílias de classes; é necessário garantir que certas classes sejam
usadas em conjunto.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.

Família de classes/objetos? Opa, Abstract Factory!

Gabarito: C

(CESPE - 2006 – DATAPREV - Analista de Sistemas) As seguintes situações


justificam o uso do padrão Adapter: é necessário um objeto local que se faça
passar por um objeto localizado em outro espaço de endereçamento; é
necessário controlar o acesso a um objeto; um objeto persistente deve ser
carregado em memória somente quando for referenciado.

Comentários:

Proxy: provê um substituto ou ponto através do qual um objeto pode controlar o


acesso a outro objeto.

Controlar o acesso a um objeto? Proxy!

Gabarito: E

27. (CESPE - 2006 – DATAPREV - Analista de Sistemas) As seguintes situações


justificam o uso do padrão Command: um conjunto de objetos se comunica de
forma definida porém complexa, o que resulta em interdependências difíceis de
serem entendidas; o reúso está sendo dificultado pois cada objeto se comunica
com vários outros objetos.
16712855225

Comentários:

Mediator: define um objeto que encapsula a forma como um conjunto de objetos


interagem, promovendo um fraco acoplamento ao evitar que objetos se refiram aos
outros explicitamente. Pessoal, esse padrão de projeto deve ser utilizado quando um
conjunto de objetos se comunicar de maneira bem definida, porém complexa e
quando o reúso de um objeto for difícil por referenciar e se comunicar com muitos
outros objetos.

Forma bem definida, porém complexa? Mediator!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Gabarito: E

(CESPE - 2006 – DATAPREV - Analista de Sistemas) As seguintes situações


justificam o uso do padrão Strategy: é necessário configurar uma classe com uma
variedade de comportamentos; uma classe usa diferentes variações de um
algoritmo; o método de uma classe tem muitos enunciados condicionais pois a
classe tem comportamentos variados.

Comentários:

Strategy: define uma família de algoritmos, encapsula cada um e faz deles


intercambiáveis. Ele também é utilizado quando uma classe definir muitos
comportamentos e eles aparecerem como declarações condicionais em suas
operações.

Variações de algoritmo? Strategy!

Gabarito: C

(CESPE - – DATAPREV - Analista de Sistemas) Quanto aos padrões de


projeto orientados a objetos, assinale a opção correta.

a) O Facade pode ser usado quando se deseja prover uma interface simples para
um subsistema complexo; existem muitas dependências entre clientes e as
classes que implementam uma abstração.

b) Pode-se usar o Decorator quando um sistema deve ser configurado com uma
entre várias famílias de produtos; uma família de produtos relacionados foi
projetada para ser usada em conjunto.
16712855225

c) O Adapter pode ser usado quando objetos se comunicam de forma definida,


mas complexa; as interdependências entre os objetos são difíceis de entender; o
reúso está sendo dificultado, pois um objeto se comunica com vários outros.

d) Pode-se usar o Builder quando o comportamento de um objeto muda em


tempo de execução e depende do seu estado; as operações têm múltiplos
enunciados condicionais que dependem do estado do objeto.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Pessoal, esse padrão de projeto deve ser utilizado quando se desejar fornecer uma
interface simples para um subsistema complexo ou quando se quer dividir em
camadas os subsistemas. É também utilizando quando há muitas dependências entre
clientes e as classes de implementação de uma abstração.

Conforme visto em aula, trata-se do Façade. A letra B (Abstract Factory); a Letra C


(Mediator); a Letra D (State).

Gabarito: A
(CESPE - 1– - Analista de Sistemas) O padrão Singleton garante que
uma classe tenha somente uma instância, fornecendo, assim, um ponto global
de acesso a essa instância.

Comentários:

Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.

Conforme visto em aula, está perfeito!

Gabarito: C

31. (CESPE - 2011 – MEC - Analista de Sistemas) O padrão Prototype pode ser usado
no desenvolvimento de programas escritos com a linguagem PHP 5.0, atuando
como padrão estrutural que permite construir tanto classes quanto objetos.

Comentários:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Conforme visto em aula, trata-se de um padrão criacional e, não, estrutural.

Gabarito: E

(CESPE - 2011 – MEC - alista de Sistemas) Os padrões de projeto são úteis


tanto na fase de planejamento da arquitetura quanto na de desenvolvimento e
codificação.

Comentários:

Perfeito! Ele é útil na fase de planejamento (Padrão de Projeto), mas também é útil
na fase de codificação.

Gabarito: C
16712855225

(CESPE - 2011 – MEC - Analista de Sistemas) O padrão Abstract Factory é


corretamente aplicável, quando necessário, para fornecer uma biblioteca de
classes e não revelar suas interfaces.

Comentários:

Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

A questão está errada, porque deve-se revelar apenas suas interfaces e, não, suas
classes concretas. Não sei se não entraram com recurso ou se a banca não quis
trocar o gabarito, mas no gabarito oficial veio como verdadeiro.

Gabarito: C

34. (CESPE - 2013 – MPOG - Analista de Sistemas) O padrão de comportamento e


encadeamento de atendentes (chain of responsibility) evita acoplamento entre
solicitantes e atendentes, permitindo que mais de um objeto tenha chance de
tratar a solicitação.

Comentários:

Chain of Responsability: evita o acoplamento do remetente de uma requisição ao seu


receptor ao dar a mais de um objeto a chance de lidar com a requisição.

Evita o acoplamento entre solicitantes e atendentes? É Chain of Responsability!

Gabarito: C

(CESPE - 2013 – MPOG - Analista de Sistemas) Para um problema recorrente no


desenvolvimento de sistemas, normalmente, um padrão de projeto descreve
uma solução geral, que não pode ser reutilizada.
Comentários:

E o que seriam Padrões de Projeto (do inglês, Design Patterns)? Respondo: são
descrições de objetos que se comunicam e classes que são customizadas para resolver
um problema genérico em um contexto específico. Esses padrões nomeiam, abstraem
e identificam aspectos comuns em uma estrutura e os torna úteis para que sejam
16712855225

realizados. Como é isso, professor?

Conforme visto em aula, são soluções gerais para problemas recorrentes e,


portanto, podem ser reutilizadas.

Gabarito: E

(CESPE - 2013 – MPOG - Analista de Sistemas) Padrões de projeto envolvem


combinações de classes e algoritmos associados que cumprem com propósitos
comuns de projeto.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Comentários:

E o que seriam Padrões de Projeto (do inglês, Design Patterns)? Respondo: são
descrições de objetos que se comunicam e classes que são customizadas para resolver
um problema genérico em um contexto específico. Esses padrões nomeiam, abstraem
e identificam aspectos comuns em uma estrutura e os torna úteis para que sejam
realizados. Como é isso, professor?

Conforme visto em aula, eles resolvem problemas comuns ou recorrentes.

Gabarito: C

37. (CESPE – 2008 – STF - Analista de Sistemas) A figura acima, adaptada de


java.sun.com, ilustra a arquitetura de uma aplicação web desenvolvida na
plataforma J2EE, tendo sido alguns de seus módulos nomeados de A até I.
Considere que uma aplicação com a arquitetura mostrada tenha sido instalada
em um servidor de aplicação JBoss 4.0 ou superior, por meio do deploy de um
arquivo com nome aplicação.war, e se encontrem pleno funcionamento.
Conforme a nomenclatura proposta pelo GoF (Gang of Four) book, o nome dado
ao módulo F sugere que esse módulo implementa um padrão da categoria
comportamental, enquanto o nome do módulo C sugere que ele implementa
um padrão da categoria estrutural.

Comentários:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Pessoal, F é Command! Command é comportamental? Sim. C é Composite!


Composite é estrutural? Sim.

Gabarito: C

(CESPE - – TCU - Analista de Sistemas Nos padrões de projeto (design


patterns) estruturais, utilizam-se técnicas que valorizam um forte acoplamento
entre as classes para favorecer o aprendizado e a portabilidade das aplicações.

Comentários:

BENEFÍCIOS E VANTAGENS DOS PADRÕES DE PROJETO

Utilizam polimorfismo, herança, modularidade, composição, abstração para construir código reutilizável,
eficiente, de alta coesão e baixo acoplamento.

Conforme vimos em aula, valoriza-se o fraco/baixo acoplamento.

Gabarito: E

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(FCC - 2011 - TCE-PR - Analista de Controle – Informática - A) Os design patterns:

a) são projetos de arquitetura para um domínio específico de aplicação e sempre


trazem componentes predefinidos que envolvem código de programação.

b) consistem em conjuntos de classes que um usuário instancia para utilizar seus


métodos. Após a chamada ao método, o controle do fluxo da aplicação retorna
para o usuário.

c) são de uso exclusivo em processos de desenvolvimento de soluções orientado


a objetos, já que os objetos são a mais adequada abstração para o reúso.

d) são aplicações propriamente ditas, normalmente construídas pela integração


de diversos frameworks.

e) podem ser modelados utilizando-se a linguagem UML que fornece um meio


eficiente de modelar padrões de projeto representando-os como colaborações.

Comentários:

a) Domínio específico? Não, trata-se de domínio genérico! Sempre trazem código?


Também não!
16712855225

b) Design Patterns não consistem em conjuntos de classes! Aliás, quem falou em


orientação a objetos? A questão se refere a Design Patterns em geral.

c) Galera, lembrem-se de que Padrões de Projeto (GOF) são orientados a objetos,


mas a questão não especificou – ela disse bem genericamente.

d) Aplicações, não! São modelos, descrições, etc. Galera, padrões de projeto são
muito mais abstratos do que aplicações.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

e) Perfeito, pode-se utilizar a Linguagem UML. Ademais, é possível representá-los


de diversas maneiras, inclusive com colaborações.

Gabarito: E

(FCC - 2010 - TRF - 4ª REGIÃO - Analista Judiciário - Tecnologia da Informação)


Sobre os design patterns, é correto afirmar:

a) Padrões e linguagens de padrões são maneiras de implementar sistemas


orientados a objetos por meio da captação da experiência de programadores.
Os padrões, apesar de abstratos, sempre incluem algum código de
programação.

b) São aplicações, propriamente ditas, dedicadas aos domínios de aplicações


específicos, tais como sistemas de telecomunicações ou financeiros.

c) Não são complexos e necessita-se de um tempo mínimo para aprender a usá-


los.

d) O princípio geral de englobamento de experiência em um padrão é aplicável


apenas à abordagem de projeto de software orientado a objetos.

e) O padrão é uma descrição de conhecimento e experiência acumulados, uma


solução comprovada para um problema comum.

Comentários:

a) Sempre incluem algum código de programação? Não!


16712855225

b) Padrões de Projeto não são aplicações propriamente ditas.

c) Afirmar que não são complexos é perigoso! Há padrões bastante complicados.

d) De novo, não! Padrões de Projeto não se limitam a orientação a objetos.

e) É isso mesmo! Questão perfeita!

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(FCC - - -PI - Analista Judiciário - Tecnologia da Informação) Os padrões


de projeto, quando aplicados ao desenvolvimento de aplicações, fornecem meios
de descrever soluções comuns para problemas comuns, resultando em redução
de tempo gasto com o desenvolvimento e melhoria da qualidade da aplicação.

Analise:

I. É o responsável pela especificação dos tipos de objetos a serem criados usando


uma "instância" prototípica e pela criação de novos objetos copiando este protótipo.

II. Define uma interface de nível mais alto que torna o subsistema mais fácil de usar
e fornece uma interface única para um subsistema com diversas interfaces; compõe
o grupo de padrões estruturais.

III. Integrante do grupo de padrões comportamentais, ele provê uma forma de


acessar sequencialmente os elementos de um agregado de objetos, sem expor a
representação interna desse agregado.

IV. As consequências do uso deste padrão é que o encapsulamento é mantido, já


que objetos usam sua própria informação para cumprir responsabilidades; leva ao
fraco acoplamento entre objetos e à alta coesão, uma vez que objetos fazem tudo
que é relacionado à sua própria informação.

As afirmações correspondem, respectivamente, aos padrões

a) Command, Iterator, Singleton e Expert.


b) Controller, Expert, Singleton e Prototype.
c) Command, Singleton, Controller e Façade.
d) Prototype, Façade, Iterator e Expert.
16712855225

e) Adapter, Façade, Command e Iterator.

Comentários:

Prototype: especifica os tipos de objetos para criar usando uma instância como
protótipo e cria novos objetos copiando este protótipo.

(I) Instância prototípica? Prototype!

Façade: oferece uma interface unificada para um conjunto de interfaces em um


subsistema, definindo uma interface de alto nível que facilita o uso do subsistema.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(II) Interface de nível mais alto? Façade.

Iterator: fornece uma maneira de acessar elementos de um objeto agregado


sequencialmente sem expor sua representação interna.

(III) Provê forma de acessar sequencialmente? Iterator.

(IV) Expert? Isso é Padrão GRASP e, não, GOF (é outro assunto!).

Gabarito: D

(FCC - 2009 - -PI - Analista Judiciário - Tecnologia da Informação) Acerca


desses padrões, avalie:

I. Em termos de padrões de criação de projetos, algumas classes, tais como um


spooler de impressão ou um sistema de arquivos, devem ser instanciadas uma
única vez e prover um ponto de acesso global a esta instância.

II. Pertencente ao grupo de padrões estruturais, é utilizado para permitir que


dois objetos se comuniquem mesmo que tenham interfaces incompatíveis.

III. Encapsula uma requisição como um objeto, permitindo que os clientes


parametrizem diferentes requisições e filas, ou façam o registro de log de
requisições e dêem suporte a operações que podem ser desfeitas.

IV. Atribuir a responsabilidade do tratamento de um evento do sistema a uma


classe que representa o próprio sistema ou à classe que representa um caso de
uso. 16712855225

As proposições correspondem, respectivamente, aos padrões

a) Singleton, Adapter, Command e Controller.


b) Command, Iterator, Singleton e Expert.
c) Façade, Iterator, Expert e Adapter.
d) Controller, Expert, Singleton e Prototype.
e) Adapter, Façade, Command e Iterator.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.

(I) Ponto de acesso global? Singleton.

Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.

(II) Interfaces incompatíveis? Adapter.

Command: encapsula a requisição de um objeto, portanto permitindo que se


parametrize os clientes com diferentes requisições.

(III) Encapsula requisição como um objeto? Command.

(IV) Controller? Isso é Padrão GRASP e, não, GOF (é outro assunto!).

Gabarito: A

(FCC - 2011 - TRT - 24ª REGIÃO (MS) - Analista Judiciário - Tecnologia da


Informação) Considere:

I. Fornecer uma interface para criação de famílias de objetos relacionados ou


dependentes, sem especificar suas classes concretas. Possibilitar o adiamento da
instanciação para as subclasses.

II. Garantir a existência de apenas uma instância de uma classe, mantendo um


ponto global de acesso ao seu objeto.
16712855225

III. Possibilitar o armazenamento do estado interno de um objeto em um


determinado momento, para que seja possível retorná-lo a este estado, caso
necessário.

I, II e III são, respectivamente, objetivos dos Design Patterns intitulados:

a) Interpreter, Iterator e Memento.


b) Command, Singleton e Iterator.
c) Factory Method, Singleton e Memento.
d) Iterator, Factory Method e Flyweight.
e) Singleton, Flyweight e Command.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Comentários:

Factory Method: define uma interface para criar um objeto, mas deixa as subclasses
decidirem qual classe instanciar.

(I) Na minha opinião, houve confusão da FCC! Factory Method fornece uma
interface para criar um objeto, possibilitando o adiamento da instanciação para as
subclasses. Já o Abstract Factory fornece uma interface para criar uma família de
objetos, relacionados ou dependentes, sem especificar suas classes concretas. Ou
seja, a FCC misturou ambas as definições, no entanto considerou como Factory
Method;

Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.

(II) Ponto global de acesso? Ficou fácil: Singleton;

Memento: captura e externaliza o estado interno de um objeto, sem violar seu


encapsulamento, de maneira que o objeto possa ser restaurado posteriormente.

(III) Armazenar estado interno de um objeto para retornar, se necessário? Ficou fácil:
Memento.

Gabarito: C

(FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas) Na


engenharia de software, os padrões de projetos comportamentais tratam das
interações e divisões de responsabilidades entre as classes ou objetos. São
16712855225

exemplos típicos dessa família:

a) Command, Factory Method e Prototype.


b) Builder, Prototype e Singleton.
c) Chain of Responsability, Interpreter e Iterator.
d) Adapter, Bridge e Façade.
e) Abstract Factory, Builder e Composite.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(a) Factory Method e Prototype são Criacionais;


(b) Todos são Criacionais;
(c) Todos são Comportamentais;
(d) Todos são Estruturais;
(e) Todos são Criacionais.

Gabarito: C

(FCC - 2011 - TRT - 4ª REGIÃO (RS) - Analista Judiciário - Tecnologia da


Informação) O catálogo de padrões de projeto (Design Patterns) do GoF contém:

a) 20 padrões e está basicamente dividido em duas seções: Structural e


Behavioral.
b) 21 padrões e está basicamente dividido em duas seções: Creational e
Behavioral. 16712855225

c) 23 padrões e está basicamente dividido em duas seções: Structural e


Behavioral.
d) 23 padrões e está, basicamente, dividido em três seções: Creational, Structural
e Behavioral.
e) 24 padrões e está basicamente dividido em três seções: Creational, Spectral
e Behavioral.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

23 Padrões de Projeto, dividido em Criacional, Estrutural e Comportamental.

Gabarito: D

(FCC - 2011 - TRT - 14ª Região (RO e AC) - Analista Judiciário - Tecnologia da
Informação) No contexto dos padrões de projeto:

I. Oferecer uma interface simples para uma coleção de classes.


II. Desacoplar uma abstração de sua implementação para que ambas possam
variar independentemente.

Correspondem respectivamente a:

a) Façade e Bridge.
b) Adapter e Façade. 16712855225

c) Composite e Bridge.
d) Façade e Composite.
e) Bridge e Adapter.

Comentários:

Façade: oferece uma interface unificada para um conjunto de interfaces em um


subsistema, definindo uma interface de alto nível que facilita o uso do subsistema.

Bridge: desacopla uma interface de sua implementação, de forma que ambas possam
variar independentemente.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Quem oferece uma interface simples para uma coleção de classes é o Façade e
quem desacopla uma abstração de sua implementação para que ambas possam
várias independentemente é o Bridge.

Gabarito: A

(FCC - - Infraero - Analista de Sistemas As associações entre classes e


objetos são tratadas pelos Padrões de Projeto de Software (Design Patterns) da
família de Padrões:

a) GoF Estruturais.
b) GRASP Comportamentais.
c) GRASP Estruturais.
d) GoF de Criação.
e) GoF Comportamentais.

Comentários:

Os Padrões Criacionais abstraem o processo de criação de objetos a partir da


instanciação de classes. Já os Padrões Estruturais tratam da forma como classes e
objetos estão organizados para formar estruturas maiores. Por fim, Padrões
Comportamentais se preocupam com os algoritmos e responsabilidades dos objetos,
que ocorrem em tempo de execução.

Conforme vimos em aula, a associação entre classes e objetos é tratada por Padrões
GoF Estruturais.

16712855225

Gabarit A

10. (FCC - 2013 – DPE/SP - Analista de Sistemas) Um design pattern descreve uma
solução geral comprovada e reutilizável para um problema recorrente no
desenvolvimento de sistemas de software orientados a objetos. Padrões de
projeto ajudam a reconhecer e implementar boas soluções para problemas
comuns. Dois dos principais design patterns utilizados atualmente são descritos
a seguir:

I. Visa garantir que uma classe só tenha uma única instância e prover um ponto
de acesso global a ela.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

II. Visa definir uma dependência um-para-muitos entre objetos para que quando
um objeto mudar de estado os seus dependentes sejam notificados e atualizados
automaticamente.

Os design patterns descritos em I e II são, respectivamente:

a) Singleton e Observer.
b) Facade e Adapter.
c) Composite e Adapter.
d) Singleton e Command.
e) Facade e Observer.

Comentários:

Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.

(I) Ponto de acesso global? Singleton!

Observer: define uma dependência um-para-muitos entre objetos para que, quando
um objeto mudar de estado, os seus dependentes sejam notificados e atualizados
automaticamente.

(II) Dependentes notificados automaticamente? Observer.

Gabarito: A

11. (FCC - 2013 – TRT/15 - Analista de Sistemas) Os padrões Gang of Four (GoF)
organizam um conjunto de padrões de projeto (design patterns) em três grupos:
16712855225

de criação, estruturais e comportamentais. Três destes padrões são descritos a


seguir:

I. Em situações em que classes precisam trabalhar juntas, mas isto não está sendo
possível porque suas interfaces são incompatíveis, pode-se utilizar este design
pattern que permite converter a interface de uma classe em outra interface
esperada pelos clientes de forma que classes com interfaces incompatíveis
possam interagir.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

II. Este design pattern pode ser utilizado quando se deseja definir uma
dependência um-para-muitos entre objetos de modo que quando um objeto
muda o estado, todos seus dependentes são notificados e atualizados.

III. Em situações em que se deseja acessar o conteúdo de uma coleção sem expor
sua representação interna utiliza-se este design pattern que permite prover uma
interface única para varrer coleções diferentes.

Os padrões descritos nos itens I, II e III são, respectivamente,

a) Adapter, Facade e Strategy.


b) Prototype, Composite e Command.
c) Abstract Factory, Observer e Iterator.
d) Adapter, Observer e Iterator.
e) Abstract Factory, Composite e Command.

Comentários:

Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.

(I) Interfaces incompatíveis? Adapter!

Observer: define uma dependência um-para-muitos entre objetos para que, quando
um objeto mudar de estado, os seus dependentes sejam notificados e atualizados
automaticamente.

(II) Quando um objeto muda o estado, todos os seus dependentes são notificados e
atualizados? Observer! 16712855225

Iterator: fornece uma maneira de acessar elementos de um objeto agregado


sequencialmente sem expor sua representação interna.

(III) Deseja acessar o conteúdo de uma coleção? Iterator.

Gabarito: D

12. (FCC – 2013 – AL/RN– Analista de Sistemas Analise as seguintes afirmações:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

I. Fornece uma interface para a criação de uma família de objetos relacionados


ou dependentes sem fornecer os detalhes de implementação das classes
concretas.

II. Converte uma interface de uma classe existente em outra interface esperada
pelos clientes. Permite que algumas classes com interfaces diferentes trabalhem
em conjunto.

III. Separa uma implementação de sua abstração, de forma que ambas possam
variar independentemente.

IV. Separa a construção de um objeto complexo de sua representação, de modo


que o mesmo processo possa criar representações diferentes.

Tratam, respectivamente, dos design patterns:

a) Builder − Adapter − Bridge − Abstract Factory.


b) Abstract Factory − Adapter − Bridge − Builder.
c) Bridge − Adapter − Builder − Abstract Factory.
d) Adapter − Builder − Abstract Factory − Bridge.
e) Builder − Bridge − Abs tract Factory − Adapter.

Comentários:

Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.

(I) Conforme visto em aula, trata-se do Abstract Factory.


16712855225

Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.

(II) Conforme visto em aula, trata-se do Adapter.

Bridge: desacopla uma interface de sua implementação, de forma que ambas possam
variar independentemente.

(III) Conforme visto em aula, trata-se do Bridge.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Builder: separa a construção de um objeto complexo da sua representação, de forma


que o mesmo processo de construção possa criar diferentes tipos de representações.

(IV) Conforme visto em aula, trata-se do Builder.

Gabarito: B

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(ESAF - 2005 – AFRFB - Analista de Sistemas) Analise as seguintes afirmações


relacionadas a padrões de projetos:

I. O padrão Builder separa a construção de um objeto complexo de sua


representação, de modo a que o mesmo processo de construção possa criar
diferentes representações.

II. O método Abstract Factory fornece uma interface para a criação de uma
família de objetos relacionados ou dependentes sem especificar suas classes
completas.

III. O padrão Bridge define uma interface para criar um objeto, mas deixa as
subclasses decidirem que classe será instanciada. O Bridge permite a uma classe
postergar a instanciação das subclasses.

IV. O Chain of responsability usa compartilhamento para suportar grandes


quantidades de objetos e define uma dependência um-para-muitos entre
objetos, de modo que quando um objeto muda de estado, todos os seus
dependentes são automaticamente notificados e atualizados.

Indique a opção que contenha todas as afirmações verdadeiras.


16712855225

a) I e III.
b) II e III.
c) III e IV.
d) I e II.
e) II e IV.

Comentários:

Builder: separa a construção de um objeto complexo da sua representação, de forma


que o mesmo processo de construção possa criar diferentes tipos de representações.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(I) Contrução de um objeto complexo? Builder!

Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.

(II) Interface para a criação de uma família de objetos relacionados? Abstract Factory!
Observem que ele diz completa, em vez de concreta! Nesse contexto, os termos
são sinônimos, i.e., a classe concreta é completa, na medida em que contém todas
as implementações de seus métodos, por outro lado uma classe abstrata seria
incompleta.

Factory Method: define uma interface para criar um objeto, mas deixa as subclasses
decidirem qual classe instanciar.

(III) Interface para criar objeto deixando a decisão para subclasses? Factory Method!

Flyweight: usa compartilhamento para suportar eficientemente grandes quantidades


de objetos de baixa granularidade.

Observer: define uma dependência um-para-muitos entre objetos para que, quando
um objeto mudar de estado, os seus dependentes sejam notificados e atualizados
automaticamente.

(IV) A questão misturou Flyweight com Observer.

Gabarito: D

(ESAF – 2008 – CGU - Analista de Sistemas) Ao longo das últimas décadas, a


engenharia de software fez progressos significativos no campo de padrões de
16712855225

projeto – arquiteturas comprovadas para construir software orientado a objetos


flexível e fácil de manter. Com relação ao padrão Facade, é correto afirmar que:

a) Fornece um objeto representante ou um marcador de outro objeto para


controlar o acesso ao mesmo.
b) Define o esqueleto de um algoritmo em uma operação, postergando a
definição de alguns passos para subclasses.
c) Define uma interface para criar um objeto, mas deixas as subclasses decidirem
qual classe a ser instanciada.
d) Fornece uma interface unificada para um conjunto de interfaces em um
sistema.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

e) Define uma dependência “um para muitos” entre objetos, de modo que,
quando um objeto muda de estado, todos os seus dependentes são
automaticamente notificados e atualizados.

Comentários:

Proxy: provê um substituto ou ponto através do qual um objeto pode controlar o


acesso a outro objeto.

(a) Conforme vimos em aula, trata-se do Proxy.

Template Method: define o esqueleto de um algoritmo dentro de uma operação,


deixando alguns passos a serem preenchidos pelas subclasses.

(b) Conforme vimos em aula, trata-se do Template Method.

Factory Method: define uma interface para criar um objeto, mas deixa as subclasses
decidirem qual classe instanciar.

(c) Conforme vimos em aula, trata-se do Factory Method.

Façade: oferece uma interface unificada para um conjunto de interfaces em um


subsistema, definindo uma interface de alto nível que facilita a utilização do
subsistema.

(d) Conforme vimos em aula, trata-se do Façade (Resposta Correta).

Observer: define uma dependência um-para-muitos entre objetos para que, quando
um objeto mudar de estado, os seus dependentes sejam notificados e atualizados
16712855225

automaticamente.

(e) Conforme vimos em aula, trata-se do Observer.

Gabarito: D

(ESAF – – CGU - Analista de Sistemas Quanto à finalidade, os padrões de


projeto podem ser classificados em padrões de criação, padrões de estutura ou
padrões comportamentais. Correspondem à categoria de padrões estruturais:

a) Facade, Prototype e Proxy.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

b) Adapter, Composite e Proxy.


c) Adapter, Factory Method e Template Method.
d) Builder, Template Method e Strategy.
e) Adapter, Bridge e Singleton.

Comentários:

Conforme vimos em aula, trata-se do Adapter, Composite e Proxy.

Gabarito: B

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(FGV – 2008 – AL - Analista de Sistemas Considera as seguintes assertivas sobre


as vantagens do uso de padrões de software (software patterns):

I. Padrões de projeto proporcionam um vocabulário comum de projeto,


facilitando comunicação, documentação e aprendizado dos sistemas de
software.

II. Padrões de projeto auxiliam no desenvolvimento de software por meio da


reutilização do projeto de soluções computacionais já testadas e aprovadas.

III. Uma biblioteca de padrões pode ajudar a melhorar e padronizar o


desenvolvimento de software.

As assertivas corretas são:

a) somente II.
b) somente I e II.
c) somente I e III.
d) somente II e III.
e) I, II e III.

Comentários:

(I) Sim, eles possuem um jargão próprio comum a todos: nome, problema, solução
e consequências.

Suponham que haja uma fábrica de software que desenvolve diversos sistemas para
as mais variadas áreas de negócio. Sabe-se que, mesmo em áreas aparentemente
16712855225

distintas ou contrastantes, grande parte dos problemas já possuem uma solução


conhecida, formalmente documentada e exaustivamente testada, uma vez que se
tratam de problemas recorrentes.

(II) Sim, conforme visto em aula.

Pessoal, vamos iniciar pelo básico! O que é um Padrão? É um modelo testado ou


documentado para se alcançar um determinado objetivo. O autor Christopher
Alexander afirma que cada padrão descreve um problema que ocorre repetidas vezes
em nosso ambiente e o núcleo de sua solução, de tal forma que ela pode ser usada
diversas vezes sem que seja realizada da mesma maneira.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(III) Sim, conforme visto em aula. Imaginem que, em uma equipe de programadores,
todos utilizam um determinado padrão de projeto, mas cada um à sua maneira.
Não seria melhor ter uma biblioteca de padrões a fim de padronizar e melhorar o
desenvolvimento de software?

Gabarito: E

(ESAF – 2012– CGU – Analista de Sistemas O padrão de projeto singleton é


usado para restringir:

a) a instanciação de uma classe para objetos simples.


b) a instanciação de uma classe para apenas um objeto.
c) a quantidade de classes.
d) as relações entre classes e objetos.
e) classes de atributos complexos.

Comentários:

Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.

Conforme vimos em aula, ele restringe a instanciação de uma classe para apenas
um objeto ou instância.

Gabarito: B

(FEMPER – 2012 – TCE/RJ – Analista de Sistemas Padrões de Projeto descrevem


soluções para problemas recorrentes no desenvolvimento de sistemas de
16712855225

software orientados a objetos. Um padrão de projeto estabelece um nome e


define o problema, a solução, quando aplicar esta solução e suas consequências.
Um dos padrões de projeto mais utilizados é o padrão Adapter (adaptador), que
tem como função:

a) garantir a existência de apenas uma instância de uma classe, mantendo um


ponto global de acesso ao seu objeto.

b) adicionar dinamicamente um comportamento a um objeto existente sem


alterar o código das classes existentes.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

c) fornecer uma interface para a criação de famílias de objetos correlatos ou


dependentes sem a necessidade de especificar a classe concreta destes objetos.

d) definir novas operações sem alterar as classes dos elementos sobre os quais
ele opera.

e) permitir que classes com interfaces incompatíveis possam interagir.

Comentários:

Singleton: garante que uma classe tenha apenas uma instância e provê um nto de
acesso global a ela.

(a) Conforme visto em aula, trata-se do Singleton.

Decorator: anexa responsabilidades adicionais a um objeto dinamicamente. Fornece


uma alternativa flexível em relação à herança para estender funcionalidades.

(b) Conforme visto em aula, trata-se do Decorator.

Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.

(c) Conforme visto em aula, trata-se do Abstract Factory.

Visitor: representa uma operação a ser realizada sobre elementos de uma estrutura
de objetos e permite definir uma nova operação sem mudar as classes dos elementos
sobre os quais opera.
16712855225

(d) Conforme visto em aula, trata-se do Visitor.

Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.

(e) Conforme visto em aula, trata-se do Adapter (Questão Correta).

Gabarito: E

(ESAF – 2012– ATRFB – Analista de Sistemas) Os padrões de projeto (Design


Patterns) são classificados nas categorias:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

a) Situacional. Estrutural. Complementar.


b) Criacional. Evolutiva. Contingencial.
c) Compartimental. Vinculada. Comportamental.
d) Criacional. Step-by-step. Orientada a requisitos.
e) Criacional. Estrutural. Comportamental.

Comentários:

Conforme vimos em aula, classifica-se em Criacional, Estrutural ou Comportamental.

Gabarito: E

(FGV – 2013 – AL/MA – Analista de Sistemas Com relação ao tema Padrões de


Projeto, conforme descritos por Gamma et Alli, sobre o padrão Prototype, analise
16712855225

as afirmativas a seguir.

I. Apresenta como benefícios adicionais a adição e a remoção de produtos em


tempo de execução.
II. Apresenta como benefícios adicionais a especificação de novos objetos pela
variação de seus valores e/ou de sua estrutura.
III. Apresenta como benefícios adicionais a redução da necessidade de criação
de subclasses.

Assinale:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

a) se somente a afirmativa I estiver correta.


b) se somente a afirmativa II estiver correta.
c) se somente a afirmativa III estiver correta.
d) se somente as afirmativas I e II estiverem corretas.
e) se todas as afirmativas estiverem corretas.

Comentários:

Entre os benefícios adicionais decorrentes da utilização desse padrão, inserem-se:


acrescenta e remove produtos em tempo de execução; reduz o número de subclasses;
configura dinamicamente uma aplicação com classes; especifica novos objetos pela
variação de valores; e especifica novos objetos pela variação da estrutura. Bacana,
pessoal?

Conforme visto em aula, todas as alternativas estão corretas.

Gabarito: E

(FGV – 2015 – AL/Caruaru – Analista de Sistemas) O catálogo denominado


Padrões GoF (‘Gang of Four’) define soluções reutilizáveis para problemas
frequentes em projetos de sistemas de software.

Essas soluções estão organizadas em três famílias conforme o propósito de cada


solução.

Os padrões de projetos denominados Interpreter, Prototype e Flyweight que


fazem parte desse catálogo, pertencem, respectivamente, às seguintes famílias:

a) padrão comportamental, padrão de criação e padrão estrutural.


16712855225

b) padrão estrutural, padrão comportamental e padrão de criação.


c) padrão comportamental, padrão estrutural e padrão de criação.
d) padrão estrutural, padrão de criação e padrão comportamental.
e) padrão de criação, padrão comportamental e padrão estrutural.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Vocês decoraram as frases? Interpreter não está nas frases, então é um Diagrama
Comportamental; Prototype está na primeira frase, então é um Diagrama de
Criação; Flyweight está na segunda frase, então é um Padrão de Estrutural.

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

PADRÕES JAVA EE

Os Padrões de Projeto têm o intuito de propor e catalogar soluções a problemas


recorrentes na criação de projetos de software orientados a objeto, com base em
soluções já empregadas com sucesso em projetos. Vários programadores foram
verificando que havia soluções muito parecidas para uma grande categoria de
problemas e, então, foram documentando!

Pode-se dizer que um padrão de projeto nada mais é do que a documentação de


uma possível solução de um problema em um contexto comum, podendo assim ser
adaptado integralmente às necessidades de um problema específico. Em geral, a
estrutura de um padrão de projeto é composta por quatro elementos: nome do
padrão; problema a solucionar; solução proposta; e consequências da utilização.

Na maioria das vezes, os padrões são utilizados em conjunto, onde cada um assume
uma responsabilidade no contexto do problema. Com isso é necessário que os
padrões sejam organizados e classificados de modo a serem documentados. A
classificação dos padrões pode ser definida por dois critérios. O primeiro critério
refere-se à finalidade do padrão, ou seja, o que o padrão se propõe a fazer.

Com a evolução e maturidade da tecnologia Java EE, o centro de tecnologia Sun


Java Center vem identificando e propondo soluções para problemas semelhantes
ocorridos em projetos de software. A estratégia adotada para os problemas foi
definir um padrão e documentar em alto nível de abstração as possíveis soluções a
serem utilizadas.

A Plataforma Java EE define um padrão de arquitetura de três camadas para o


16712855225

desenvolvimento de aplicações web, como mostra a imagem abaixo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

A Camada de Apresentação comporta as aplicações web desenvolvidas em Java


que terão acesso aos componentes de negócio. Por exemplo, é nessa camada que
ficam as JSF e Páginas JSP. Na Camada de Negócio, encontram-se os componentes
que implementam as regras de negócio específicas do sistema. É lá que se
encontram os Enterprise JavaBeans (EJB).

Por fim, temos a Camada de Integração (ou EIS), em que se encontram fontes de
informação como banco de dados, acesso aos dados de sistemas legados, entre
outras fontes externas. Por exemplo, é nessa camada que se encontra toda a parte
de persistência de objetos em que se emprega a tecnologia JPA. Da mesma maneira
que se dividiu a Arquitetura Java EE, dividem-se os Padrões Java EE.

CAMADA DE APRESENTAÇÃO CAMADA DE NEGÓCIO CAMADA DE INTEGRAÇÃO

INTERCEPTING FILTER BUSINESS DELEGATE DATA ACCESS OBJECT

FRONT CONTROLLER SERVICE LOCATOR SERVICE ACTIVATOR

CONTEXT OBJECT SESSION FAÇADE DOMAIN STORE

APPLICATION CONTROLLER APPLICATION SERVICE WEB SERVICE BROKER

VIEW HELPER BUSINESS OBJECT

COMPOSITE VIEW COMPOSITE ENTITY

SERVICE TO WORKER TRANSFER OBJECT

DISPATCHER VIEW VALUE LIST HANDLER


16712855225

TRANSFER OBJECT ASSEMBLER

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

CAMADA DE APRESENTAÇÃO

Intercepting Filter Utilizado para interceptar e manipular uma requisição e uma resposta antes e
depois de a requisição ser processada.
Front Controller Utilizado para centralizar o controle do gerenciamento das requisições HTTP.

Context Object Utilizado para encapsular informações de forma independente de protocolo de


comunicação para compartilhamento pela aplicação.
Application Controller Utilizado para centralizar e modularizar o gerenciamento de visões e ações.

View Helper Utilizado para encapsular a formatação e o processamento de exibição de dados


em uma página web.
Composite View Utilizado para criar visões compostas de componentes menores ou
subcomponentes.
Service to Worker Utilizado para iniciar o acesso a uma página web sem ter que passar pelo Front
Controller.
Dispatcher View Utilizado para centralizar e controlar o tratamento de requisições HTTP.

CAMADA DE NEGÓCIO
Business Delegate Utilizado para encapsular o acesso a componentes e serviços de negócio, ocultando
os detalhes de implementação.
Service Locator Utilizado para encapsular a pesquisa de componentes e serviços de negócio de
maneira uniforme.
Session Façade Utilizado para encapsular o acesso a componentes e serviços de negócio, expondo
remotamente suas interfaces.
Application Service Utilizado para centralizar a lógica que envolve vários componentes e serviços da
camada de negócio, de forma que forneça uma camada de serviço mais uniforme.
Business Object Utilizado para separar dados e lógica de negócio de um objeto (Ex: em um cenário
em que um objeto possui informações de um cliente, tais como endereço).
Composite Entity Utilizado para agregar um conjunto de entidades em um objeto conceitual de
negócio.
16712855225

Transfer Object Utilizado para transferir dados entre as camadas de negócio, apresentação e
integração.
Transfer Object Utilizado para criar e centralizar um modelo de aplicação composto por Transfer
Assembler Object.
Value List Handler Utilizado para gerenciar o processamento e armazenamento em cache de
consultas que retornam uma grande quantidade de informações.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

CAMADA DA INTEGRAÇÃO
Data Access Object Utilizado para encapsular e gerenciar todo acesso a fontes de dados e suas
persistências.
Service Activator Utilizado para trocar mensagens JMS, chamando processos assíncronos.

Domain Store: Utilizado para separar o código de persistência do modelo de objetos.

Web Service Broke Utilizado para acessar serviços através de XML e protocolos HTTP.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - 2012 – TJ/RO – Analista de Sistemas) O padrão de projeto JEE que


encapsula a complexidade das interações entre os objetos de negócios
participantes de um fluxo de trabalho, ou seja, que esconde do cliente a
complexidade de interação entre os participantes, encapsulando a lógica de
negócios associada aos requisitos, é denominado:

a) service activator.
b) session facade.
c) Ajax.
d) intercepting filter.
e) front controller.

Comentários:

Trata-se do Session Façade! Ele esconde sua complexidade interna e apresenta


apenas sua fachada externa, i.e., sua interface.

Gabarito: B

(CESPE - – CENSIPAM – Analista de Sistemas) Entre os objetivos do padrão


Business Delegate na plataforma J2EE, incluem-se: reduzir o acoplamento entre
clientes na camada de apresentação e os serviços providos pela camada de
16712855225

negócio; reduzir o tráfego entre os clientes na camada de apresentação e a


camada de negócio; reduzir o impacto de mudanças na camada de negócios
sobre a camada de apresentação.

Comentários:

Perfeito, é exatamente isso! Ele é utilizado para encapsular o acesso a componentes


e serviços de negócio, ocultando os detalhes de implementação.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - – CENSIPAM – Analista de Sistemas) Entre os objetivos do padrão


DAO na plataforma J2EE, incluem-se: abstrair e encapsular os acessos às fontes
dos dados; gerenciar as conexões com as fontes dos dados; implementar o
mecanismo de acesso necessário para se usar uma fonte de dados; isolar
detalhes de implementação relacionados ao acesso às fontes dos dados visando
facilitar a migração entre diferentes fontes de dados.

Comentários:

Perfeito, é exatamente isso! Ele é utilizado para encapsular e gerenciar todo acesso
a fontes de dados e suas persistências.

Gabarito: C

(CESPE - 2012 – TJ/RO – Analista de Sistemas) O padrão de projeto JEE (J2EE


patterns) que é utilizado para solucionar problemas de acesso e manipulação de
dados em uma camada separada e que implementa mecanismos de acesso para
persistência de dados, em arquitetura mainframes, LDAP ou sistemas
gerenciadores de banco de dados relacionais é denominado:

a) transfer object.
b) value list handler.
c) transfer object assembler.
d) JDBC.
e) data access object.

Comentários:

Trata-se do DAO (Data Access Object). 16712855225

Gabarito: E

(CESPE - 3 – MPE/MA – Analista de Sistemas) Em uma aplicação web


desenvolvida com Java utilizando o padrão MVC, as servlets e as classes no
padrão DAO são representadas, respectivamente, nos componentes:

a) Controller e View.
b) View e Model.
c) Controller e Model.
d) Model e Controller.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

e) View e Controller.

Comentários:

MVC é um estilo arquitetural e um padrão de projeto. Ele divide uma aplicação em


componentes:

- Modelo: responsável por modelar os dados da aplicação e as regras de negócio.


Tem o foco voltado para o armazenamento, manipulação e geração de dados. Seus
objetos geralmente são reusáveis, distribuídos, persistentes e portáveis.

- Visão: responsável pela apresentação dos dados aos usuários. Ele recebe entradas
de dados e apresenta resultados. Essa camada não persiste nenhum dado no
sistema e também não busca dados, apenas os renderiza em tela.

- Controle: responsável por definir o comportamento da aplicação. Processa e


responde a eventos, geralmente ações do usuário, e pode invocar alterações no
modelo. Realiza, também, a validação de dados do usuário.

Servlets são processadores de requisições, logo eles ficam na camada de controle.


Os DAOs são objetos que acessam e gerenciam a persistência, logo eles ficam na
camada de Modelo.

Gabarito: C

(FCC - 06 – BACEN – Analista de Sistemas) Considerando que os padrões de


projeto J2EE possuem os padrões de apresentação e estes levam em
consideração a lógica requerida para que o cliente acesse um sistema J2EE,
analise: 16712855225

I. Comb Filter é um padrão de apresentação que combina consolidação de


dados.
II. Intercepting Filter facilita o pré-processamento e o pós-processamento de
uma requisição.
III. Front Controller provê um controle centralizado para o gerenciamento do
tratamento das requisições.
IV. Single View cria uma única pesquisa para acesso a dados combinados.

É correto o que consta APENAS em:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

a) I e III.
b) I e IV.
c) II e III.
d) II, III e IV.
e) IV.

Comentários:

Comb Filter não é um Padrão de Projeto Java EE! Além disso, não existe Single View
– a descrição é do Composite View.

Gabarito: C

(FCC – 2015 – TRT/MG – Analista de Sistemas) O Java EE pode ser organizado


em três conjuntos de padrões de projeto, de acordo com as camadas da
arquitetura JEE: Padrões da Camada de Apresentação (Web Tier Patterns),
Padrões da Camada de Negócio (Business Tier Patterns) e Padrões da Camada
de Integração (EIS Tier Patterns). São padrões de projeto da Camada de
Apresentação:

a) Intercepting Filter e Front Controller.


b) Session Façade e Composite Entity.
c) Service Activator e Web Service Broke.
d) Data Access Object e View Helper.
e) Application Service e Transfer Object.

Comentários:

16712855225

CAMADA DE APRESENTAÇÃO CAMADA DE NEGÓCIO CAMADA DE INTEGRAÇÃO

INTERCEPTING FILTER BUSINESS DELEGATE DATA ACCESS OBJECT

FRONT CONTROLLER SERVICE LOCATOR SERVICE ACTIVATOR

CONTEXT OBJECT SESSION FAÇADE DOMAIN STORE

APPLICATION CONTROLLER APPLICATION SERVICE WEB SERVICE BROKER

VIEW HELPER BUSINESS OBJECT

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

COMPOSITE VIEW COMPOSITE ENTITY

SERVICE TO WORKER TRANSFER OBJECT

DISPATCHER VIEW VALUE LIST HANDLER

TRANSFER OBJECT ASSEMBLER

Conforme vimos em aula, trata-se do Intercepting Filter e Front Controller.

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

PADRÕES DE PROJETO (GRASP)

O GRASP, acrônimo de General Responsability Assignment Software Patterns (ou


Principles), consiste em um conjunto de práticas que descrevem os princípios
fundamentais de atribuição de responsabilidade a objetos, expressas na forma de
padrões. Ele ajuda a compreender melhor a utilização da orientação a objetos em
projetos complexos.

A qualidade de um projeto orientado a objetos está fortemente relacionada à


distribuição de responsabilidades, que podem ser divididas em Responsabilidade de
Conhecimento (Knowing) e Responsabilidade de Realização (Doing). A primeira
refere-se à distribuição das características do sistema entre as classes e a segunda à
distribuição do comportamento do sistema entre as classes.

As Responsabilidades do Tipo Realização são realizadas por um único método ou


uma coleção de métodos trabalhando em conjunto. Já as Responsabilidades do Tipo
Conhecimento são inferidas a partir do modelo conceitual, i.e., são atributos e
relacionamentos. Lembram-se da UML? Pois é, os Diagramas de Interação são
bastante utilizados para representar responsabilidades.

Galera, para ser bem sincero com vocês, eu considero Padrões GRASP mais como
uma filosofia de projeto do que como um conjunto de padrão de projeto. Eles
descrevem princípios fundamentais de desenho orientado a objetos e definição de
responsabilidades, expressos em padrões. Vocês sabem o que significa o verbo To
Grasp? Significa tomar, agarrar, apreender, captar, aferrar, pegar de súbito.

Esse nome foi escolhido com o intuito de sugerir a importância de agarrar ou captar
16712855225

esses princípios para desenhar projetos de software orientados a objetos da melhor


forma possível. Os Padrões de Projeto GOF exploram soluções de projeto mais
específicas, já os Padrões de Projeto GRASP refletem práticas mais pontuais da
aplicação de técnicas orientadas a objetos.

O Padrão GRASP é composto de cinco Padrões Básicos e quatro Padrões


Avançados. Os Padrões Básicos são: Information Expert, Creator, High Cohesion, Low
Coupling e Controller. Já os Padrões Avançados são: Polymorphism, Pure Fabrication,
Indirection e Protected Variations. Assim como os Padrões de Projeto (GOF), para
resolver a grande maioria das questões, basta conhecer a descrição básica.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

 Expert:

Também conhecido como Information Expert, esse padrão é utilizado para


determinar para quem delegar as responsabilidades. Essas responsabilidades
incluem métodos, campos calculados, etc. Deve-se atribuir a responsabilidade ao
especialista da informação, isto é., a classe que possui a informação necessária para
satisfazer essa responsabilidade.

 Creator:

A criação de objetos é uma das atividades mais comuns em sistemas orientados a


objetos. Esse padrão é responsável por criar objetos de classes, sendo uma
propriedade fundamental do relacionamento entre objetos em determinadas
classes, i.e., possui a responsabilidade unívoca pela criação de uma nova instância
de uma classe.

 High Cohesion: 16712855225

Esse padrão busca manter objetos apropriadamente focados, gerenciáveis e


compreensíveis. Geralmente é utilizado para suportar o baixo acoplamento,
enfatizando que as responsabilidades de um dado elemento são fortemente
relacionadas e altamente focadas. Eu sempre decorei assim: “Coesão é a divisão de
responsabilidades”.

 Low Coupling:

Esse padrão é responsável por ditar como atribuir responsabilidades para apoiar
baixa dependência entre classes, como suportar mudanças em uma classe que

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

tenham baixo impacto em outras classes, e maior potencial de reúso.


acoplamento está sempre associado à coesão. Eu sempre decorei assim:
“Acoplamento é a dependência entre as partes”.

 Controller:

Esse padrão tem o objetivo de atribuir a responsabilidade de lidar com eventos de


sistema a uma classe que não implemente elementos gráficos, e represente um
sistema completo ou um cenário de caso de uso. Um objeto Controller não é uma
interface com o usuário, trata-se – na verdade - um objeto responsável por
receber e tratar eventos do sistema.

 Polymorphism:

Esse padrão atribui a responsabilidade de definir a variação de comportamentos


baseado em tipos aos tipos em que essas variações ocorrem. Isso ocorre por meio
de operações polimórficas. Em outras palavras, não se deve utilizar a lógica
condicional para decidir qual comportamento será realizado, mas utilizar os próprios
tipos. Galera, é o polimorfismo comum à orientação a objetos.

 Pure Fabrication:

Esse padrão apresenta uma classe que não representa um conceito real, mas
artificial, no domínio de problema, sendo utilizada para atingir baixo acoplamento,
alta coesão e o potencial reúso. Em outras palavras, ela atribui um conjunto
altamente coesivo de responsabilidade a uma classe artificial que não representa
um conceito do domínio do problema.

 Indirection: 16712855225

Esse padrão atribui responsabilidade a um objeto intermediário para mediar as


mensagens entre outros componentes ou serviços para que não sejam diretamente
acoplados. Ele cria uma camada de indireção entre os dois componentes que não
mais dependem um do outro, i.e., ambos dependem da indireção. Um exemplo é
o Componente Controller no MVC - ele faz a mediação entre Model e View.

 Protected Variations:

Esse padrão identifica pontos de variação ou instabilidades potenciais e atribui


responsabilidades para criar uma interface estável em volta desses pontos. Dessa

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

forma, ela protege elementos das variações de outros elementos (objetos, sistemas,
subsistemas) ao envolver o foco de instabilidade em uma interface e usando o
polimorfismo para criar várias implementações desta interface.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - 2013 – TCE/RO – Analista de Informática O padrão Pure Fabrication


objetiva designar a responsabilidade unívoca pela criação de uma nova instância
de uma classe.

Comentários:

Creator:

A criação de objetos é uma das atividades mais comuns em sistemas orientados a


objetos. Esse padrão é responsável por criar objetos de classes, sendo uma
propriedade fundamental do relacionamento entre objetos em determinadas classes,
i.e., possui a responsabilidade unívoca pela criação de uma nova instância de uma
classe.

Conforme vimos em aula, a questão trata do Padrão Creator!

Gabarito: E

(CESPE - 2013 – TCE/RO – Analista de Informática) Nos casos em que a solução


oferecida pelo padrão Expert violar a alta coesão e o baixo acoplamento, o
padrão adequado a ser aplicado será o Creator, que atribui um conjunto
altamente coesivo de responsabilidades a uma classe artificial que não
16712855225

representa um conceito do domínio do problema.

Comentários:

 Pure Fabrication:

Esse padrão apresenta uma classe que não representa um conceito real, mas artificial,
no domínio de problema, sendo utilizada para atingir baixo acoplamento, alta coesão
e o potencial reúso. Em outras palavras, ela atribui um conjunto altamente coesivo
de responsabilidade a uma classe artificial que não representa um conceito do
domínio do problema.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Conforme vimos em aula, a questão trata do Padrão Padrão Pure Fabrication!

Gabarito: E

(CESPE - 2013 – TCE/RO – Analista de Informática) O padrão Indirection é


utilizado para atribuir responsabilidades à classe que tiver a informação
necessária para satisfazer a responsabilidade.

Comentários:

 Expert:

Também conhecido como Information Expert, esse padrão é utilizado para


determinar para quem delegar as responsabilidades. Essas responsabilidades incluem
métodos, campos calculados, etc. Deve-se atribuir a responsabilidade ao especialista
da informação, isto é., a classe que possui a informação necessária para satisfazer
essa responsabilidade.

Conforme vimos em aula, a questão trata do Padrão Expert!

Gabarito: E

(CESPE - 2013 – TCE/RO – Analista de Informática) O padrão Don’t Talk to


Strangers é utilizado para fortalecer o polimorfismo, realizado pelo padrão
Polymorphism. O objetivo de ambos os padrões é substituir um componente
sem afetar outro componente, embora o primeiro implemente o polimorfismo
em nível de classe e o segundo lide com alternativas embasadas no tipo de
componente. 16712855225

Comentários:

 Protected Variations:

Esse padrão identifica pontos de variação ou instabilidades potenciais e atribui


responsabilidades para criar uma interface estável em volta desses pontos. Dessa
forma, ela protege elementos das variações de outros elementos (objetos, sistemas,
subsistemas) ao envolver o foco de instabilidade em uma interface e usando o
polimorfismo para criar várias implementações desta interface.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

 Polymorphi
Esse padrão atribui a responsabilidade de definir a variação de comportamentos
baseado em tipos aos tipos em que essas variações ocorrem. Isso ocorre por meio de
operações polimórficas. Em outras palavras, não se deve utilizar a lógica condicional
para decidir qual comportamento será realizado, mas utilizar os próprios tipos.
Galera, é o polimorfismo comum à orientação a objetos.

Galera, além de ser o nome de uma música do grande Ronnie James Dio, Don’t Talk
to Strangers é o nome da versão original do Padrão Protected Variations. No
entanto, quem lida com alternativas embasadas no tipo de componente é o Padrão
Polymorphism. Quem liga com o polimorfismo em nível de classe é o Padrão Don’t
Talk to Strangers (ou Protected Variations).

Gabarito: E

(CESPE - 2013 - CNJ - Analista Judiciário - Análise de Sistemas) Os padrões:


Controller; Polimorfismo; e Information Expert, são considerados do tipo GRASP
porque cada um embute uma forma de atribuição de responsabilidades a
objetos. No caso do Controller, a responsabilidade é concernente ao tratamento
de eventos. No caso do Polimorfismo, a responsabilidade é concernente à
variação de comportamento, conforme o tipo do objeto. No caso do Information
Expert, a responsabilidade concerne à disponibilidade de informações que
permitem o desempenho de uma responsabilidade.

Comentários:

Questão mais perfeita, impossível! Tudo correto!

16712855225

Gabarito: C

(CESPE - 2010 - MPU – Desenvolvimento de Sistemas) GRASP (general


responsibility assignment software patterns) consiste em um conjunto de sete
padrões básicos para atribuir responsabilidades em projeto orientado a objetos:
information expert, creator, controller, low coupling, high cohesion,
polymorphism e pure fabrication.

Comentários:

O Padrão GRASP é composto de cinco Padrões Básicos e quatro Padrões Avançados.


Os Padrões Básicos são: Information Expert, Creator, High Cohesion, Low Coupling e

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Controller. Já os Padrões Avançados são: Polymorphism, Pure Fabrication, Indirection


e Protected Variations. Assim como os Padrões de Projeto (GOF), para resolver a
grande maioria das questões, basta conhecer a descrição básica.

Conforme vimos em aula, temos cinco padrões básicos!

Gabarito: E

(CESPE - – SERPRO – Desenvolvimento de Sistemas) No polimorfismo, que


é um tipo de padrão GRASP, um mesmo método pode apresentar várias formas.

Comentários:

 Polymorphism:

Esse padrão atribui a responsabilidade de definir a variação de comportamentos


baseado em tipos aos tipos em que essas variações ocorrem. Isso ocorre por meio de
operações polimórficas. Em outras palavras, não se deve utilizar a lógica condicional
16712855225

para decidir qual comportamento será realizado, mas utilizar os próprios tipos.
Galera, é o polimorfismo comum à orientação a objetos.

Conforme vimos em aula, está perfeito!

Gabarito: C

(CESPE - - SERPRO - Analista - Desenvolvimento de Sistemas) Expert é um


padrão que apresenta uma interface para várias funcionalidades de uma API de
maneira simples e fácil de usar.
Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Bem, essa descrição se aproxima mais do Padrão Protected Variations ou, no caso
dos Padrões de Projeto GOF, se aproxima mais do Padrão Façade!

Gabarito: E

(CESPE - 2010 - SERPRO - Analista de Sistemas) Os padrões GRASP (general


responsibility assignment software patterns) consistem em modelos de
distribuição de responsabilidades a classes e objetos em implementações
orientadas a objetos. Os principais exemplos de padrões GRASP são: Information
Expert, Creator, Visitor, Controller, Iterator, Low Coupling, High Cohesion,
Polymorphism, State, Strategy, Pure Fabrication, Indirection, Proxy e Protected
Variations.

Comentários:

Conforme vimos em aula, não existe Padrão GRASP Visitor, Iterator, State, Strategy
e Proxy – todos esses são Padrões GOF! 16712855225

Gabarito: E

10. (CESPE - 2014 – SUFRAMA - Analista de Sistemas) Enquanto os padrões GRASP


refletem práticas mais pontuais da aplicação de técnicas orientadas a objetos, os
padrões de projeto GoF (Gang of Four) exploram soluções mais específicas.
Dessa forma, não há, no GRASP, um padrão que ajude a solucionar, por
exemplo, a definição de qual classe deve ser a responsável por lidar com um
evento de determinada interface.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Esse nome foi escolhido com o intuito de sugerir a importância de agarrar ou captar
esses princípios para desenhar projetos de software orientados a objetos da melhor
forma possível. Os Padrões de Projeto GOF exploram soluções de projeto mais
específicas, já os Padrões de Projeto GRASP refletem práticas mais pontuais da
aplicação de técnicas orientadas a objetos.

 Controller:

Esse padrão tem o objetivo de atribuir a responsabilidade de lidar com eventos de


sistema a uma classe que não implemente elementos gráficos, e represente um
sistema completo ou um cenário de caso de uso. Um objeto Controller não é uma
interface com o usuário, mas é um objeto responsável por receber e tratar eventos
do sistema.

Claro que há! Conforme vimos em aula, trata-se do Padrão Controller.

Gabarito: E

11. (CESPE - 2014 – SUFRAMA - Analista de Sistemas) Em um cenário em que é


necessário minimizar dependências e maximizar o reúso, bem como atribuir uma
responsabilidade para que o acoplamento mantenha-se fraco, o padrão Expert
é mais adequado que o padrão Low Coupling.

Comentários:

 Low Coupling:

Esse padrão é responsável por ditar como atribuir responsabilidades para apoiar
baixa dependência entre classes, como suportar mudanças em uma classe que
16712855225

tenham baixo impacto em outras classes, e maior potencial de reúso. O acoplamento


está sempre associado à coesão. Eu sempre decorei assim: “Acoplamento é a
dependência entre as partes”.

Conforme vimos em aula, o Padrão Low Coupling é o mais adequado!

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


PADRÕES DE PROJETO GOF

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento


Manutenção de Sistemas) O padrão bridge, além de converter a interface de
uma classe existente em outra interface esperada pelos clientes, permite que
algumas classes com interfaces diferentes funcionem conjuntamente.

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) Design patterns não se aplicam, exclusivamente, ao
Java, podendo ser empregados em projetos que utilizam linguagem C#.

(CESPE - 2012 - MPE-PI - Analista Ministerial - Informática - Cargo 6) O padrão


de projeto conhecido como façade é indicado para a definição de uma interface
de nível mais alto que torne mais fácil a comunicação entre os subsistemas de
um sistema complexo.

(CESPE - 2010 - TRT - 21ª Região (RN) - Técnico Judiciário - Tecnologia da


Informação) Os padrões de projeto podem ser definidos como soluções já
testadas para problemas que ocorrem frequentemente durante o projeto de
software.

(CESPE - 2008 - STJ - Analista Judiciário - Tecnologia da Informação) Os padrões


de projeto podem ser usados no projeto orientado a objetos para apoiar o reúso
de software. Esses padrões frequentemente empregam a herança e o
polimorfismo para prover generalidade. Abstract factory, strategy e template
method são padrões de projeto que podem ser empregados nos frameworks
16712855225

orientados a objetos para facilitar a adaptação dos frameworks.

(CESPE - 2008 - -DF - Analista Judiciário - Tecnologia da Informação) O padrão


de projeto orientado a objetos denominado singleton exprime o fenômeno
recorrente na análise que é a existência de muitas aplicações nas quais há um
objeto que é a única instância de sua classe.

(CESPE - - ANAC - Técnico Administrativo - Informática) O uso de padrões


de projeto somente pode ser aplicado a projetos que implementam o paradigma
de programação orientada a objetos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - 2008 - SERPRO - Analista - Desenvolvimento de Sistemas) Adapter é


um padrão estrutural utilizado para compatibilizar interfaces de modo que elas
possam interagir.

(CESPE - 2008 - SERPRO - Analista - Desenvolvimento de Sistemas) O Singleton


é um padrão que garante que uma classe tenha apenas uma instância.

10. (CESPE - - SERPRO - Analista - Desenvolvimento de Sistemas) Alguns


padrões de criação como o Prototype, o Proxy e o Façade não são adequados
para a programação orientada a objetos.

11. (CESPE - - TCU - Analista de Controle Externo - Tecnologia da Informação


- Prova 2) Caso seja verificado no desenvolvimento de um sistema forte
acoplamento entre as classes, recomenda-se o uso do padrão de
comportamento Factory Method, que evita o acoplamento do remetente de uma
solicitação ao seu receptor, dando a mais de um objeto a oportunidade de tratar
uma solicitação, mesmo nos casos em que o conjunto de objetos não seja
conhecido a priori ou seja definido dinamicamente.

12. (CESPE - - TCU - Analista de Controle Externo - Tecnologia da Informação


- Prova 2) No desenvolvimento de um sistema estruturado em subsistemas para
facilitar o acesso e minimizar a comunicação e dependências entre os
subsistemas, o padrão de criação Factory Method, que fornece uma interface
para a criação de famílias de objetos relacionados ou dependentes sem
especificar suas classes concretas, é mais indicado que o padrão de criação
Prototype.

13. (CESPE - - TCU - Analista de Controle Externo - Tecnologia da Informação


- Prova 2) Se, no desenvolvimento de uma aplicação que leia documentos do
16712855225

tipo txt e seja capaz de converter o documento em vários formatos distintos,


houver a necessidade de facilitar acréscimos de novos tipos de conversão, será
mais indicado o uso do padrão de estrutura Adapter que o uso do padrão de
estrutura Bridge, pois o padrão Adapter separa a construção de um objeto
complexo de sua representação para criar representações diferentes com o
mesmo processo.

14. (CESPE - 2013 - ANT - Desenvolvimento de Sistemas) Em programação


orientada a objetos, o padrão de projeto denominado Iterator define uma forma
de acesso sequencial aos elementos de um objeto agregado, sem expor sua
representação interna.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

15. (CESPE - 2013 - ANTT - Desenvolvimento de Sistemas) Em programação


orientada a objetos, o padrão de projeto denominado Singleton define uma
classe que possui apenas uma instância e provê um ponto de acesso local a ela.

16. (CESPE - 2013 – TCO/RO - Analista de Informática – Desenvolvimento de


Sistemas) Uma das aplicabilidades do padrão Iterator é a representação de
hierarquias do tipo todo-parte de objetos, de modo que a aplicação seja capaz
de ignorar a diferença entre composições de objetos e objetos individuais, haja
vista que todos os objetos tratados no padrão têm comportamento uniforme.

17. (CESPE - 2013 – TCO/RO - Analista de Informática – Desenvolvimento de


Sistemas) O padrão Adapter será mais apropriado que o Façade quando for
necessário fornecer uma interface unificada para um conjunto de interfaces em
um subsistema.

18. (CESPE - 2013 – TCO/RO - Analista de Informática – Desenvolvimento de


Sistemas) O uso do padrão Builder tem a vantagem de permitir acesso
controlado à instância de uma classe, uma vez que ele encapsula a classe,
criando um ponto global único de acesso.

19. (CESPE - 2013 – TCO/RO - Analista de Informática – Desenvolvimento de


Sistemas) Os padrões estruturais, tais como o Bridge e o Proxy, abstraem o
processo de instanciação, ajudando a tornar um sistema independente de como
os seus objetos são criados. Já os padrões de criação, como Prototype e o
Builder, se preocupam com a forma como as classes e os objetos são criados
para formar estruturas compostas maiores.

(CESPE - 2012 - BASA - Tecnologia da Informação – Técnico Científico) O padrão


mediator define um objeto que encapsula como um conjunto de objetos
16712855225

interage. Esse padrão torna desnecessário que cada objeto armazene referências
para todos os objetos com os quais interage e pode ser usado quando objetos
se comunicam de forma definida, mas complexa.

21. (CESPE - 2012 - BASA - Tecnologia da Informação – Técnico Científico) O padrão


adapter define uma família de algoritmos, permite o encapsulamento de
algoritmos e possibilita a substituição desses algoritmos. Os algoritmos podem
variar independentemente dos seus clientes. Esse padrão pode ser usado
quando várias classes relacionadas diferirem apenas nos seus comportamentos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - - TCE-RN – Assessor Técnico de Informática) O template method


se aplica primariamente às classes, sendo um padrão de projeto com finalidade
comportamental, ou seja, caracterizado pela maneira como as classes interagem
e distribuem responsabilidades.

(CESPE - 2010 – TRT/RN – Técnico Judiciário – Tecnologia da Informação) Os


padrões de projeto podem ser definidos como soluções já testadas para
problemas que ocorrem frequentemente durante o projeto de software.

24. (CESPE - 2007 - TST - Analista Judiciário – Análise de Sistemas) Um dos


mecanismos da orientação a objetos para reutilização de software é a
identificação e documentação de padrões de projeto (design patterns), que são
modelos particulares de classes e de objetos comunicantes que se repetem de
um projeto para outro e que podem assim ser padronizados.

(CESPE - 2006 – DATAPREV - Analista de Sistemas) As seguintes situações


justificam o uso do padrão Abstract Factory: o sistema deve ser independente
de como os objetos são criados; o sistema deve poder ser configurado com
diferentes famílias de classes; é necessário garantir que certas classes sejam
usadas em conjunto.

(CESPE - 2006 – DATAPREV - Analista de Sistemas) As seguintes situações


justificam o uso do padrão Adapter: é necessário um objeto local que se faça
passar por um objeto localizado em outro espaço de endereçamento; é
necessário controlar o acesso a um objeto; um objeto persistente deve ser
carregado em memória somente quando for referenciado.

27. (CESPE - 2006 – DATAPREV - Analista de Sistemas) As seguintes situações


justificam o uso do padrão Command: um conjunto de objetos se comunica de
16712855225

forma definida porém complexa, o que resulta em interdependências difíceis de


serem entendidas; o reúso está sendo dificultado pois cada objeto se comunica
com vários outros objetos.

(CESPE - 2006 – DATAPREV - Analista de Sistemas) As seguintes situações


justificam o uso do padrão Strategy: é necessário configurar uma classe com uma
variedade de comportamentos; uma classe usa diferentes variações de um
algoritmo; o método de uma classe tem muitos enunciados condicionais pois a
classe tem comportamentos variados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - – DATAPREV - Analista de Sistemas) Quanto aos padrões de


projeto orientados a objetos, assinale a opção correta.

a) O Facade pode ser usado quando se deseja prover uma interface simples para
um subsistema complexo; existem muitas dependências entre clientes e as
classes que implementam uma abstração.

b) Pode-se usar o Decorator quando um sistema deve ser configurado com uma
entre várias famílias de produtos; uma família de produtos relacionados foi
projetada para ser usada em conjunto.

c) O Adapter pode ser usado quando objetos se comunicam de forma definida,


mas complexa; as interdependências entre os objetos são difíceis de entender; o
reúso está sendo dificultado, pois um objeto se comunica com vários outros.

d) Pode-se usar o Builder quando o comportamento de um objeto muda em


tempo de execução e depende do seu estado; as operações têm múltiplos
enunciados condicionais que dependem do estado do objeto.

(CESPE - 1– - Analista de Sistemas) O padrão Singleton garante que


uma classe tenha somente uma instância, fornecendo, assim, um ponto global
de acesso a essa instância.

31. (CESPE - 2011 – MEC - Analista de Sistemas) O padrão Prototype pode ser usado
no desenvolvimento de programas escritos com a linguagem PHP 5.0, atuando
como padrão estrutural que permite construir tanto classes quanto objetos.

(CESPE - 2011 – MEC - Analista de Sistemas) Os padrões de projeto são úteis


tanto na fase de planejamento da arquitetura quanto na de desenvolvimento e
16712855225

codificação.

(CESPE - 2011 – MEC - Analista de Sistemas) O padrão Abstract Factory é


corretamente aplicável, quando necessário, para fornecer uma biblioteca de
classes e não revelar suas interfaces.

34. (CESPE - 2013 – MPOG - Analista de Sistemas) O padrão de comportamento e


encadeamento de atendentes (chain of responsibility) evita acoplamento entre
solicitantes e atendentes, permitindo que mais de um objeto tenha chance de
tratar a solicitação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - 2013 – MPOG - Analista de Sistemas) Para um problema recorrente no


desenvolvimento de sistemas, normalmente, um padrão de projeto descreve
uma solução geral, que não pode ser reutilizada.

(CESPE - 2013 – MPOG - Analista de Sistemas) Padrões de projeto envolvem


combinações de classes e algoritmos associados que cumprem com propósitos
comuns de projeto.

37. (CESPE – 2008 – STF - Analista de Sistemas) A figura acima, adaptada de


java.sun.com, ilustra a arquitetura de uma aplicação web desenvolvida na
plataforma J2EE, tendo sido alguns de seus módulos nomeados de A até I.
Considere que uma aplicação com a arquitetura mostrada tenha sido instalada
em um servidor de aplicação JBoss 4.0 ou superior, por meio do deploy de um
arquivo com nome aplicação.war, e se encontrem pleno funcionamento.
Conforme a nomenclatura proposta pelo GoF (Gang of Four) book, o nome dado
ao módulo F sugere que esse módulo implementa um padrão da categoria
comportamental, enquanto o nome do módulo C sugere que ele implementa
um padrão da categoria estrutural.

(CESPE - 2015 – TCU - Analista de Sistemas) Nos padrões de projeto (design


patterns) estruturais, utilizam-se técnicas que valorizam um forte acoplamento
entre as classes para favorecer o aprendizado e a portabilidade das aplicações.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


PADRÕES DE PROJETO GOF

(FCC - 2011 - TCE-PR - Analista de Controle – Informática - A) Os design patterns:

a) são projetos de arquitetura para um domínio específico de aplicação e sempre


trazem componentes predefinidos que envolvem código de programação.

b) consistem em conjuntos de classes que um usuário instancia para utilizar seus


métodos. Após a chamada ao método, o controle do fluxo da aplicação retorna
para o usuário.

c) são de uso exclusivo em processos de desenvolvimento de soluções orientado


a objetos, já que os objetos são a mais adequada abstração para o reúso.

d) são aplicações propriamente ditas, normalmente construídas pela integração


de diversos frameworks.

e) podem ser modelados utilizando-se a linguagem UML que fornece um meio


eficiente de modelar padrões de projeto representando-os como colaborações.

(FCC - 2010 - TRF - 4ª REGIÃO - Analista Judiciário - Tecnologia da Informação)


Sobre os design patterns, é correto afirmar:

a) Padrões e linguagens de padrões são maneiras de implementar sistemas


orientados a objetos por meio da captação da experiência de programadores.
Os padrões, apesar de abstratos, sempre incluem algum código de
16712855225

programação.

b) São aplicações, propriamente ditas, dedicadas aos domínios de aplicações


específicos, tais como sistemas de telecomunicações ou financeiros.

c) Não são complexos e necessita-se de um tempo mínimo para aprender a usá-


los.

d) O princípio geral de englobamento de experiência em um padrão é aplicável


apenas à abordagem de projeto de software orientado a objetos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

e) O padrão é uma descrição de conhecimento e experiência acumulados, uma


solução comprovada para um problema comum.

(FCC - - -PI - Analista Judiciário - Tecnologia da Informação) Os padrões


de projeto, quando aplicados ao desenvolvimento de aplicações, fornecem meios
de descrever soluções comuns para problemas comuns, resultando em redução
de tempo gasto com o desenvolvimento e melhoria da qualidade da aplicação.

Analise:

I. É o responsável pela especificação dos tipos de objetos a serem criados usando


uma "instância" prototípica e pela criação de novos objetos copiando este protótipo.

II. Define uma interface de nível mais alto que torna o subsistema mais fácil de usar
e fornece uma interface única para um subsistema com diversas interfaces; compõe
o grupo de padrões estruturais.

III. Integrante do grupo de padrões comportamentais, ele provê uma forma de


acessar sequencialmente os elementos de um agregado de objetos, sem expor a
representação interna desse agregado.

IV. As consequências do uso deste padrão é que o encapsulamento é mantido, já


que objetos usam sua própria informação para cumprir responsabilidades; leva ao
fraco acoplamento entre objetos e à alta coesão, uma vez que objetos fazem tudo
que é relacionado à sua própria informação.

As afirmações correspondem, respectivamente, aos padrões

a) Command, Iterator, Singleton e Expert.


16712855225

b) Controller, Expert, Singleton e Prototype.


c) Command, Singleton, Controller e Façade.
d) Prototype, Façade, Iterator e Expert.
e) Adapter, Façade, Command e Iterator.

(FCC - 2009 - -PI - Analista Judiciário - Tecnologia da Informação) Acerca


desses padrões, avalie:

I. Em termos de padrões de criação de projetos, algumas classes, tais como um


spooler de impressão ou um sistema de arquivos, devem ser instanciadas uma
única vez e prover um ponto de acesso global a esta instância.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

II. Pertencente ao grupo de padrões estruturais, é utilizado para permitir que


dois objetos se comuniquem mesmo que tenham interfaces incompatíveis.

III. Encapsula uma requisição como um objeto, permitindo que os clientes


parametrizem diferentes requisições e filas, ou façam o registro de log de
requisições e dêem suporte a operações que podem ser desfeitas.

IV. Atribuir a responsabilidade do tratamento de um evento do sistema a uma


classe que representa o próprio sistema ou à classe que representa um caso de
uso.

As proposições correspondem, respectivamente, aos padrões

a) Singleton, Adapter, Command e Controller.


b) Command, Iterator, Singleton e Expert.
c) Façade, Iterator, Expert e Adapter.
d) Controller, Expert, Singleton e Prototype.
e) Adapter, Façade, Command e Iterator.

(FCC - 2011 - TRT - 24ª REGIÃO (MS) - Analista Judiciário - Tecnologia da


Informação) Considere:

I. Fornecer uma interface para criação de famílias de objetos relacionados ou


dependentes, sem especificar suas classes concretas. Possibilitar o adiamento da
instanciação para as subclasses.

II. Garantir a existência de apenas uma instância de uma classe, mantendo um


ponto global de acesso ao seu objeto. 16712855225

III. Possibilitar o armazenamento do estado interno de um objeto em um


determinado momento, para que seja possível retorná-lo a este estado, caso
necessário.

I, II e III são, respectivamente, objetivos dos Design Patterns intitulados:

a) Interpreter, Iterator e Memento.


b) Command, Singleton e Iterator.
c) Factory Method, Singleton e Memento.
d) Iterator, Factory Method e Flyweight.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

e) Singleton, Flyweight e Command.

(FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas) Na


engenharia de software, os padrões de projetos comportamentais tratam das
interações e divisões de responsabilidades entre as classes ou objetos. São
exemplos típicos dessa família:

a) Command, Factory Method e Prototype.


b) Builder, Prototype e Singleton.
c) Chain of Responsability, Interpreter e Iterator.
d) Adapter, Bridge e Façade.
e) Abstract Factory, Builder e Composite.

(FCC - 2011 - TRT - 4ª REGIÃO (RS) - Analista Judiciário - Tecnologia da


Informação) O catálogo de padrões de projeto (Design Patterns) do GoF contém:

a) 20 padrões e está basicamente dividido em duas seções: Structural e


Behavioral.
b) 21 padrões e está basicamente dividido em duas seções: Creational e
Behavioral.
c) 23 padrões e está basicamente dividido em duas seções: Structural e
Behavioral.
d) 23 padrões e está, basicamente, dividido em três seções: Creational, Structural
e Behavioral.
e) 24 padrões e está basicamente dividido em três seções: Creational, Spectral
e Behavioral.

(FCC - 2011 - TRT - 14ª Região (RO e AC) - Analista Judiciário - Tecnologia da
Informação) No contexto dos padrões de projeto:
16712855225

I. Oferecer uma interface simples para uma coleção de classes.


II. Desacoplar uma abstração de sua implementação para que ambas possam
variar independentemente.

Correspondem respectivamente a:

a) Façade e Bridge.
b) Adapter e Façade.
c) Composite e Bridge.
d) Façade e Composite.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 91 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

e) Bridge e Adapter.

(FCC - - Infraero - Analista de Sistemas As associações entre classes e


objetos são tratadas pelos Padrões de Projeto de Software (Design Patterns) da
família de Padrões:

a) GoF Estruturais.
b) GRASP Comportamentais.
c) GRASP Estruturais.
d) GoF de Criação.
e) GoF Comportamentais.

10. (FCC - 2013 – DPE/SP - Analista de Sistemas) Um design pattern descreve uma
solução geral comprovada e reutilizável para um problema recorrente no
desenvolvimento de sistemas de software orientados a objetos. Padrões de
projeto ajudam a reconhecer e implementar boas soluções para problemas
comuns. Dois dos principais design patterns utilizados atualmente são descritos
a seguir:

I. Visa garantir que uma classe só tenha uma única instância e prover um ponto
de acesso global a ela.
II. Visa definir uma dependência um-para-muitos entre objetos para que quando
um objeto mudar de estado os seus dependentes sejam notificados e atualizados
automaticamente.

Os design patterns descritos em I e II são, respectivamente:

a) Singleton e Observer.
b) Facade e Adapter. 16712855225

c) Composite e Adapter.
d) Singleton e Command.
e) Facade e Observer.

11. (FCC - 2013 – TRT/15 - Analista de Sistemas) Os padrões Gang of Four (GoF)
organizam um conjunto de padrões de projeto (design patterns) em três grupos:
de criação, estruturais e comportamentais. Três destes padrões são descritos a
seguir:

I. Em situações em que classes precisam trabalhar juntas, mas isto não está sendo
possível porque suas interfaces são incompatíveis, pode-se utilizar este design

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 92 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

pattern que permite converter a interface de uma classe em outra interface


esperada pelos clientes de forma que classes com interfaces incompatíveis
possam interagir.

II. Este design pattern pode ser utilizado quando se deseja definir uma
dependência um-para-muitos entre objetos de modo que quando um objeto
muda o estado, todos seus dependentes são notificados e atualizados.

III. Em situações em que se deseja acessar o conteúdo de uma coleção sem expor
sua representação interna utiliza-se este design pattern que permite prover uma
interface única para varrer coleções diferentes.

Os padrões descritos nos itens I, II e III são, respectivamente,

a) Adapter, Facade e Strategy.


b) Prototype, Composite e Command.
c) Abstract Factory, Observer e Iterator.
d) Adapter, Observer e Iterator.
e) Abstract Factory, Composite e Command.

12. (FCC – 2013 – AL/RN– Analista de Sistemas Analise as seguintes afirmações:

I. Fornece uma interface para a criação de uma família de objetos relacionados


ou dependentes sem fornecer os detalhes de implementação das classes
concretas.

II. Converte uma interface de uma classe existente em outra interface esperada
pelos clientes. Permite que algumas classes com interfaces diferentes trabalhem
em conjunto. 16712855225

III. Separa uma implementação de sua abstração, de forma que ambas possam
variar independentemente.

IV. Separa a construção de um objeto complexo de sua representação, de modo


que o mesmo processo possa criar representações diferentes.

Tratam, respectivamente, dos design patterns:

a) Builder − Adapter − Bridge − Abstract Factory.


b) Abstract Factory − Adapter − Bridge − Builder.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 93 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

c) Bridge − Adapter − Builder − Abstract Factory.


d) Adapter − Builder − Abstract Factory − Bridge.
e) Builder − Bridge − Abs tract Factory − Adapter.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 94 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


PADRÕES DE PROJETO GOF

(ESAF - 2005 – AFRFB - Analista de Sistemas) Analise as seguintes afirmações


relacionadas a padrões de projetos:

I. O padrão Builder separa a construção de um objeto complexo de sua


representação, de modo a que o mesmo processo de construção possa criar
diferentes representações.

II. O método Abstract Factory fornece uma interface para a criação de uma
família de objetos relacionados ou dependentes sem especificar suas classes
completas.

III. O padrão Bridge define uma interface para criar um objeto, mas deixa as
subclasses decidirem que classe será instanciada. O Bridge permite a uma classe
postergar a instanciação das subclasses.

IV. O Chain of responsability usa compartilhamento para suportar grandes


quantidades de objetos e define uma dependência um-para-muitos entre
objetos, de modo que quando um objeto muda de estado, todos os seus
dependentes são automaticamente notificados e atualizados.

Indique a opção que contenha todas as afirmações verdadeiras.

a) I e III.
b) II e III. 16712855225

c) III e IV.
d) I e II.
e) II e IV.

(ESAF – 2008 – CGU - Analista de Sistemas) Ao longo das últimas décadas, a


engenharia de software fez progressos significativos no campo de padrões de
projeto – arquiteturas comprovadas para construir software orientado a objetos
flexível e fácil de manter. Com relação ao padrão Facade, é correto afirmar que:

a) Fornece um objeto representante ou um marcador de outro objeto para


controlar o acesso ao mesmo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 95 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

b) Define o esqueleto de um algoritmo em uma operação, postergando a


definição de alguns passos para subclasses.
c) Define uma interface para criar um objeto, mas deixas as subclasses decidirem
qual classe a ser instanciada.
d) Fornece uma interface unificada para um conjunto de interfaces em um
sistema.
e) Define uma dependência “um para muitos” entre objetos, de modo que,
quando um objeto muda de estado, todos os seus dependentes são
automaticamente notificados e atualizados.

(ESAF – – CGU - Analista de Sistemas Quanto à finalidade, os padrões de


projeto podem ser classificados em padrões de criação, padrões de estutura ou
padrões comportamentais. Correspondem à categoria de padrões estruturais:

a) Facade, Prototype e Proxy.


b) Adapter, Composite e Proxy.
c) Adapter, Factory Method e Template Method.
d) Builder, Template Method e Strategy.
e) Adapter, Bridge e Singleton.

16712855225

(FGV – 2008 – AL - Analista de Sistemas Considera as seguintes assertivas sobre


as vantagens do uso de padrões de software (software patterns):

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 96 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

I. Padrões de projeto proporcionam um vocabulário comum de projeto,


facilitando comunicação, documentação e aprendizado dos sistemas de
software.

II. Padrões de projeto auxiliam no desenvolvimento de software por meio da


reutilização do projeto de soluções computacionais já testadas e aprovadas.

III. Uma biblioteca de padrões pode ajudar a melhorar e padronizar o


desenvolvimento de software.

As assertivas corretas são:

a) somente II.
b) somente I e II.
c) somente I e III.
d) somente II e III.
e) I, II e III.

(ESAF – 2012– CGU – Analista de Sistemas O padrão de projeto singleton é


usado para restringir:

a) a instanciação de uma classe para objetos simples.


b) a instanciação de uma classe para apenas um objeto.
c) a quantidade de classes.
d) as relações entre classes e objetos.
e) classes de atributos complexos.

(FEMPERJ – 2012 – TCE/RJ – Analista de Sistemas Padrões de Projeto descrevem


soluções para problemas recorrentes no desenvolvimento de sistemas de
16712855225

software orientados a objetos. Um padrão de projeto estabelece um nome e


define o problema, a solução, quando aplicar esta solução e suas consequências.
Um dos padrões de projeto mais utilizados é o padrão Adapter (adaptador), que
tem como função:

a) garantir a existência de apenas uma instância de uma classe, mantendo um


ponto global de acesso ao seu objeto.

b) adicionar dinamicamente um comportamento a um objeto existente sem


alterar o código das classes existentes.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 97 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

c) fornecer uma interface para a criação de famílias de objetos correlatos ou


dependentes sem a necessidade de especificar a classe concreta destes objetos.

d) definir novas operações sem alterar as classes dos elementos sobre os quais
ele opera.

f) permitir que classes com interfaces incompatíveis possam interagir.

(ESAF – 2012– ATRFB – Analista de Sistemas) Os padrões de projeto (Design


Patterns) são classificados nas categorias:

a) Situacional. Estrutural. Complementar.


b) Criacional. Evolutiva. Contingencial.
c) Compartimental. Vinculada. Comportamental.
d) Criacional. Step-by-step. Orientada a requisitos.
e) Criacional. Estrutural. Comportamental.

(FGV – 2013 – AL/MA – Analista de Sistemas Com relação ao tema Padrões de


Projeto, conforme descritos por Gamma et Alli, sobre o padrão Prototype, analise
as afirmativas a seguir.

I. Apresenta como benefícios adicionais a adição e a remoção de produtos em


tempo de execução.
II. Apresenta como benefícios adicionais a especificação de novos objetos pela
variação de seus valores e/ou de sua estrutura.
III. Apresenta como benefícios adicionais a redução da necessidade de criação
de subclasses.

Assinale: 16712855225

a) se somente a afirmativa I estiver correta.


b) se somente a afirmativa II estiver correta.
c) se somente a afirmativa III estiver correta.
d) se somente as afirmativas I e II estiverem corretas.
e) se todas as afirmativas estiverem corretas.

(FGV – 2015 – AL/Caruaru – Analista de Sistemas) O catálogo denominado


Padrões GoF (‘Gang of Four’) define soluções reutilizáveis para problemas
frequentes em projetos de sistemas de software.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 98 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

Essas soluções estão organizadas em três famílias conforme o propósito de cada


solução.

Os padrões de projetos denominados Interpreter, Prototype e Flyweight que


fazem parte desse catálogo, pertencem, respectivamente, às seguintes famílias:

a) padrão comportamental, padrão de criação e padrão estrutural.


b) padrão estrutural, padrão comportamental e padrão de criação.
c) padrão comportamental, padrão estrutural e padrão de criação.
d) padrão estrutural, padrão de criação e padrão comportamental.
e) padrão de criação, padrão comportamental e padrão estrutural.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 99 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


PADRÕES DE PROJETO JAVA EE

(CESPE - 2012 – TJ/R – Analista de Sistemas) O padrão de projeto JEE que


encapsula a complexidade das interações entre os objetos de negócios
participantes de um fluxo de trabalho, ou seja, que esconde do cliente a
complexidade de interação entre os participantes, encapsulando a lógica de
negócios associada aos requisitos, é denominado:

a) service activator.
16712855225

b) session facade.
c) Ajax.
d) intercepting filter.
e) front controller.

(CESPE - – CENSIPAM – Analista de Sistemas) Entre os objetivos do padrão


Business Delegate na plataforma J2EE, incluem-se: reduzir o acoplamento entre
clientes na camada de apresentação e os serviços providos pela camada de
negócio; reduzir o tráfego entre os clientes na camada de apresentação e a

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 100 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

camada de negócio; reduzir o impacto de mudanças na camada de negócios


sobre a camada de apresentação.

(CESPE - – CENSIPAM – Analista de Sistemas) Entre os objetivos do padrão


DAO na plataforma J2EE, incluem-se: abstrair e encapsular os acessos às fontes
dos dados; gerenciar as conexões com as fontes dos dados; implementar o
mecanismo de acesso necessário para se usar uma fonte de dados; isolar
detalhes de implementação relacionados ao acesso às fontes dos dados visando
facilitar a migração entre diferentes fontes de dados.

(CESPE - 2012 – TJ/RO – Analista de Sistemas) O padrão de projeto JEE (J2EE


patterns) que é utilizado para solucionar problemas de acesso e manipulação de
dados em uma camada separada e que implementa mecanismos de acesso para
persistência de dados, em arquitetura mainframes, LDAP ou sistemas
gerenciadores de banco de dados relacionais é denominado:

a) transfer object.
b) value list handler.
c) transfer object assembler.
d) JDBC.
e) data access object.

(CESPE - 3 – MPE/MA – Analista de Sistemas) Em uma aplicação web


desenvolvida com Java utilizando o padrão MVC, as servlets e as classes no
padrão DAO são representadas, respectivamente, nos componentes:

a) Controller e View.
b) View e Model.
c) Controller e Model. 16712855225

d) Model e Controller.
e) View e Controller.

(FCC - – BACEN – Analista de Sistemas) Considerando que os padrões de


projeto J2EE possuem os padrões de apresentação e estes levam em
consideração a lógica requerida para que o cliente acesse um sistema J2EE,
analise:

I. Comb Filter é um padrão de apresentação que combina consolidação de


dados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 101 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

II. Intercepting Filter facilita o pré-processamento e o pós-processamento de


uma requisição.
III. Front Controller provê um controle centralizado para o gerenciamento do
tratamento das requisições.
IV. Single View cria uma única pesquisa para acesso a dados combinados.

É correto o que consta APENAS em:

a) I e III.
b) I e IV.
c) II e III.
d) II, III e IV.
e) IV.

(FCC – 2015 – TRT/MG – Analista de Sistemas) O Java EE pode ser organizado


em três conjuntos de padrões de projeto, de acordo com as camadas da
arquitetura JEE: Padrões da Camada de Apresentação (Web Tier Patterns),
Padrões da Camada de Negócio (Business Tier Patterns) e Padrões da Camada
de Integração (EIS Tier Patterns). São padrões de projeto da Camada de
Apresentação:

a) Intercepting Filter e Front Controller.


b) Session Façade e Composite Entity.
c) Service Activator e Web Service Broke.
d) Data Access Object e View Helper.
e) Application Service e Transfer Object.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 102 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

LISTA DE EXERCÍCIOS COMENTADOS (BANCAS DIVERSAS)


PADRÕES DE PROJETO GRASP

(CESPE - 2013 – TCE/RO – Analista de Informática) O padrão Pure Fabrication


objetiva designar a responsabilidade unívoca pela criação de uma nova instância
de uma classe.

(CESPE - 2013 – TCE/RO – Analista de Informática) Nos casos em que a solução


oferecida pelo padrão Expert violar a alta coesão e o baixo acoplamento, o
padrão adequado a ser aplicado será o Creator, que atribui um conjunto
altamente coesivo de responsabilidades a uma classe artificial que não
representa um conceito do domínio do problema.

(CESPE - 2013 – TCE/RO – Analista de Informática) O padrão Indirection é


utilizado para atribuir responsabilidades à classe que tiver a informação
necessária para satisfazer a responsabilidade.

(CESPE - 2013 – TCE/RO – Analista de Informática) O padrão Don’t Talk to


Strangers é utilizado para fortalecer o polimorfismo, realizado pelo padrão
Polymorphism. O objetivo de ambos os padrões é substituir um componente
sem afetar outro componente, embora o primeiro implemente o polimorfismo
em nível de classe e o segundo lide com alternativas embasadas no tipo de
componente.

(CESPE - 2013 - CNJ - Analista Judiciário - Análise de Sistemas) Os padrões:


Controller; Polimorfismo; e Information Expert, são considerados do tipo GRASP
porque cada um embute uma forma de atribuição de responsabilidades a
16712855225

objetos. No caso do Controller, a responsabilidade é concernente ao tratamento


de eventos. No caso do Polimorfismo, a responsabilidade é concernente à
variação de comportamento, conforme o tipo do objeto. No caso do Information
Expert, a responsabilidade concerne à disponibilidade de informações que
permitem o desempenho de uma responsabilidade.

(CESPE - 2010 - MPU – Desenvolvimento de Sistemas) GRASP (general


responsibility assignment software patterns) consiste em um conjunto de sete
padrões básicos para atribuir responsabilidades em projeto orientado a objetos:
information expert, creator, controller, low coupling, high cohesion,
polymorphism e pure fabrication.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 103 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

(CESPE - – SERPRO – Desenvolvimento de Sistemas) No polimorfismo, que


é um tipo de padrão GRASP, um mesmo método pode apresentar várias formas.

(CESPE - - SERPRO - Analista - Desenvolvimento de Sistemas) Expert é um


padrão que apresenta uma interface para várias funcionalidades de uma API de
maneira simples e fácil de usar.

(CESPE - 2010 - SERPRO - Analista de Sistemas) Os padrões GRASP (general


responsibility assignment software patterns) consistem em modelos de
distribuição de responsabilidades a classes e objetos em implementações
orientadas a objetos. Os principais exemplos de padrões GRASP são: Information
Expert, Creator, Visitor, Controller, Iterator, Low Coupling, High Cohesion,
Polymorphism, State, Strategy, Pure Fabrication, Indirection, Proxy e Protected
Variations.

10. (CESPE - 2014 – SUFRAMA - Analista de Sistemas) Enquanto os padrões GRASP


refletem práticas mais pontuais da aplicação de técnicas orientadas a objetos, os
padrões de projeto GoF (Gang of Four) exploram soluções mais específicas.
Dessa forma, não há, no GRASP, um padrão que ajude a solucionar, por
exemplo, a definição de qual classe deve ser a responsável por lidar com um
evento de determinada interface.

11. (CESPE - 2014 – SUFRAMA - Analista de Sistemas) Em um cenário em que é


necessário minimizar dependências e maximizar o reúso, bem como atribuir uma
responsabilidade para que o acoplamento mantenha-se fraco, o padrão Expert
é mais adequado que o padrão Low Coupling.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 104 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


PADRÕES DE PROJETO GOF

1 2 3 4 5 6 7 8 9 10
E C C C C C E C C E
11 12 13 14 15 16 17 18 19 20
E E E C E E E E E C
21 22 23 24 25 26 27 28 29 30
E C C C C E E C A C
31 32 33 34 35 36 37 38 39 40
E C C C E C C E

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


PADRÕES DE PROJETO GOF

1 2 3 4 5 6 7 8 9 10
E E D A C C D A A A
11 12 13 14 15 16 17 18 19 20
D B

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


PADRÕES DE PROJETO GOF
16712855225

1 2 3 4 5 6 7 8 9 10
D D B E B E E E A

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


PADRÕES DE PROJETO JAVA EE

1 2 3 4 5 6 7 8 9 10
B C C E C C A

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 105 de 106


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 02

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS)


PADRÕES DE PROJETO GRASP

1 2 3 4 5 6 7 8 9 10
E E E E C E C E E E
11 12 13 14 15 16 17 18 19 20
E

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 106 de 106


Aula 03

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

AULA 03

SUMÁRIO PÁGINA
Apresentação 01
- Java: Conceitos Básicos 02
- Java: Sintaxe 12
- Java: Orientação a Objetos 33
- Java: Conceitos Avançados 48
Lista de Exercícios Comentados 135
Gabarito 161

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: CONCEITOS BÁSICOS

Vamos falar agora sobre uma das linguagens mais famosas do mundo! Professor, o
que é Java? É uma linguagem de programação orientada a objetos, multiplataforma,
robusta, portável, segura, extensível, concorrente e distribuída. E ela é totalmente
orientada a objetos? Não! Por que não? Porque nem todos os seus tipos de dados
são objetos (possui alguns tipos primitivos: int, float, long, double, char, etc).

Só por causa disso, professor? Não, ela também não suporta Herança Múltipla!
Entendi, mas existe alguma linguagem totalmente orientada a objetos? Sim, por
exemplo: Smalltalk! E ela é uma linguagem compilada ou interpretada? Na verdade,
ela é híbrida, i.e., ela é compilada e interpretada! Professor, ouvi dizer que Java é
lento! É verdade? Atualmente, não!

De fato, era lenta no início! No entanto, na década passada houve diversas


melhorias na Java Virtual Machine (JVM) e em seu Compilador JIT1. Hoje em dia, o
desempenho geral do Java é absurdamente rápido de acordo com diversos
benchmarks. A Máquina Virtual é capaz de realizar diversas otimizações por meio
de algoritmos heurísticos e o Compilador é capaz de identificar hotspots.

Vocês sabiam que Java é uma Linguagem WORA? Pois é, esse acrônimo significa
Write Once, Run Anywhere ou Escreva uma vez, execute em qualquer lugar. Trata-se
de um slogan para exemplificar os benefícios multiplataforma da linguagem Java!
Idealmente, isso significa que um programa em Java (uma vez compilado em um
bytecode) pode rodar em qualquer equipamento que possua uma JVM!

A linguagem Java foi criada pela Sun Microsystems, que depois foi adquirida pela
16712855225

Oracle, por quem é mantida atualmente. Por que ela é uma linguagem concisa e
simples? Porque não contém redundâncias e é fácil de entender, implementar e
utilizar. Ela possui sintaxe bastante parecida com C++, facilitando o aprendizado e
a migração por novos programadores.

Professor, Java é robusta? Sim! Além de ser fortemente tipada, foi desenvolvida para
garantir a criação de programas altamente confiáveis. Ela não dispensa uma
programação cuidadosa, porém elimina alguns tipos de erros de programação

1
Compilador Just-In-Time (JIT) é o compilador que altera a maneira na qual programas em Java são executados,
geralmente otimizando-os e tornando-os mais rápidos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

possíveis em outras linguagens. A ausência da aritmética de ponteiros também


exclui toda uma classe de erros relacionados a esse tipo de estrutura.

O acesso a arrays strings, e a conversão de tipos são checados em tempo de


execução para assegurar a sua validade. O Garbage Collector2 faz a desalocação
automática de memória evitando, erros de referência e desperdício de memória.
Finalmente, o recurso de Exception Handling permite o tratamento de erros em tempo
de execução, por um mecanismo robusto, análogo ao do C++.

Java é também uma linguagem portável e multiplataforma! O Compilador é capaz


de gerar um código intermediário (bytecode), que permite que o mesmo programa
possa ser executado em qualquer máquina ou sistema operacional que possua uma
JVM. Ademais, busca que todos os aspectos da linguagem sejam independentes de
plataforma (Ex: ela especifica o tamanho e comportamento de cada tipo de dado).

Dessa forma, aplicações funcionam da mesma maneira em qualquer ambiente.


Podemos dizer que Java é uma linguagem concorrente ou multithreaded, i.e., pode
realizar diversas tarefas assincronamente com o uso de threads, que são suportadas
de modo nativo. Java torna a manipulação de threads tão simples quanto trabalhar
com qualquer variável.

Java é uma linguagem distribuída, i.e., foi projetada para trabalhar em um ambiente
de redes, oferecendo bibliotecas para facilitar a comunicação, manipulando objetos
distribuídos e oferecendo suporte à conectividade (Ex: URL, Sockets, Protocolos, etc).
Ela também é uma linguagem segura, implementando encapsulamento,
restringindo o acesso e a execução de diversos programas, tratando exceções, etc.

Além disso, possui um verificador de bytecodes, que investiga e procura códigos


maliciosos que eventualmente podem ter sido inseridos, rompendo com a
16712855225

integridade dos dados. Por fim, ele também possui o Security Manager, utilizado
para impedir, por exemplo, que applets executem códigos arbitrariamente. Isso
impede o acesso direto a informações pela memória ou inserir código estranho.

Para finalizar, cabe salientar que Java é uma linguagem absurdamente extensível.
Por que, professor? Porque ela integra diversas bibliotecas com o código nativo, além
de permitir o carregamento dinâmico de classes em tempo de execução. Em outras
palavras, os programas são formados por uma coleção de classes armazenadas
independentemente e que podem ser carregadas no momento de utilização.
2
Garbage Collector (ou Coletor de Lixo) é o responsável pela automação do gerenciamento de memória. Ele é
capaz recuperar uma área de memória inutilizada por um programa, evitando vazamento de memória.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: PLATAFORMA JAVA

Java é tanto uma plataforma quanto uma linguagem de programação orientada a


objetos que permite o desenvolvimento de aplicações em diversas plataformas
diferentes. Como já foi dito anteriormente, Java está presente desde dispositivos
pequenos (Smartphone, Tablet, etc) a máquinas de grande porte (Servidores,
Mainframes, etc). A linguagem Java possui quatro ambientes de desenvolvimento:

 Java Standard Edition (Java SE): trata-se de uma ferramenta de


desenvolvimento para a Plataforma Java. Ela contém todo o ambiente
necessário para a criação e execução de aplicações Java, incluindo a Máquina
Virtual (JVM), Compilador (Javac), Bibliotecas (APIs), entre outras ferramentas.
Em geral, rodam em computadores pessoais, notebooks, etc.

 Java Enterprise Edition (Java EE): trata-se do padrão para desenvolvimento


de sistemas corporativos, voltada para aplicações multicamadas, baseadas
em componentes executados em servidores de aplicações – ele inclui o Java
SE. Contém bibliotecas para acesso a base de dados, RPC, CORBA, entre
outras. As aplicações podem ou não estar na internet.

 Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos


compactos ou móveis, como smartphones, tablets, controles remotos, etc.
Permite o desenvolvimento de softwares embarcados, i.e., aplicações que
rodam em um dispositivo de propósito específico, desempenhando alguma
tarefa útil. Em geral, possuem limitações de recursos como memória ou
processamento.

 Java Card: tecnologia que permite que pequenos aplicativos baseados em


Java (conhecidos como Applets) sejam executados com segurança em
16712855225

smartcards e outros dispositivos similares com grandes limitações de


processamento e armazenamento. Sabe o chip do seu celular? Java Card!
Sabe o chip do cartão de crédito? Java Card!

 Java FX: trata-se de uma plataforma de software multimídia para a criação e


disponibilização de Rich Internet Application (RIA) que pode ser executada
em diversos dispositivos diferentes. Ele permite a criação de aplicações ricas
para navegadores, smartphones, televisores, video-games, blu-rays, etc – são
os menos conhecidos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Um programa escrito para a plataforma Java necessita de um ambiente de execução


chamado Java Runtime Environment (JRE)! O que tem nesse negócio, professor? Ele
contém uma Máquina Virtual (JVM) e Bibiliotecas (APIs). E o Java Development Kit
(JDK)? Bem, eles contêm a JRE e outros componentes úteis para executar aplicações
(Exemplo: Javac, Javadoc, Jar, Appletviewer, Jconsole, Jstack, Jhat, etc).

Portanto, é o seguinte: se você deseja somente executar alguma aplicação Java no


seu computador ou navegador, basta instalar um JRE! No entanto, se você planeja
programar em Java, você precisará de um JDK (que contém a JRE)! Entenderam? É
bastante simples! JRE é o mínimo que você precisa para rodar uma aplicação e o
JDK é o que você precisa para desenvolver uma aplicação!

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: COMPILAÇÃO E INTERPRETAÇÃO

A Linguagem Java tem dois processos de execução de código-fonte: Compilação e


Interpretação! Vamos lá... o programador escreve um código em Java em um editor
de texto, por exemplo. Ele salva com a extensão .java e passa por um compilador
(JavaC)! Esse compilador transforma o arquivo .java em código de máquina e em um
arquivo .class, também chamado bytecode – como mostra a imagem abaixo.

O bytecode é um código intermediário, que é posteriormente interpretado e


executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

16712855225

Por conta deles, programas escritos em Java podem funcionar em qualquer


plataforma de hardware e software que possua uma JVM, tornando assim essas
aplicações independentes da plataforma, como apresenta a imagem acima (Win32,

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma


geladeira. A imagem abaixo é similar à anterior, apenas para solidificar!

Uma observação importante: Código Java é sempre compilado em um bytecode.


No entanto, nem todo bytecode é proveniente de Código Java. Como assim,
professor? É isso mesmo! Por exemplo: eu posso compilar o Código Ada em um
bytecode e rodá-lo em uma JVM! E quais outras linguagens? Temos também Eiffel,
Pascal, Python, C.

A JVM é capaz de entender bytecodes – assim como nós somos fluentes em


português, ela é fluente em bytecode. Para criar bytecodes, basta seguir um
conjunto de regras de formação. Logo, se existe um compilador que seja capaz de
transformar o código-fonte (de qualquer linguagem) em uma bytecode seguindo
16712855225

as especificações corretamente, o bytecode poderá ser interpretado por uma JVM.

CURIOSIDADE

A Sun Microsystems declarou recentemente que existem atualmente cerca de 5.5 bilhões de
dispositivos executando uma Java Virtual Machine (JVM).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: PASSAGEM POR VALOR E POR REFERÊNCIA

Vamos falar sobre passagem de parâmetros por valor e por referência. Vocês sabem
que, quando o módulo principal chama uma função ou procedimento, ele passa
alguns valores chamados Argumentos de Entrada. Esse negócio costuma confundir
muita gente, portanto vou explicar por meio de um exemplo, utilizando a função
DobraValor(valor1, valor2) – apresentada na imagem abaixo:

#include <stdio.h>

void DobraValor(int valor1, int valor2)


{
valor1 = 2*valor1;
valor2 = 2*valor2;

printf("Valores dentro da Função: \nValor 1 = %d\n Valor 2 = %d\n",valor1,valor2);


}

int main()
{
int valor1 = 5;
int valor2 = 10;

printf("Valores antes de chamar a Função:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2);


DobraValor(valor1,valor2);
printf("Valores depois de chamar a Função:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2);

return();
}

Essa função recebe dois valores e simplesmente multiplica sua soma por dois. Então
o que acontece se eu passar os parâmetros por valor para a função? Bem, ela
receberá uma cópia das duas variáveis e, não, as variáveis originais. Logo, antes de
a função ser chamada, os valores serão os valores iniciais: 5 e 10. Durante a chamada,
ela multiplica os valores por dois, resultando em: 10 e 20.

Valores antes de chamar a Função: 16712855225

Valor 1 = 5
Valor 2 = 10
Valores dentro da Função:
Valor 1 = 10
Valor 2 = 20
Valores depois de chamar a Função:
Valor 1 = 5
Valor 2 = 10

Após voltar para a função principal, os valores continuam sendo os valores iniciais:
5 e 10, como é apresentado acima na execução da função. Notem que os valores
só se modificaram dentro da função DobraValor( ). Por que, professor? Ora, porque foi
passada para função apenas uma cópia dos valores e eles que foram multiplicados
por dois e, não, os valores originais.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

#include <stdio.h>
void DobraValor(int *valor1, int *valor2)
{
*valor1 = 2*(*valor1);
*valor2 = 2*(*valor2);
printf("Valores dentro da Função: \nValor 1 = %d\n Valor 2 = %d\n", *valor1,
*valor2);
}
int main()
{
int valor1 = 5;
int valor2 = 10;

printf("Valores antes de chamar a Função:\nValor 1 = %d\nValor 2 =


%d\n",valor1,valor2);
DobraValor(&valor1,&valor2);
printf("Valores depois de chamar a Função:\nValor 1 = %d\nValor 2 =
%d\n",valor1,valor2);

return();
}

Professor, o que ocorre na passagem por referência? Bem, ela receberá uma
referência para as duas variáveis originais e, não, cópias. Portanto, antes de a função
ser chamada, os valores serão os valores iniciais: 5 e 10. Durante a chamada, ela
multiplica os valores por dois, resultando em: 10 e 20. Após voltar para a função
principal, os valores serão os valores modificados: 10 e 20.

Valores antes de chamar a Função:


Valor 1 = 5
Valor 2 = 10
Valores dentro da Função:
Valor 1 = 10
Valor 2 = 20
Valores depois de chamar a Função:
Valor 1 = 10
Valor 2 = 20

Notem que os valores se modificaram não só dentro da função DobraValor( ), como


16712855225

fora também (na função principal). Por que isso ocorreu, professor? Ora, porque foi
passada para função uma referência para os valores originais e eles foram
multiplicados por dois, voltando à função principal com os valores dobrados! Por
isso, os valores 10 e 20.

Resumindo: a passagem de parâmetro por valor recebe uma cópia da variável


original e qualquer alteração não refletirá no módulo principal. A passagem de
parâmetro por referência recebe uma referência para a própria variável e qualquer
alteração refletirá no módulo principal. Agora atenção máxima: em Java, a
passagem de parâmetros é sempre, sempre, sempre por valor! Bacana?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: EMPACOTAMENTO

Utilizamos pacotes para organizar as classes semelhantes! Grosso modo, pacotes


são apenas pastas ou diretórios do sistema operacional onde ficam armazenados
os arquivos fonte de Java e são essenciais para o conceito de encapsulamento, no
qual são dados níveis de acesso às classes. O empacotamento gera um arquivo .jar,
que pode ser adicionado no classpath de uma aplicação.

Uma vez criada uma pasta (que será um pacote), deve-se definir para as classes a
qual pacote elas pertencem. Isso é feito pela palavra-reservada package:

package br.com.site.pacoteEstrategia;

Essa deve ser a primeira linha de comando a ser compilada na classe. Java possui
vários pacotes com outros pacotes internos e várias classes já prontas para serem
utilizadas. Dentre os pacotes, podemos determinar dois grandes: o pacote java, que
possui as classes padrões para o funcionamento da linguagem; e o pacote javax, que
possui pacotes de extensão que fornecem ainda mais classes e objetos.

Em geral, aquelas classes fortemente conectadas às funções nativas do sistema


operacional pertencem ao pacote java e as que não são tão fortemente conectadas
pertencem ao pacote javax. Para utilizar os milhares de classes contidas nos inúmeros
pacotes de Java devemos nos referenciar diretamente a classe ou importá- . Para
importar um pacote usamos a palavra-reservada import.

import javax.swing.JOptionPane;

Para separar um pacote de seu sub-pacote, usam-se pontos (br.com.site.pacoteEstrategia).


Ao utilizar o asterisco (*), todos os subpacotes do pacote são importados: import
16712855225

java.awt.* - isso importa todos os sub-pacotes pertencentes ao pacote java.awt.


entanto, podemos definir diretamente o pacote desejado: import javax.swing.JOptionPane.
Isso irá importar apenas o sub-pacote JOptionPane do pacote javax.swing.

A diferença entre as duas formas de importação de pacotes é o consumo de


recursos do computador. Como o asterisco importa todos os sub-pacotes, o
consumo de memória será alto e, muito provavelmente, não usaremos todas as
classes de todos os pacotes importados. Por isso, o recomendado é sempre
importar apenas o pacote que será utilizado. A ordem é Package, Import e Class.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: RAÍZ

Muitas linguagens orientadas a objetos (como o C++) não suportam a noção de


existir uma única classe a partir da qual todas as outras classes são derivadas, sem
que isso seja um impedimento à linguagem. Entretanto, na linguagem Java, a falta
desse tipo de classe tornaria a linguagem limitada. Todos os objetos da linguagem
Java são de múltiplas camadas.

Cada classe, na hierarquia de classes, representa uma camada que adiciona diversas
capacidades a um objeto. No topo desta hierarquia você sempre vai encontrar uma
classe chamada de Object (Objeto). Qualquer classe estende implicitamente (sem
necessidade de declarar) a classe Object. Claro que, na maioria das vezes, isso ocorre
indiretamente. Bacana, pessoal?

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: SINTAXE

JAVA: IDENTIFICADORES

Antes de tudo, é importante ressaltar que o Java é case-sensitive (Flamengo é diferente


de flamengo). Identificador é o nome utilizado para representar variáveis, classes,
objetos, métodos, pacotes, interfaces, etc. Por exemplo: na matemática, utiliza-se
um nome para as incógnitas (x, y, z) que é o identificador daquela incógnita. No Java,
existem um conjunto de regras para criação do identificador:

Deve ser a combinação de uma ou mais letras e dígitos UNICODE-16: Letras: A-Z;
Letras: a-z; Underscore: _ ; Cifrão: $ ;Números: 0-9.

1. Não pode ser uma palavra-reservada (palavra-chave);


2. Não pode ser true, false ou null;
3. Não pode começar com números;
4. Não pode conter espaços em branco ou caracteres de formatação;

//CORRETO
int MyVariable, myvariable, MYVARIABLE;
int x, i, , OReilly;
int _myvariable, $myvariaBle, _9pins;

//INCORRETO
int My Variable; //Contém espaço
int 9pins; //Começa com um dígito
int a+c, test-1, o'reilly&; //Contém caractere não-alfanumérico

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: BLOCOS E COMANDOS

Blocos de programação são aglomerados de instruções e declarações que têm


escopo conjunto. Em outras palavras, as variáveis definidas como locais dentro de
um bloco somente serão presentes dentro deste bloco, assim como as instruções
ali presentes. Os blocos de programação são delimitados por chaves { } e podem
ser aninhados, já os comandos sempre são terminados com ponto-e-vírgula.

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone {
public static void main (String[] args) throws java.lang.Exception
{ //Início Bloco 1

int a = 10;
int b = 1;

if (b==3)
{ //Início Bloco 2
b = a*10;
}
else
{ //Início Bloco 3
int a = 100;
b = a*10;
}
System.out.println("O valor de b é " + b);

}
}

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: COMENTÁRIOS

Os comentários, como o próprio nome preconiza, são notas que podem ser
incluídas no código-fonte de um programa para descrever o que o desenvolvedor
desejar. Dessa forma, eles não modificam o programa executado e servem somente
para ajudar o programador a melhor organizar os seus códigos. Os comentários
em Java seguem a mesma sintaxe da linguagem C++:

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone {
public static void main (String[] args) throws java.lang.Exception {

/**
* Comentário de mais de uma linha!
**/

int a = 10;
int b = (int)(a*3.141592); //Comentário de única linha!

System.out.println("O valor de b é " + b);


}
}

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: PALAVRAS RESERVADAS

Java possui 52 palavras-reservadas: três palavras para modificar acesso; treze


palavras para modificar classes, variáveis e métodos; doze palavras para controle de
fluxo; seis palavras para tratar erros; duas palavras para controlar pacotes; oito
palavras para tipos primitivos; duas palavras para variáveis de referência; uma
palavra para retorno de método; e duas palavras reservadas não utilizadas.

Espera, professor! Mas eu contei e deu 49 palavras! É que null true false não são
consideradas tecnicamente palavras-reservadas, mas valores literais. No entanto,
isso é só tecnicamente, porque caso se tente criar identificadores com essas
palavras, resultará em erro de compilação. Vamos ver todas as palavras reservadas?
A tabela abaixo apresenta cada uma e sua descrição:

Palavras Descrição
abstract Aplicado a um método ou classe indica que a implementação completa deste
método ou classe é efetuada posteriormente, por uma subclasse. Caso seja
uma classe, significa que ela não pode ser instanciada.
boolean É um tipo de dados cujos valores podem ser true ou false.

break Comando para controle de laço, no estilo C/C++.

byte Tipo de dados inteiros com sinal, armazenado em formato binário na notação
de complemento a dois e tamanho de 8 bits.

case Indica uma opção entre várias em blocos switch.


16712855225

catch É utilizado juntamente com try, seu bloco é executado somente em caso de o
programa lançar uma exceção do tipo indicado no seu parâmetro.

char Para variáveis de caracteres, onde a sua representação interna equivale a


um tipo numérico.

class Para definir o início de um arquivo Java, todas as classes possuem pelo
menos essa palavra-chave.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

const Essa palavra não tem uso específico em Java mas mesmo assim é uma
palavra-chave.

continue Para pular a iteração atual de uma estrutura de repetição.

default Normalmente utilizado para o final de uma ou mais opções case´s de um


bloco catch.

do Estrutura de repetição que garante que o bloco será executado pelo menos
uma vez durante a execução do programa.

double Para variáveis numéricas e de pontos flutuantes com precisão de 64 bits.

else Complemento de estrutura de condição.

enum Palavra-chave adicionada na versão 5 do Java; é um tipo específico de dados


que assemelha-se com uma classe que tem operações e dados internos.

extends Utilizado para aplicar o conceito de herança para uma classe, onde uma
classe receberá os métodos e variáveis de instância da classe chamada de
pai.
final Marca uma variável, classe ou método para que não seja possível modificar
o seu valor ou comportamento no decorrer da execução do programa.

finally Compõe o início de um bloco que sempre é executado para um bloco de


16712855225

tratamento de erros, mais utilizado para limpar recursos que foram abertos
no bloco de tratamento.
float Variáveis numéricas e de pontos flutuantes com precisão de 32 bits.

for Estrutura de repetição que declara, testa e incrementa variável para uso
local.

goto Não tem uso específico na linguagem.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

if Estrutura de condição mais comum na linguagem.

implements Informa que uma determinada classe irá implementar uma determinada
interface.

import Para relacionar classes externas à atual, permitindo o uso de nomes mais
curtos para recursos da classe externa.

instanceof Testa se um objeto é uma instância de uma classe específica ou se é null.

int Para variáveis numéricas de precisão -2.147.483.648 até 2.147.483.647.

interface Informa que o modelo não é uma classe, mas sim um protótipo de classe sem
implementação para os métodos, obrigando as classes que a implementarão
a seguir as determinadas regras.
long Para variáveis numéricas de precisão de 64 bits.

native Métodos marcados como native dizem que sua implementação é feita em uma
outra linguagem (por exemplo, C), para que se possa acessar recursos
específicos do sistema operacional.
new Utilizada para se criar novas instâncias de objetos.

16712855225

package Informa em que estrutura de diretórios a classe está localizada.

private Marca a visibilidade de um método ou variável de instância para que apenas


a própria classe acesse.

protected Marca a visibilidade de um método ou variável de instância para que a própria


classe ou suas filhas acessem.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

public Marca a visibilidade de uma classe, método ou variável de instância para que
todas as classes em todos os pacotes tenham acesso.

return Devolve para o método chamador de um valor que é do mesmo tipo declarado
na assinatura do método.

short Para variáveis numéricas de precisão de -32.768 até 32.767.

static Marca um método ou variável para que se tenha apenas uma cópia da
memória desse membro.

strictfp Serve para aumentar a precisão em operações com pontos flutuantes.

super Chama membros da classe-pai.

switch Representa blocos de decisões de fluxos semelhantes ao if, mas com mais
organização em determinadas situações.

synchronized Um método com essa marcação será controlado para que não se possa ter
duas threads acessando o mesmo objeto.

this Representa a instância que está atualmente sendo executada.

throw É utilizado para lançar uma exceção.


16712855225

throws É utilizado para se declarar que um método pode lançar uma exceção.

transient Indica que uma determinada variável de instância não será serializada junto
com o objeto da classe.

try Para executar métodos que têm chances de lançar exceções, mas que serão
tratados em blocos catch que o seguirão.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

void Representa um retorno vazio, i.e., nenhum retorno para esse método.

volatile Indica que uma determinada variável de instância pode ser modificada em
duas threads distintas ao mesmo tempo.

while Bloco de repetição que será executado enquanto seu parâmetro estiver
retornando true.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: TIPOS PRIMITIVOS

A linguagem Java oferece um total de oito tipos primitivos para criação de


programas. Esses tipos são utilizados para declarar variáveis que auxiliam na
construção dos algoritmos. Apesar de a linguagem oferecer tantos tipos, muitos
deles são capazes de representar os mesmos tipos de dados, mas com uma
capacidade de armazenamento maior (maior quantidade de bits).

Variáveis do tipo byte, short, int e long, por exemplo, podem ser usadas para representar
números inteiros, variando em diferentes faixas de valores, embora os tipos int e long
sejam os mais utilizados. O mesmo acontece com variáveis do tipo float double, que
são usadas para representar números reais. O tipo boolean é usado para declarar
variáveis que podem assumir um os valores: true ou false.

NOME TIPO TAMANHO MÍNIMO MÁXIMO DEFAULT

LÓGICO boolean - false true false


CARACTERE char 16 bits 0 216 – 1 ‘\u0000’
byte 8 bits -27 27 – 1 0
short 16 bits -215 215 – 1 0
INTEIRO
int 32 bits -231 231 – 1 0
long 64 bits -263 263 – 1 0
float 32 bits 7 Casas Decimais 0.0
DECIMAL
double 64 bits 15 Casas Decimais 0.0

Variáveis booleanas são bastante usadas em comandos condicionais ou de


repetição. Finalmente, o tipo char é utilizado para representar caracteres, como, por
16712855225

exemplo, as letras de alfabetos de línguas de diferentes países. Apesar de, em alguns


programas, ser necessário o uso do tipo char para representar e permitir o
processamento de caracteres de uma frase, o mais comum é usar a classe String.

Galera, vou enfatizar isso novamente porque é realmente importante! String não é
um Tipo Primitivo! Bacana? String não é um Tipo Primitivo, nunca foi e jamais será
um Tipo Primitivo. Além disso, a Classe String pertence ao pacote Lang e herda
diretamente de Object. Outra coisa: posso escrever números na forma decimal (8),
octal (08) ou hexadecimal (0x8).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

OBSERVAÇÕES

O valor-padrão para um número decimal é Double; se o programador quiser que seja Float,
deve enviar como parâmetro o valor acrescido da letra f (Ex: 3.14f). Da mesma forma, o
valor-padrão para inteiro é um int. O único tipo primitivo que não pode ser atribuído a
nenhum outro tipo é o boolean.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: OPERADORES

Os operadores são sinais que representam atribuições, cálculos e ordem dos dados.
As operações seguem uma ordem de prioridades, ou seja, alguns cálculos são
processados antes de outros, assim como ocorre na matemática. Para manipular os
valores das variáveis de um programa, devemos utilizar os operadores oferecidos
pela linguagem de programação adotada.

ARITMÉTICOS ATRIBUIÇÃO RELACIONAIS LÓGICOS BIT A BIT


+ = > ! &
- += < && |
* -= >= || ^
/ *= <= <<
% /= != >>
%= == >>>
++ ?
-- instanceof

Operadores Aritméticos: +, -, *, /, %.

$Numero = 2 + 8; //$Numero = 2 + 8 = 10
$Numero = 8 - 2; //$Numero = 8 - 2 = 6
$Numero = 2 * 8; //$Numero = 2 * 8 = 16
$Numero = 8 / 2; //$Numero = 8 / 2 = 4
$Numero = 2 % 8; //$Numero = 2 % 8 = 8 (Resto da divisão de 2 por 8)

String $palavra1 = "Alô";


String $palavra2 = "Mundo!";

String $frase = $palavra1 + ", " + $palavra2; //$frase = "Alô, Mundo!"

Operadores de Atribuição: =, +=, -=, *=, /=, %=, ++, --. 16712855225

int $Numero = 5; //Atribui-se o valor 5 a variável $Numero

$Numero ++; //$Numero = $Numero + 1 = 5 + 1 = 6


$Numero --; //$Numero = $Numero - 1 = 6 1 = 5

$Numero += 3; //$Numero = $Numero + 3 = 5 + 3 = 8


$Numero -= 3; //$Numero = $Numero - 3 = 8 3 = 5

$Numero *= 3; //$Numero = $Numero * 3 = 5 * 3 = 15


$Numero /= 3; //$Numero = $Numero / 3 = 15 / 3 = 5

$Numero %= 3; //$Numero = $Numero % 3 = 5 % 3 = 2 (Resto da divisão de 5 por 3)

Operadores Relacionais: >, <, >=, <=, ==, != , ? , instanceof.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03
boolean Variavel_1;

Variavel_1 = 4 < 4; //FALSE: 4 não é menor que 4


Variavel_1 = 4 <= 4; //TRUE: 4 é menor ou igual a 4
Variavel_1 = 3 > 7; //FALSE: 3 não é menor que 7
Variavel_1 = 3 >= 7; //FALSE: 3 não é maior ou igual a 7
Variavel_1 = 1 == 1; //TRUE: 1 é igual a 1
Variavel_1 = 2 != 1; //TRUE: 2 é diferente de 1

int Variavel_2 = 4;
int Variavel_3 = 8;

Variavel_2 = (Variavel_2 > Variavel_3)? Variavel_2: Variavel_3;


//Variavel_2: 4 não é maior que 8, logo Variavel_2 recebe o valor de Variavel_3
Variavel_3 = (Variavel_2 < Variavel_3)? Variavel_2: Variavel_3;
//Variavel_3: 4 é menor que 8, logo Variavel_3 recebe o valor de Variavel_2

Moto $cg500 = new Moto();


Carro $celta = new Carro();

boolean Teste = $celta instanceof Carro; //TRUE: $celta é uma instância de Carro
boolean Teste = $cg500 instanceof Carro; //FALSE: $cg500 não é uma instância de Carro

Vamos ver abaixo um exemplo mais complexo:

//Caso 1: y = 2 e x = 2
int x = 0;
int y = x++ + ++x;

//Caso 2: y = 1 e x = 2
int x = 0;
int y = x++ + x++;

//Caso 3: y = 3 e x = 2
int x = 0;
int y = ++x + ++x;

//Caso 4: y = 2 e x = 2
int x = 0;
int y = ++x + x++;

Operadores Lógicos: !, &&, ||.


16712855225

boolean $Variavel;

$Variavel = (2<45) && (45<2) //$Variavel = TRUE && FALSE = FALSE


$Variavel = (2<45) || (45<2) //$Variavel = TRUE || FALSE = TRUE

!$Variavel //$Variavel = FALSE;


!$Variavel //$Variavel = TRUE;

Operadores Bit a Bit: &, |, ^, <<, >>, >>>.

int $Variavel;
$Variavel = 34 & 435; //000100010 & 110110011 = 100010 = 34 (Operação AND)
$Variavel = 34^46; //000100010 ^ 000101110 = 000001100 = 12 (Operação XOR)
$Variavel = 436|547; //0110110100 | 1000100011 = 1110110111 = 951 (Operação OR)

int $Variavel = -3; //$Variavel vale -3

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03
$Variavel = $Variavel >> 1 //$Variavel = 11111101 >> 1 = 11111110 = -2 (SHIFT RIGHT)
$Variavel = $Variavel << 1; //$Variavel = 11111110 << 1 = 11111100 = -4 (SHIFT LEFT)
$Variavel = $Variavel >>> 1; //$Variavel = 11111100 >>> 1 = NÚMERO GIGANTE

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: VETORES

Um vetor é uma estrutura de dados formada por um conjunto de dados ou outros


elementos de um mesmo tipo, podendo ter uma dimensão ou mais (quando tem
duas, é chamado de matriz) e cujo acesso aos dados é feito através de índices. Cada
item de um vetor é chamado de elemento. Cada um dos elementos possui uma
posição dentro do vetor, à qual referenciamos através do índice do elemento.

Para declarar um vetor e de uma matriz, devemos utilizar a seguinte sintaxe:

//Declaração 1
tipo[] identificador1;
tipo identificador1[];

//Declaração 2
tipo[] identificador2 = new tipo[];
tipo identificador2[] = new tipo[];

//Declaração 3 (Para duas dimensões)


tipo[][] identificador3;
tipo identificador3[][];

Para inicializar um vetor, devemos utilizar a seguinte sintaxe:

//Inicialização 1
int[] Vetor1 = {34,27,91,56};

//Inicialização 2 (Inválida)
int[] Vetor2 = new int[4];
Vetor2 = {34,27,91,56};

//Inicialização 3
int[] Vetor3 = new int[4];
Vetor3[0] = 34;
Vetor3[1] = 27;
Vetor3[2] = 91;
Vetor3[3] = 56; 16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: CONVERSÃO DE TIPOS

Muitas vezes precisamos fazer cálculos e guardar o resultado em alguma outra


variável para uso posterior, porém o tipo de resultado pode não condizer com o
tipo da variável que irá receber esse resultado, seja de outra variável ou resultado
de uma expressão matemática. A conversão de tipos primitivos é a transformação
de um tipo para outro. Essas conversões podem ser implícitas ou explícitas.

As conversões implícitas ocorrem quando atribuímos um valor de menor tipo em


uma variável de tipo maior. Este tipo de conversão também é conhecido como
conversão de ampliação e ocorrerá de forma automática porque um valor de menor
tipo sempre caberá em uma variável de maior tipo. Podemos ver um exemplo
representado abaixo:

import java.util.*; import java.lang.*; import java.io.*;

class Ideone {
public static void main (String[] args) throws java.lang.Exception {

System.out.println("Conversão Implícita:");
double a1 = 10*5.2 + 4 - 1.3;
System.out.println("Variável a1 = " + a1);
double a2 = 5/2; 16712855225

System.out.println("Variável a2 = " + a2);


double a3 = 5/2.0;
System.out.println("Variável a3 = " + a3);

System.out.println("\nConversão Explícita:");
int a4 = (int) (10*5.2 + 4 - 1.3);
System.out.println("Variável a4 = " + a4);
int a5 = (int) (5/2.0);
System.out.println("Variável a5 = " + a5);
}
}

O resultado das conversões implícitas e explícitas são apresentados abaixo:

Conversão Implícita:
Variável a1 = 54.7

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03
Variável a2 = 2.0
Variável a3 = 2.5

Conversão Explícita:
Variável a4 = 54
Variável a5 = 2

A conversão explícita ou de redução ocorre quando precisamos atribuir um valor


de tipo maior para uma variável de tipo menor. Nesse caso, precisamos informar
diretamente entre parênteses (antes da variável, literal ou resultado de uma
expressão) o tipo de dado que vamos converter. Existem 19 conversões implícitas e
22 conversões explícitas possíveis.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: CONTROLE DE FLUXO

Professor, o que é Controle de Fluxo? É como se controla o fluxo de um código, isto


é, como um programa executa suas tarefas! Por meio de comandos, tarefas podem
ser executadas seletivamente, repetidamente ou excepcionalmente. Não fosse o
controle de fluxo, um programa poderia executar apenas uma única sequência de
tarefas, perdendo seu dinamismo.

Em Java, temos duas estruturas: Seleção e Repetição. A Estrutura de Seleção (ou


Condição) consiste basicamente dos comandos if-else. Ele é empregado para
executar seletivamente ou condicionalmente um outro comando mediante um
critério de seleção. Esse critério é dado por uma expressão, cujo valor resultante
deve ser um dado do tipo booleano, isto é, true ou false.

Se esse valor for true, então o outro comando é executado; se for false, a execução
do programa segue adiante. A sintaxe do if-else é apresentada abaixo:

if(CondiçãoBooleana) {
comando1;
comando2;
(...)
comandoN;
}
else {
comando1;
comando2;
(...)
comandoN;
}

Uma variação desse comando, o if-else permite escolher alternadamente entre dois
outros comandos a executar. Nesse caso, se o valor da expressão condicional que
define o critério de seleção for true, então o primeiro dos outros dois comandos é
16712855225

executado, do contrário, o segundo. Lembrando que é possível aninhar ou combinar


vários comandos else e if – o último else é opcional.

int idade;

if (idade <= 1)
System.out.println( Bebê );
else if(idade > 1 && idade <= 10)
System.out.println( Criança );
else if(idade > 10 && idade <= 13)
System.out.println( Pré-adolescente );
else if(idade > 13 && idade <= 18)
System.out.println( Adolescente );
else
System.out.println( Adulto );

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Existem algumas situações em que se sabe de antemão que as condições assumem


o valor true de forma mutuamente exclusiva, i.e., apenas uma entre as condições
sendo testadas assume o valor true ao mesmo momento. Nesses casos, a linguagem
Java provê um comando de controle de fluxo bastante poderoso. Trata-se do
comando swich, cuja sintaxe é a seguinte:

switch([expressão]) {
case [constante 1]:
[comando 1]
break;
case [constante 2]:
[comando 2]
break;
...
case [constante n]:
[de comando n]
break;
default:
[comando]
}

A [expressão] pode ser qualquer expressão válida. Ela é avaliada e o seu valor
resultante é comparado com as constantes distintas [constante 1], [constante 2], ...,
[constante n]. Caso esse valor seja igual a uma dessas constantes, o respectivo
comando é executado (e todos os demais são saltados). Se o valor for diferente, o
comando presente sob o rótulo default: é executado. Vejamos outro exemplo:

int mesAtual = 5;

switch (mesAtual) {
case 1:
System.out.println("Janeiro"); break;
case 2:
System.out.println("Fevereiro"); break;
case 3:
System.out.println("Março"); break;
case 4:
System.out.println("Abril"); break;
case 5:
16712855225

System.out.println("Maio"); break;
case 6:
System.out.println("Junho"); break;
case 7:
System.out.println("Julho"); break;
case 8:
System.out.println("Agosto"); break;
case 9:
System.out.println("Setembro"); break;
case 10:
System.out.println("Outubro"); break;
case 11:
System.out.println("Novembro"); break;
case 12:
System.out.println("Dezembro"); break;
default:
System.out.println("Mês inválido.");
}

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Chegamos, então, à Estrutura de Repetição (ou Iteração)! Frequentemente,


desejamos que uma tarefa seja executada repetidamente por um programa
enquanto uma dada condição seja verdadeira. Isso é possível pela utilização do
comando while. Este comando avalia uma expressão condicional, que deve resultar
no valor true ou false.

Se o valor for true, então o comando subjacente é executado; se a expressão for false,
então o comando é saltado e a execução prossegue adiante. A diferença é que após
executar o comando subjacente, a expressão condicional é novamente avaliada e
seu resultado novamente considerado. Desse modo a execução do comando
subjacente se repetirá até que o valor da expressão condicional seja false.

Observe, porém, que a expressão é avaliada antes de uma possível execução do


comando subjacente, o que significa que esse comando pode jamais ser executado.
O comando while é portanto pré-testado, isto é, antes de executar qualquer
comando, testa-se a condição oferecida. Caso seja verdadeira, realiza os comandos
internos; caso seja falsa, sequer realiza qualquer comando. A sintaxe é:

while ([condição])
[comando subjacente]

Deve-se ter cuidado para não acabar implementando um laço infinito (desde que
essa não seja sua intenção). Um laço infinito é um laço em que a condição de saída
nunca é satisfeita, portanto ele roda eternamente. Uma variação do comando while
que funciona de maneira bastante análoga é o do-while. A diferença é que ele é pós-
testado, isto é, executa os comandos internos e só depois avalia a condição.

do
[comando] 16712855225

while ([condição]);

Em certas situações, precisamos de laços de repetições nos quais alguma variável é


usada para contar o número de iterações. Para essa finalidade, temos o laço for.
Este é o tipo de laço mais geral e mais complicado disponível na linguagem Java.
Esse laço é pré-testado ou pós-testado? Fácil, é pré-testado! Avalia-se a condição
antes de executar os comandos. Sua sintaxe é a seguinte:

for ([expressão 1]; [condição]; [expressão 2])


[comando]

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

A [expressão 1] é chamada expressão de inicialização, [condição] é uma expressão


condicional e [expressão 2] é uma expressão qualquer a ser executado no final de cada
iteração. O laço for avalia inicialmente a expressão de inicialização. Em seguida,
avalia a expressão condicional. Se o valor desta for true, então o comando é
executado.

A segunda expressão é avaliada em seguida, e finalmente o laço volta a avaliar


novamente a expressão condicional. Do contrário, se o valor da expressão for false,
a execução prossegue adiante do laço for. Observem que é completamente possível
transformar um for em um while. Podemos dizer que eles são equivalentes, mas
escritos de maneira diferente.

[expressão 1]
while ([condição]) {
[comando]
[expressão 2]
}

Agora vamos ver um exemplo do while:

int idade = 26;

while (idade > 30) {


System.out.println("Minha idade é " + idade);
idade = idade + 1;
}

Resultado:

...

Agora vamos ver um exemplo do do-while:

int idade = 26;


16712855225

do {
System.out.println("Minha idade é " + idade);
idade = idade + 1;
} while (idade > 30)

Resultado:

Minha idade é 26

Agora vamos ver um exemplo do for:

int idade;

for (idade = 26; idade < 30; idade++) {


System.out.println("Minha idade é " + idade);
}

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Resultado:

Minha idade é 26
Minha idade é 27
Minha idade é 28
Minha idade é 29

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: ORIENTAÇÃO A OBJETOS

JAVA: CLASSES

A classe é a planta ou esquema que indica como os objetos são criados, quais os
seus comportamentos e variáveis de estado. Para declarar uma classe, é necessário
utilizar a sintaxe a seguir:

[palavra-chave] class NomeDaClasse


{
//Atributos e Métodos
}

Portanto para declarar uma classe, deve-se colocar a palavra class seguida de um
identificador que irá servir de nome para a classe. O identificador pode ser qualquer
palavra, exceto palavras reservadas. Por exemplo: class Conta introduz a declaração
de uma nova classe chamada Conta. Note que, por convenção, o nome de uma classe
inicia sempre com uma letra maiúscula. A Palavra-Chave é opcional, podendo ser:

//Essa classe pode ser acessada por todos


public class Carro {...}

//Essa classe não pode gerar instâncias


abstract class Carro {...}

//Essa classe não pode ser estendida


final class Carro {...}

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: OBJETOS

Um objeto é uma instância de uma classe. Para criar um objeto, devemos utilizar a
seguinte sintaxe:

new construtor();

O comando new, também conhecido como operador de criação, cria um novo


objeto, alocando memória para o objeto e inicializando essa memória para valores
default. Ele necessita de um operando: o construtor, que é o nome de um método
especial que constrói o objeto. Uma vez construído, o objeto deve ser atribuído a
uma variável, para que possa ser utilizado e referenciado no futuro.

/* 1) Operador NEW é responsável por criar um objeto;


* 2) NomeClasse() é o construtor da Classe NomeClasse;
* 3) NomeObjeto é uma variável do Tipo NomeClasse; */

NomeClasse NomeObjeto = new NomeClasse();

/* Observem que é possível atribuir o objeto de uma


* classe para uma variável de outra classe */

A linguagem Java assume a responsabilidade de destruir qualquer objeto criado que


não esteja sendo usando. Para tal, utiliza um Coletor de Lixo (Garbage Collector), que é
executado em intervalos regulares, examinando cada objeto para ver se ele ainda é
referenciado por alguma variável. Caso o objeto não seja utilizado ao menos por
uma variável, ele é destruído e sua memória é liberada.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: ATRIBUTOS

Um atributo ou campo é uma variável declarada no corpo de uma classe. Ele serve
para armazenar o estado de um objeto (atributo de instância) ou o estado de uma
classe (atributo de classe). A sintaxe de declaração de um atributo é a seguinte:

[palavra-chave] tipoAtributo NomeAtributo [=expressão];

A Palavra-Chave é opcional, podendo ser:

 Final, Volatile, Static ou Transient

class Empregado
{
final String Nome; //Indica que Nome é um atributo constante;
volatile Salario; //Indica que Salário é modificável por threads distintas;
static Idade; //Indica que Idade é compartilhada por todos objetos;
transient Sexo; //Indica que Sexo não pode ser serializável;
}

 Modificadores de Acesso:

class Empregado
{
public String nome; //Nome: público
private int Salario; //Salário: privado
protected short Idade; //Idade: protegido
char Sexo; //Sexo: default
}

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: MÉTODOS

Java utiliza métodos para se referir a trechos de código que são associados a classes.
Se os atributos servem para manter ou armazenar o estado ou o valor de um objeto,
os métodos servem para descrever os comportamentos de um objeto ou classe. Um
método é muito similar a uma função em C. A maior diferença é que os métodos
da linguagem Java são declarados completamente dentro de uma classe.

[Palavras-Chave] TipoRetorno NomeMetodo ([Lista de Parâmetros])


{
//Corpo do Método
}

A sintaxe de declaração de um método é apresentada acima. A Palavra-Chave é


opcional, podendo ser:

 Abstract, Final, Static, Native e Synchronized

//Indica que esse método não possui corpo


abstract int soma (int a, int b) {//...//}

//Indica que esse método não pode ser sobrescrito


final int soma (int a, int b) {//...//}

//Indica que esse método só pode acessar atributos de classe e não pode ser sobrescrito
static int soma (int a, int b) {//...//}

//Indica que esse método foi escrito outra linguagem


native int soma (int a, int b) {//...//}

//Indica que esse método só é executável por uma thread por vez
synchronized soma (int a, int b) {//...//}

 Modificadores de Acesso:

public int soma (int a, int b) {//...//} 16712855225

private int soma (int a, int b) {//...//}


protected int soma (int a, int b) {//...//}
int soma (int a, int b) {//...//}

Vamos falar agora sobre um método importante: Construtor! Ele é um método


especial, chamado pelo operador new quando um novo objeto necessita ser criado.
Dentro do construtor, pode-se colocar código customizado de inicialização do
objeto. Em geral, ele deve ter o mesmo nome da classe em que for declarado. Além
disso, um construtor não deve ter um tipo de retorno em sua declaração.

Professor, não entendo uma coisa! Em geral, no código da classe não há nenhum
método com o nome do método construtor. Ora, não há declaração de método

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

algum! Como é isso? É verdade! Basicamente, quando você não declara um


construtor para uma classe, o compilador cria um construtor padrão com uma lista
vazia de parâmetros. Pode-se criar diversos construtores para uma mesma classe.

Outro método muito importante é o Método Main! Pois é, ele é sempre definido
como um método de classe, i.e., possui um modificador static:

public static void main (String[] args) throws java.lang.Exception

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: HERANÇA

Herança é a habilidade de se derivar alguma coisa específica a partir de algo mais


genérico. Nós encontramos essa habilidade ou capacidade diversas vezes em nosso
cotidiano. Por exemplo: um Pálio estacionado na garagem do seu vizinho é uma
instância específica da categoria Carro, mais genérica. Da mesma forma, uma Honda
CG 125 é uma instância específica da categoria mais genérica Moto.

Se levarmos as categorias Carro e Moto para um outro nível mais elevado, as duas
se relacionarão uma com a outra por serem instâncias específicas de uma categoria
mais genérica ainda que elas: a categoria Veículo. Em outras palavras, carros e
motos são veículos. A imagem abaixo esquematiza as relações entre Pálio, Carro,
Honda CG 125, Moto e Veículo.

16712855225

Esse exemplo ilustrou a Herança Simples! Neste caso, uma entidade herda estados
e comportamentos (atributos e métodos) de uma e somente uma categoria. O Pálio,
por exemplo, herda da categoria Carro (e somente dela, diretamente). Em contraste,
a Herança Múltipla permite que uma entidade herde diretamente comportamentos
e estados de duas ou mais categorias ao mesmo tempo.

Imagine um Empregado chamado José de uma empresa qualquer. Para ser mais
específico, pense em José como sendo tanto Gerente quanto Contador

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

simultaneamente dessa empresa. Ele herdaria as capacidades de um Gerente e de


um Contador, concordam? Portanto, em uma hierarquia de entidades, João herdaria
de duas classes diferentes diretamente, como apresenta a imagem abaixo:

A sintaxe da herança sugere que você pode estender uma e somente uma classe.
O Java não suporta Herança Múltipla, porque – segundo projetistas da linguagem
– esse tipo de implementação poderia gerar confusão. Imagine, por exemplo, duas
classes-base declarando um atributo que possua o mesmo nome mas com tipos
diferentes. Qual dos dois a classe-filha deveria herdar?

A mesma situação poderia acontecer com um método! Se dois métodos possuíssem


16712855225

o mesmo nome, mas diferentes listas de parâmetros ou tipos de retorno, qual deles a
subclasse deveria herdar? Vocês percebem como isso poderia causar inconsistências
de projeto? Para prevenir tais problemas, a linguagem Java rejeita a implementação
de herança múltipla.

Novas classes derivam capacidades (expressas como atributos e métodos) de classes


já existentes. Isso faz com que o tempo de desenvolvimento de uma aplicação seja
bem menor, pois classes já existentes e comprovadamente funcionais (livres de erros
e já testadas) são reaproveitadas (ou reutilizadas). A sintaxe que expressa o conceito
de extensão de classes é a seguinte:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03
class NomeClasseFilha extends NomeClassePai
{
//Atributos e Métodos
}

Essa sintaxe pode ser lida da seguinte forma: NomeClasseFilha estende NomeClassePai. Em
outras palavras, NomeClasseFilha herda (ou deriva) capacidades (expressas através de
atributos e métodos) de NomeClassePai. A NomeClasseFilha é conhecida como subclasse,
classe derivada ou classe-filha e NomeClassePai é conhecida como superclasse, classe-
base ou classe-pai.

A palavra-chave extends faz com que uma subclasse herde (receba) todos os atributos
e métodos declarados na classe-pai (desde que ela não seja final), incluindo todas
as classes-pai da classe-pai. A classe-filha pode acessar todos os atributos e
métodos não-privados. Ela herda, mas não acessa (ao menos diretamente) métodos
e atributos privados.

Todo objeto criado a partir de uma subclasse é também um objeto do tipo da sua
superclasse (Ex: um objeto do tipo Carro também é um objeto do tipo Veículo). Essa
afirmação implica o fato de que você pode atribuir um objeto de uma subclasse
para uma referência criada ou declarada para um objeto de sua superclasse. Como
assim, professor? Vejamos!

//Objeto do tipo Carro é um objeto do tipo Veículo


Veiculo v = new Carro();

A linha de código acima cria um objeto do tipo Carro e atribui sua referência à
variável v. Note que essa variável v é uma variável que armazena referências para
objetos do tipo Veículo. Esse tipo de atribuição é perfeitamente possível, já que um
Carro é uma subclasse de Veículo. Através da variável v, é possível chamar os
métodos que pertencem ao tipo Veículo. 16712855225

Portanto, pode-se utilizar esse artifício de nomeação para transformar uma classe-
filha em qualquer uma de suas classes-pai. Professor, é possível fazer o inverso?
Pode-se atribuir uma classe-pai a uma classe-filha? Não, isso só pode ser feito por
meio de um type cast. Assim, uma variável pode assumir momentaneamente outro
tipo para que o programador possa utilizá-la.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: ENCAPSULAMENTO

Pessoal, nós já sabemos que para se descobrir o que um objeto pode fazer, basta
olhar para as assinaturas de seus métodos públicos definidos na classe desse objeto
– que formam uma interface de uso. A assinatura de um método é composta pelo
seu nome e seus parâmetros. Por outro lado, para descobrir como um objeto realiza
suas operações, deve-se observar o corpo de cada um dos métodos da classe.

Os corpos dos métodos constituem a implementação das operações dos objetos.


Professor, por que nós encapsulamentos classes, atributos e métodos Cara, por duas
razões: desenvolvimento e manutenibilidade. O encapsulamento ajuda a aumentar
a divisão de responsabilidades (ou coesão) e, dessa forma, fica mais fácil e rápido
desenvolver sistemas em módulos.

Da mesma forma, ele ajuda a manutenção, visto que para torna-se mais difícil fazer
“besteiras” no código e atrapalhar manutenções futuras. Trazendo isso para a vida
real, lidamos com encapsulamento o tempo inteiro. Você sabe como usar um
controle remoto, mas você não sabe como ele funciona internamente. Encapsula-
se seu funcionamento interno e disponibiliza-se apenas sua interface ao usuário.

Chegamos ao conceito de Modificadores de Acesso! Eles são utilizados para


modificar o modo como classes, métodos e variáveis são acessadas. Existem três
modificadores de acesso e um quarto nível (acesso default/friendly), quando não se usa
nenhum dos modificadores citados. Toda classe, método e variáveis de instância
declaradas possuem um controle de acesso.

Pessoal, esses Modificadores de Acesso determinam quão acessíveis são esses


elementos. Vamos vê-los agora em mais detalhes:
16712855225

 <public>: essa instrução indica que a classe, método ou atributo assim declaradas
podem ser acessadas em qualquer lugar e a qualquer momento da execução do
programa – é o modificador menos restritivo.

 <private>: essa instrução indica que métodos ou atributos (classes, não) assim
declaradas podem ser acessadas dentro da classe que os criou. Subclasses até
herdam-nos, mas não os acessam – é o modificador mais restritivo.

 <protected>: essa instrução indica que métodos ou atributos (classes, não) assim
declaradas somente podem ser acessadas dentro do pacote em que está contida
ou por subclasses no mesmo pacote.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

 <default> também chamado friendly, não há palavra para esse modificador porque
ele é, na verdade, a ausência de um modificador. Indica-se que a classe, método
ou atributo podem ser acessadas por classes do mesmo pacote.

Especificador Própria Classe Subclasse Pacote Global


Privado (-) Sim Não Não Não
<Vazio> (~) Sim Não* Sim Não
Protegido (#) Sim Sim Sim Não
Público (+) Sim Sim Sim Sim

OBSERVAÇÃO

É importante ressaltar que, em caso de não haver modificador, a subclasse pode ou não
acessar os métodos e atributos da sua superclasse, e isso depende da localização da
subclasse. Se ela estiver em um pacote diferente do pacote da superclasse, não poderá
acessar. Se estiver em um mesmo pacote da superclasse, poderá acessar. Logo, para
diferenciar o Modificador Pacote do Modificador Protegido, deve-se saber primeiramente se
é desejável que a subclasse possa ter acesso a atributos e métodos da classe.

Pensem comigo! Acessar ou editar propriedades de objetos, manipulando-as


diretamente, pode ser muito perigoso e gerar muitos problemas. Por conta disso, é
mais seguro, para a integridade dos objetos e, consequentemente, para a
integridade da aplicação, que esse acesso ou edição sejam realizados através de
métodos desse objeto.

Utilizando métodos, podemos controlar como consultas e modificações são


realizadas, controlando-as. Para tal, podemos utilizar Métodos Getters e Setters –
16712855225

para recuperar dados e inserir dados, respectivamente. Para o primeiro, utiliza-se o


Método Get; para o segundo, utiliza-se o Método Set. Em geral, costuma-se declarar
atributos como privados, e métodos e classes como públicos.

class Classe1 {

//Atributo privado
private String Algo;

//Método público para recuperar dados


public String getAlgo() {
return this.Algo;
}
//Método público para modificar/inserir dados
public void setAlgo(String Algo) {

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03
this.Algo = Algo;
}
}

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: INTERFACE

Galera, o que é uma Interface? É simplesmente um contrato! Quando vocês assinam


o contrato do seguro de um carro, vocês estão se comprometendo a atender aquilo
que lá está escrito. Analogamente, a interface é um contrato que obriga aqueles
que a assinam a implementar os métodos lá presentes. Elas ajudam a padronizar
implementações – entradas e saídas.

Em outras palavras, é um recurso utilizado em Java para obrigar a um determinado


grupo de classes a ter métodos ou propriedades em comum para existir em um
determinado contexto, contudo os métodos podem ser implementados em cada
classe de uma maneira diferente. Em geral, as interfaces são compostas basicamente
de um conjunto de assinaturas de métodos públicos e abstratos.

public interface FiguraGeometrica


{
public String getNomeFigura();
public int getArea(int vertice);
public int getPerimetro();
}

A sintaxe para implementar uma Interface utiliza a palavra reservada implements:

public class ClasseImplementadoraDeInterfaces implements FiguraGeometrica

Professor, qual a diferença entre uma Interface e uma Classe Abstrata? Bem,
Interfaces não são classes; são, na verdade, entidades que não possuem qualquer
implementação, apenas assinatura, sendo que todos os seus métodos são públicos
e abstratos. Já as Classes Abstratas também contêm, em geral, métodos abstratos
(sem corpo), mas podem ter vários métodos concretos.
16712855225

Uma Classe Abstrata pode, inclusive, não conter nenhum método abstrato, i.e.,
todos os seus métodos são concretos. No entanto, se uma classe tiver um único
método abstrato que seja, ela será considerada uma Classe Abstrata. Aliás, uma
Interface é também chamada de classe abstrata pura por conta disso, ou seja, não
há impurezas (isto é, métodos concretos).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: POLIMORFISMO

A palavra Polimorfismo vem do grego: muitas formas. Trata-se da capacidade de


um objeto poder se comportar de diversas formas dependendo da mensagem
recebida Observem que isso não quer dizer que o objeto fica transformando seu
tipo a todo momento. Na verdade, um objeto nasce com um tipo e morre com esse
mesmo tipo. O que muda, então? É a forma como nós nos referimos a esse objeto!

Existem dois tipos de polimorfismo:

 Polimorfismo Estático: ocorre quando uma classe possui métodos com mesmo
nome, entretanto assinaturas diferentes, i.e., métodos de uma mesma classe se
sobrecarregando. Pode ser chamada também de Sobrecarga ou Overloading.
Ocorre em Tempo de Compilação e alguns não o consideram um tipo de
polimorfismo, porque a assinatura é diferente.

 Polimorfismo Dinâmico: ocorre quando uma classe possui um método com


mesmo nome e mesma assinatura que um método de sua suplerclasse, i.e., o
método da classe-filha sobrescreve o método da classe-pai. Pode ser chamada
também de Sobrescrita, Overriding, Redefinição ou Sobreposição. Ocorre em
Tempo de Execução e é um corolário do conceito de herança.

Professor, o que você quer dizer com mesma assinatura e assinatura diferente? É a
mesma quantidade, tipo e ordem dos parâmetros. Em outras palavras:

//Assinatura Igual: quantidade, tipo e ordem


public String EntendendoAssinatura(int A, char B);
public String EntendendoAssinatura(int C, char D);

//Assinatura Diferente: quantidade diferente


public String EntendendoAssinatura(long A, long B, long C);
16712855225

public String EntendendoAssinatura(long A, long B);

//Assinatura Diferente: tipo diferente


public String EntendendoAssinatura(long A, long B);
public String EntendendoAssinatura(char A, long B);

//Assinatura Diferente: ordem diferente


public String EntendendoAssinatura(int A, char B);
public String EntendendoAssinatura(char B, int A);

Agora vamos ver um exemplo de Polimorfismo Dinâmico. Eu pensei comigo mesmo:


O que seria uma característica comum de praticamente todos os animais? Emitir sons!
Observem que eu criei uma classe abstrata que possui um único método – também
abstrato –, que não retorna valor algum e não recebe nenhum argumento. Vejam
a classe abaixo:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

abstract class Animal {


abstract void som();
}

Dito isso, vou criar dois animais do meu gosto pessoal: um gato e um cachorro!
Bem, o gato é um animal! Que relacionamento é esse “é um”? Herança! Portanto as
classes gato e cachorro serão classes filhas da superclasse Animal. Observem abaixo
que ambas implementam o método abstract void som( ), porém cada uma a sua
maneira, visto que gatos e cachorros emitem sons diferentes!

class Gato extends Animal {


void som() {
System.out.println("MIAU!");
}
}

class Cachorro extends Animal {


void som() {
System.out.println("AUAU!");
}
}

Pois bem! Vamos ver agora o Polimorfismo Dinâmico em ação. Criaremos um


objeto do tipo Gato e atribuiremos a um objeto do tipo Animal. Professor, você pode
fazer isso? Sim, porque Gato é filho de Animal – é similar a um casting implícito! Em
seguida chamaremos o método som( ). Por fim, faremos o mesmo procedimento
com o objeto do tipo Cachorro.

public static void main(String[] args) {


Animal animal = new Gato();
animal.som(); //Emite o som MIAU!
Animal animal = new Cachorro();
animal.som(); //Emite o som AUAU!
}

16712855225

Olha que bacana: existem dois métodos com exatamente o mesmo nome e mesma
assinatura! Como o compilador saberá qual deve ser chamado? Ele não saberá – tem
que ser em tempo de execução. No primeiro momento, ele apresentará “MIAU!”,
porque animal é nesse instante um gato. Depois fazemos outra atribuição e ele
apresentará “AUAU”, porque animal naquele instante é um cachorro.

O Polimorfismo Estático é bem mais simples! Imaginem que eu deseje fazer dois
cálculos matemáticos. Primeiro somar três números e depois somar apenas dois
números. Eu posso ter dois métodos com mesmo nome, mas assinaturas diferentes.
Dessa forma, se eu passar três valores, ele saberá que é um método; e se eu passar
dois valores, ele saberá que é outro método. Simples, não?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

class Calculo {

void soma(int a,int b){


System.out.println(a+b);
}
void soma(int a,int b,int c){
System.out.println(a+b+c);
}

public static void main(String args[]) {


Calculo x = new Calculo();
x.soma(10,10,10); //Mesmo nome, mas assinatura diferente (3 valores)
x.soma(20,20); //Mesmo nome, mas assinatura diferente (2 valores)
}
}

OBSERVAÇÃO

Atributos com o mesmo nome na classe/subclasse substituem os herdados. Ademais,


métodos declarados com a palavra-reservada final não podem ser redefinidos. Já os
métodos abstratos devem ser redefinidos na subclasse ou declarados como abstratos para
que sejam implementados pela classe-neta. Por fim, membros definidos na superclasse
podem ser acessados na subclasse por meio da palavra-reservada super, a menos que
tenham sido declarados como privados.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: CONCEITOS AVANÇADOS

JAVA: INTERFACE GRÁFICA

A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário


(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o
Swing é um conjunto sofisticado de classes e interfaces que definem os
componentes visuais necessários para construir uma interface gráfica de usuário.

Vocês entenderam mais ou menos? O primeiro é um conjunto básico que serve de


base para o segundo, que é um conjunto mais sofisticado. Os componentes Swing
são implementados com nenhum código nativo – totalmente Java puro, i.e., apesar
de serem sensivelmente mais lentos que os componentes nativos em AWT (Abstract
Window Toolkit), eles oferecem uma maior liberdade aos programadores.

O AWT (javax.awt) veio primeiro, é mais pesado, é gerado pelo sistema operacional,
logo é dependente de plataforma. O Swing (javax.swing) é mais leve, é gerado por
uma Máquina Virtual Java (JVM), logo é independente de plataforma. Galera, nem
tudo é diferente! Vejam: ambos são fáceis de programar, porque a orientação a
objetos proporciona alterar partes do programa, sem alterar toda a estrutura.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

O Swing mantém as funcionalidades dos componentes AWT! Ao acrescentarmos a


letra “J” aos componentes AWT, as novas classes serão como componentes Swing,
i.e., JButton, JTextField, JList tem os mesmos argumentos que Button, TextField e List –
componentes AWT. Nós vamos ver logo à frente a definição de alguns
componentes Swing. Professor, o que é um componente?

Bem, os itens que aparecem em uma interface gráfica de interação com usuário
(janelas, caixas de texto, botões, listas, caixas de seleção, entre outros) são chamados
de componentes. Alguns componentes podem ser colocados dentro de outros
componentes, por exemplo, uma caixa de texto dentro de uma janela. Abaixo
podemos ver a definição básica dos principais componentes:

 JFrame: define janelas com título, borda e alguns itens definidos pelo sistema
operacional como botão para minimizar ou maximizar;

 JPanel: define um componente que basicamente é utilizado para agrupar nas


janelas outros componentes como caixas de texto, botões, listas, entre outros;

 JTextField: define os campos de texto menores que podem ser preenchidos


pelo usuário;

 JTextArea: define os campos de texto maiores que podem ser preenchidos


pelo usuário;

 JPasswordField: define os campos de caixa de texto de formulários para


digitar senhas;

 JButton: permite que os usuários indiquem quais ações ele deseja que a
aplicação execute; 16712855225

 JCheckBox: permite criar formulários com checkbox’s (aquelas caixinhas para


você dar um check);

 JComboBox: permite criar formulários com combobox’s (aquela listinha de


opções).

Agora vamos falar um pouquinho sobre o Layout Manager (ou Gerenciador de


Disposição)! Galera, uma coisa é criar diversos componentes, outra coisa é
posicioná-los e dimensioná-los. O Layout Manager é o objeto que determina como

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

elementos e componentes serão dispostos em tela, tamanhos, comportamentos,


entre outros aspectos.

Ele controla os componentes que estão dentro do componente ao qual ele está
associado. Os principais Layout Managers são:

Divide a área de um componente de background em cinco regiões (norte,


sul, leste, oeste e centro). Somente um componente pode ser adicionado em
BorderLayout cada região. Eventualmente, o BorderLayout altera o tamanho preferencial
dos componentes para torná-los compatíveis com o tamanho das regiões.
O BorderLayout é o Layout Manager padrão de um JFrame.

Arranja os componentes da esquerda para direita e quando o tamanho


horizontal não é suficiente ele “pula” para a próxima “linha”. O FlowLayout
FlowLayout não altera o tamanho preferencial dos componentes. O FlowLayout é o
Layout Manager padrão de um JPanel (Swing).

16712855225

Arranja os componentes de cima para baixo “quebrando linha” a cada


componente adicionado. O BoxLayout não altera o tamanho preferencial dos
BoxLayout componentes.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Divide a área de um componente de background em células


semelhantemente a uma tabela. As células possuem o mesmo tamanho.
GridLayout

É o mais complexo layout e é baseado no GridLayout. A ideia é representar


a tela como um grid com linhas e colunas, mas podemos posicionar
GridBagLayout elementos ocupando várias células em qualquer direção, o que permite
layouts mais customizados (apesar do alto custo de manutenção). A
definição de onde deve ser colocado cada componente é feita através de
restrições (GridBagConstraints) passadas ao método add.

16712855225

Professor, e o Look and Feel (L&F)? O “Look” se refere a aparência e o “Feel” se refere
ao comportamento dos componentes. É como se fosse um skin, um tema,
customizável ou não. O Java oferece algumas opções: CrossPlatformLookAndFeel (ou
Metal), que parece o mesmo em qualquer plataforma; SystemLookAndFeel, que usa o L&F
nativo do sistema utilizado; e Synth, que permite criar novos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Pessoal, a principal função de uma interface gráfica de usuário é permitir interação


entre usuários e aplicação. Os usuários interagem com uma aplicação clicando em
botões, preenchendo caixas de texto, movimentando o mouse, entre outros. Essas
ações dos usuários disparam eventos que são processados pela aplicação através
de Event Listeners.

Você pode descobrir quais tipos de eventos um componente pode disparar ao olhar
seus tipos de Event Listeners! Para criar um Listener, devemos implementar a
interface correspondente ao tipo de evento que queremos tratar. Por exemplo:

 KeyListener: utilizado quando se deseja tratar eventos de pressionar ou soltar teclas


do teclado.

 MouseListener: utilizado quando se deseja tratar eventos como cliques dos botões
do mouse (ex: duplo-clique, clique-arrasta, etc).

 WindowsEvent: utilizado quando se deseja tratar eventos que envolvem a


manipulação de janelas.

As tarefas de respostas realizadas em um evento são conhecidas como Handler de


evento e o processo total de responder a eventos é conhecido como tratamento de
evento. Para cada tipo de evento precisa ser implementada uma interface de escuta.
Quando um evento acontece, é realizado o despacho (dispatching) para os ouvintes
apropriados.

Esse despacho chama um método de tratamento de evento em cada um de seus


ouvintes, sendo registrados para o tipo de evento ocorrido. A ocorrência de um
evento faz com que o componente receba um ID único de evento – ele especifica
16712855225

o tipo de evento. Então, o componente pega esse ID para decidir qual tipo de
ouvinte será útil, decidindo qual o método que vai chamar para cada objeto listener.

O evento é despachado por todas as decisões que são tratadas para o usuário
através dos componentes GUI. Sendo necessário ser feito, pois precisa ser registrado
um handler de evento para o tipo particular de evento que o aplicativo exige. O
componente vai assegurar que o método apropriado do handler de evento é
chamado quando o evento ocorrer.

Pessoal, todo JComponent pode ter um ou mais bordas. As bordas são objetos
inacreditavelmente úteis que, não sendo componentes, sabem como desenhar as

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

margens dos componentes. Elas são úteis não só para desenhar linhas e margens
elegantes, mas também para fornecer títulos e espaços vazios em componentes.
Para colocar uma borda em um JComponent, deve-se usar o método setBorder.

Pode-se usar a classe BorderFactory para criar a maioria das bordas fornecidas. Se você
precisar de uma referência para determinada uma borda, você pode salvá-la em
uma variável do tipo Border, que conterá sua borda customizada. Abaixo podemos
ver uma borda linear e, em seguida, vários outros tipos de bordas diferentes!
Observem a diversidade disponível...

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: TIPOS ENUMERADOS

Trata-se de um tipo de dados especial que habilita uma variável a ser um conjunto
pré-definido de constantes. A variável deve ser igual a um dos valores que foram
predefinidos para ela. Exemplos comuns incluem direções de uma bússola ou os
dias da semana. Por que? Porque são valores constantes! Ademais, lembrem-se que
eles sempre vêm em letra maiúscula. A sintaxe básica inclui a palavra-reservada enum:

public enum nomeENUM {


<lista de constantes>
}

Para especificar os dias da semana, as direções de uma bússola ou os planetas do


sistema solar em um tipo enum, podemos fazer:

public enum Dia {


SEGUNDA, TERÇA, QUARTA, QUINTA,
SEXTA, SÁBADO, DOMINGO; }

public enum Bussola {


NORTE, SUL, LESTE, OESTE; }

public enum Planetas {


MERCÚRIO, VENUS, TERRA,
MARTE, JUPTER, SATURNO,
URANO, NETUNO, PLUTÃO; }

Professor, qual é? O que tem demais em uma lista de constantes? Calma, amigão!
Nós podemos adicionar alguns valores a essas constantes, mas para isso devemos
primeiro declarar um construtor para, então, inicializar os atributos com os valores.
Por exemplo, a distância para o sol em milhões de quilômetros! O construtor tem
apenas um argumento porque a constante tem apenas um valor. Bacana?

public class Main {


16712855225

public enum Planetas {


MERCURIO(57), VENUS(108), TERRA(149),
MARTE(227), JUPITER(778), SATURNO(1429),
URANO(2870), NETUNO(4504), PLUTAO(5913);

public int distanciaSol;

Planetas(int distanciaSol) {
this.distanciaSol = distanciaSol; }
}

public static void main(String[] args) {


System.out.println("O Planeta mais afastado é: " + Planetas.PLUTAO); }
}

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: ANOTAÇÕES

O Java 5 nos trouxe uma grande novidade que praticamente revolucionou o


desenvolvimento de software! As Anotações permitem declarar metadados dos
objetos nos próprios objetos e, não, em um arquivo separado. Dessa forma,
configurações de uma classe poderiam permanecer dentro da própria classe, em
vez de ficarem, por exemplo, em um Arquivo de Configuração XML.

Professor, por que arquivos de configuração são tão detestáveis? Cara, porque muitas
vezes eles tornam extremamente difíceis a compreensão de alguns sistemas. As
anotações são mais simples, discretas, compreensíveis e podem efetivamente ajudar
na automatização de algumas tarefas. Arquivos de Configuração são, algumas
vezes, complexos, grandes, chatos e difíceis de entender.

A Anotação, como o próprio nome diz, é uma forma de anotar, marcar, apontar
classes, campos ou métodos, de tal maneira que essas marcações possam ser
tratadas por um compilador, ferramentas de desenvolvimento e bibliotecas. Ela
provê dados sobre um programa, mas não faz parte dele em si, isto é, elas não
afetam diretamente a operação do código que elas anotam.

Elas podem fornecer informações sobre o código que está sendo escrito ou até
mesmo do próprio programa, semelhante a comentários. No entanto, elas podem
ser utilizadas como um objeto semântico de compiladores, isto é, facilita bastante a
vida dos compiladores. Dessa forma, eles podem entender que, por exemplo, não
é para mostrar mensagens de advertências (os famosos warnings).

Eles podem, inclusive, utilizar anotações para detectar erros de código; ou mesmo
para criar documentações por meio de XML. Algumas anotações podem ser
avaliadas em tempo de execução e podem possuir elementos ou não. Professor,
16712855225

qual é a sintaxe básica de uma anotação? As anotações são sempre precedidas de


arroba (@). É absurdamente simples:

@annotation

Por convenção, elas vêm antes do elemento que se deseja anotar (Ex: Antes do
método ou classe). Abaixo temos uma lista com as anotações mais utilizadas:

 @Deprecated: indica que um método tem seu uso desencorajado por ser perigoso
ou por ter uma alternativa melhor desenvolvida;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

 @Override: indica que um método da classe-pai será sobrescrito por um método


da classe-filha;

 @SupressWarning(“unchecked”): indica que todos os avisos ou warnings da categoria


“não verificado” devem ser ignorados;

 Existem mais de sessenta atualmente: @SafeVarargs, @FunctionalInterface, @Retention,


@Documented, @Target, @Inherited, @Repeatable, @id.

Anotações podem ser de três tipos:

 Anotações Marcadoras: são aquelas que não possuem membros; são


identificadas apenas pelo nome, sem dados adicionais (Por exemplo: @id – não
há valores ou dados adicionais).

 Anotações de Valor Único: são aquelas que possuem um único membro, o


próprio valor; dessa forma, não é necessário informar o nome (Por exemplo:
@SupressWarning(“unchecked”) é equivalente a @SupressWarning(value = “unchecked”)).

 Anotações Completas: são aquelas que possuem múltiplos membros; assim,


deve-se usar a sintaxe completa para cada par nome/valor (Por exemplo:
@Version(major = 1, minor = 0, micro = 0)).

E que tal inventar sua própria anotação? Cara, é muito fácil e semelhante a interfaces!
Tão parecido que se utiliza a mesma palavra, mas precedida de um @. Vejamos:

<modificador> @interface identificador {


<Declaração de Elementos>
}
16712855225

Os modificadores e os elementos são opcionais! O identificador não pode ser o


mesmo de uma classe ou interface utilizadas na aplicação. No código abaixo,
criamos uma anotação que possui apenas um valor. Para chamá-la, basta utilizar o
comando @MinhaAnnotation. É possível, inclusive, adicionar sua anotação personalizada
no Javadoc. Bacana, né?!

public @interface MinhaAnnotation {


int valor() default 10;
}

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: CLASSES INTERNAS (ANINHADAS)

Classes Aninhadas

Classes Estáticas Classes Internas

Classes Locais

Classes Anônimas

Java permite definir uma classe dentro de outra classe. Essa classe é conhecida como
Classe Aninhada e é ilustrada acima! Elas se dividem em duas categorias: estáticas
e não-estáticas. Classes Aninhadas que são declaradas com static são chamadas
Classes Aninhadas Estáticas. Já as Classes Aninhadas Não-Estáticas são chamadas
mais comumente de Classes Internas – como podemos ver abaixo:

class ClasseExterna {
...
static class ClasseAninhadaEstatica {
...
}
class ClasseInterna {
...
}
}
16712855225

Uma Classe Aninhada é um membro da Classe Externa. Classes Aninhadas Não-


Estáticas (ou Classes Internas) possuem acesso aos membros da Classe Externa,
mesmo que eles sejam declarados como private. Classes Aninhadas Estáticas não
possuem acesso aos membros da Classe Externa e podem ser declaradas como
private, public, protected ou default (sem modificador).

As Classes Externas só podem ser declaradas como public ou default. Aí vocês devem
estar se perguntando: por que usar classes aninhadas? Cara, é uma maneira de
agrupar logicamente classes que são utilizadas em apenas um lugar. Se você possui

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

uma Classe B que com certeza será usada apenas dentro da Classe A, o melhor é
criar a Classe B como interna a Classe A.

Além disso, ela aumenta o encapsulamento. Imaginem que A e B são classes


normais (não-aninhadas, também chamadas top-level) e a Classe B precisa acessar
os membros da Classe A. Podemos, então, colocar a Classe B dentro da Classe A e
colocar os membros de A como privados. Ainda assim, a Classe B poderia acessar
os membros da Classe A por ser uma classe aninhada.

Por fim, ela pode levar a códigos mais legíveis e fáceis de dar manutenção! Colocar
classes pequenas dentro de classes não-aninhadas, já que apenas essa a utilizará,
faz com que a lógica da classe não-aninhada seja mais fácil de ser identificada,
consequentemente tornando o código mais legível e de fácil manutenção. Essas são
apenas algumas das vantagens de se utilizar classes aninhadas.

Bem como métodos e variáveis de classe, uma classe aninhada estática é associada
à sua classe exterior. E assim como métodos de classes estáticas, uma classe
aninhada estática não pode se referir diretamente a variáveis ou métodos de
instância definidos na Classe Exterior. Elas são acessadas utilizando o nome da classe
externa: ClasseExterna.ClasseAninhadaEstatica.

Vamos falar um pouco sobre as Classes Internas! Da mesma forma que métodos e
variáveis de instância, uma classe interna é associada a uma instância de sua classe
externa e tem acesso direto a métodos e campos desse objeto. Além disso, como
uma classe interna é associada a uma instância, ela não pode definir nenhum
membro estático.

Objetos que são instâncias de uma classe interna existem dentro da instância de
uma classe externa. Entenderam isso? Uma instância da classe interna só pode existir
16712855225

dentro de uma instância da classe externa, e tem acesso direto aos métodos e
campos de sua instância externa. Para instanciar uma classe interna, deve-se
primeiro instanciar a classe externa, como segue:

ClasseExterna.ClasseInterna objetoInterno = objetoExterno.new ClasseInterna();

As classes internas se dividem em classes locais e anônimas! As primeiras são classes


definidas em um bloco (grupo de zero ou mais declarações entre chaves). Em geral,
classes locais são encontradas no corpo de um método. As segundas permitem
escrever códigos mais concisos, e declarar e instanciar uma classe ao mesmo tempo.
São comuns quando se deseja usar uma classe local apenas uma vez.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: REFLEXÃO E GENÉRICOS

Reflexão (ou Reflection) é comumente utilizada por programas que requerem a


habilidade de examinar ou modificar o comportamento em tempo de execução de
aplicações que rodam em uma Java Virtual Machine (JVM). Em geral, é um recurso
bastante avançado e extremamente poderoso, e deve ser utilizado apenas por
programadores experientes.

Reflection pode permitir que aplicações executem operações que, por muito tempo,
se pensou impossível. Ele permite criar chamadas em tempo de execução, sem
precisar conhecer as classes e objetos envolvidos quando escrevemos nosso código.
Esse dinamismo é necessário para resolvermos tarefas que nosso programa só
descobre serem necessárias ao receber dados, em tempo de execução.

Essa tecnologia possibilita listar todos os atributos de uma classe e pegar seus
valores em um objeto; instanciar classes cujo nome só vamos conhecer em tempo
de execução; invocar métodos dinamicamente baseado no nome do método como
String; descobrir se determinados pedaços do código têm annotations. É um recurso
muito poderoso!

Já o Generics permite que você personalize um método ou uma classe genérica


para qualquer tipo que você esteja trabalhando. Para ter certeza da tipagem dos
objetos em tempo de compilação, devemos aplicar o recurso do Generics. Com este
recurso podemos determinar o tipo de objeto que queremos armazenar em uma
coleção no momento em que ela é criada.

A partir daí, o compilador não permitirá que elementos não compatíveis com o tip
escolhido sejam adicionados na coleção. Isso garante o tipo do elemento no
momento em que ele é recuperado da coleção e elimina a necessidade de casting.
16712855225

Imaginem que bacana seria poder escrever um único método de ordenação de


elementos de um vetor.

Mas não só isso, esse método seria capaz de ordenar tanto um vetor de inteiros
como um vetor de String, ou qualquer outro tipo. Nossa tecnologia permite que
programadores especifiquem, com uma simples declaração de método, um
conjunto de métodos relacionados; ou, com uma simples declaração de classes, um
conjunto relacionado de tipos respectivamente.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: TRATAMENTO DE EXCEÇÕES

Em programação, há sempre a possibilidade de ocorrer erros imprevistos durante a


execução de um sofware, esses erros são exceções e podem ser provenientes de
erros de lógica, acesso a dispositivos ou arquivos inexistentes, edição de algo sem
permissão, etc. Na Linguagem C, códigos de erro são utilizados para indicar o tipo
de erro que ocorreu! Como assim, professor? Vejamos o exemplo abaixo:

int testeErro(int idade) {


if(idade >= 0)
idade = idade + 18;
else
return 100; //Código de Erro para valor negativo
}

Observem que se a idade informada for maior ou igual a zero, realiza-se uma
determinada operação; se for menor que zero (negativa), retorna-se o Código de
Erro 100 – para que o programador saiba o que ocorreu. Qual o problema dessa
abordagem? Primeiro, exige uma vasta documentação indicando o que significa
cada código de erro (Ex: 100 = Valores negativos; 200 = Sem permissão de escrita).

Além disso, observe que a palavra-reservada return fica ocupada, impossibilitando a


devolução de outros possíveis resultados. Entenderam essa parte? Eu poderia usar
essa palavra para retornar valores importantes para o código, mas não posso
porque ele está ocupado em informar se houve ou não erro. Pois é, o Java possui
uma estratégia diferente para contornar esses imprevistos.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Ele busca realizar o tratamento dos locais do código que podem vir a lançar
possíveis exceções. Java possui a classe Throwable, que modela todos os tipos de erros
de execução e que se divide em duas subclasses Error e Exception. A primeira define
erros que não devem ser capturados pelas aplicações, pois representam erros
graves que não permitem que a execução continue de maneira satisfatória3.

A segunda define erros para os quais as aplicações normalmente têm condições de


realizar um tratamento, logo Exception Error são subtipos de Throwable. As exceções
16712855225

ainda se dividem em verificadas (Checked), quando obrigatoriamente devem ser


tratadas e não-verificadas (Unchecked), quando não há essa obrigação – programador
decide! E como se detectam, manipulam e tratam as exceções?

Bem, sempre que um método de alguma classe for passível de causar algum erro
previsto, nós podemos utilizar um método de tentativa chamado try. Tudo que
estiver dentro do bloco try será executado até que alguma exceção seja lançada, ou
seja, até que algo dê errado. Quando uma exceção é lançada, ela sempre deve ser
capturada. O trabalho de captura da exceção é executado pelo bloco catch.

3
Exemplo: estouro de memória.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Podemos encadear vários blocos catch, dependendo do número de exceções que


podem ser lançadas por uma classe ou método. O bloco catch obtém o erro criando
uma instância da exceção. Quando uma exceção é lançada e é necessário que
determinada ação seja tomada mesmo após a sua captura, utilizamos a palavra
reservada finally – é opcional, mas se existir, sempre será executado.

É útil para liberar recursos do sistema quando utilizamos, por exemplo, conexões de
banco de dados e abertura de buffer para leitura ou escrita de arquivos. finally virá
após os blocos de catch. Portanto, o try indica que um bloco de código pode ocorrer
erro; o catch tem o objetivo de capturar, manipula e trata erros; e o finally busca
realizar ações mesmo após a captura de erros. Vejamos a estrutura básica:

try { //Não vem sozinho: try/catch, try/finally ou try/catch/finally

//Código a ser executado


} catch (ClasseDeExceção objDaExceção) { //Não vem sozinho: try/catch ou try/catch/finally

//Tratamento da exceção
} finally { //Não vem sozinho: try/finally ou try/catch/finally.

//Código a ser executado mesmo que uma exceção seja lançada


}

Algumas observações importantes: o catch deve aparecer após o try e entre os


blocos não deve haver nenhuma outra instrução. Além disso, quando uma exceção
é identificada no try, o restante do código não é executado e não há um retorno
para o término do código. Implicitamente, todas as classes Java automaticamente
lançam uma exceção de RuntimeException.

Por fim, vamos falar da propagação de exceções! Imagine uma situação em que
não é desejado que uma exceção seja tratada na própria classe ou método, mas
sim em outra classe ou método que venha lhe chamar. Para solucionar tal situação
utilizamos o a cláusula throws na assinatura do método indicando explicitamente a
16712855225

possível exceção que o mesmo poderá a vir lançar. Sintaxe abaixo:

tipoDeRetorno nomeDoMetodo(...) throws tipoExcecao1, tipoExcecao2, tipoExcecaoN

Em outras palavras, utilizamos throws para indicar que qualquer um que chame
aquele método deve tratar suas possíveis exceções. No entanto, algumas vezes
podemos fazer com que um método lance um throwable (em geral, do tipo exceção)
sem exigir que aqueles que chamem esse método tratem essa exceção – para tal,
utilizamos throw. Sintaxe abaixo:

throw new Exception("Número não pode ser negativo!");

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Observem que a palavra-reservada throw é utilizada dentro do corpo do método


para invocar uma exceção qualquer personalizada explicitamente, além de não
poder lançar mais de uma exceção; já a cláusula throws é utilizada na declaração ou
assinatura de um método e declaração uma exceção a ser tratada, além de poder
lançar mais de uma exceção.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: SINCRONISMO E MULTITHREADING

Vocês já devem ter percebido que os programas que utilizamos corriqueiramente


conseguem executar diversas atividades relativamente independentes entre si. Você
está lá navegando em dezessete abas diferentes pelo Firefox e ao mesmo tempo
está baixando algum arquivo, ouvindo alguma música, lendo a minha aula e
enviando um e-mail – tudo paralelamente.

E aqueles sistemas que você utiliza no seu trabalho em que várias pessoas acessam
para fazer coisas diferentes? Pois é, já que essas atividades são relativamente
independentes entre si, elas podem ser executadas em paralelo. Vocês concordam
comigo? Na verdade, a maioria dos softwares realizam diversas tarefas
paralelamente sem nós percebermos!

Quando nós executamos essas tarefas em paralelo, estamos usando Threads! Vocês
sabem o que essa palavra significa em português? Fios ou Linhas! Em outras palavras,
criamos linhas de execução de tarefas paralelas em memória – cada linha
responsável por executar alguma coisa simultaneamente e relativamente
independentes. Em Java, as Threads são objetos presentes no Pacote java.lang.

Além da vantagem evidente de poder realizar tarefas simultaneamente, podemos


dizer que assim utilizamos os recursos disponíveis de melhor forma, especialmente
quando o computador em questão possui múltiplos processadores. Para entender
isso melhor, podemos observar o ciclo de vida de threads e cada estágio pelo qual
ela passa – do início ao fim!

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

 New: uma nova thread começa seu ciclo de vida no estado new e permanece nele
até o programa inicializar a thread – é como se ela tivesse nascido.

 Runnable: após uma nova thread ter sido inicializada, a thread se torna runnable – é
nesse estado que ela executa uma tarefa.

 Waiting: algumas vezes, uma thread espera outra thread realizar alguma tarefa até
que esse thread sinalize que ela pode continuar sua execução.

 Timed Waiting: é o mesmo caso que o anterior, no entanto aqui o intervalo de tempo
de espera é especificado.

 Terminated: uma thread runnable entra nesse estado quando completa sua tarefa ou
quando termina.

Dissemos várias vezes que, em geral, threads são relativamente independentes. Nós
dissemos dessa maneira, porque quando elas utilizam recursos em comum, é
preciso haver um sincronismo. Quando muitas threads são executadas, é necessário
sincronizar suas atividades para prevenir, por exemplo, o acesso concorrente a
estruturas de dados no programa que são compartilhadas entre as threads.

É imprescindível entender que um aplicativo possui uma área de disputa de


memória compartilhada entre todas as threads, chamada Região Critica. Para que
uma aplicação se torne confiável, ela terá que garantir que somente uma thread
utilizará a Região Crítica por vez e o programador deve perceber quando mais de
uma thread modifica uma determinada área de memória em comum.

Não é necessária a sincronização quando os valores da memória compartilhada não


são modificados, ou seja, caso as threads só comparem ou tomem qualquer outro
16712855225

tipo de decisão que não venha a modificar os dados da memória compartilhada


entre as threads. Para quem estudou um pouco de sincronismo de banco de dados,
é mais fácil entender o sincronismo em java.

Para entender a utilização de threads programaticamente, podemos utilizar um


exemplo! Sabe quando você quer gerar um arquivo em PDF e, enquanto ele está
sendo gerado, aparece uma barrinha de que vai enchendo à medida que o arquivo
vai se concluindo? Pois é, esses processos paralelos e simultâneos podem ser
executados por meio de threads! Vamos pensar...

public class GeraPDF implements Runnable {


public void run () {

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03
// Código para gerar PDF.
}
}

public class BarraDeProgresso implements Runnable {


public void run () {
// Código da barra de progresso.
}
}

public class MeuPrograma {


public static void main (String[] args) {

GeraPDF gerapdf = new GeraPDF();


Thread threadDoPdf = new Thread(gerapdf);
threadDoPdf.start();

BarraDeProgresso barraDeProgresso = new BarraDeProgresso();


Thread threadDaBarra = new Thread(barraDeProgresso);
threadDaBarra.start();

}
}

O código acima começa com duas classes – GeraPDF, que evidentemente gera o PDF;
e BarraDeProgresso, que obviamente cria a barra de progresso! Observem que ambas
implementam a interface Runnable – isso é necessário para que as instâncias dessa
classe sejam executadas por uma thread. Aliás, essa interface possui um único
método (run()), que cria a thread e a executa.

No método main, criamos os objetos de cada classe e passamos para a classe thread.
Como assim, professor? Observem que primeiro geramos um objeto (gerapdf), em
seguida criamos uma thread com esse objeto (new Thread(gerapdf)) e depois chamamos
o método start(), responsável por chamar o método run() da classe específica – sem
isso, não seria possível saber qual método run() deveria ser chamado.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: COLEÇÕES

Coleção é qualquer agregado de referências a objetos (elementos) em alguma


estrutura de dados. As coleções são sempre de um mesmo tipo de elementos. Por
exemplo, podemos ter uma coleção de Datas, uma coleção de Pessoas, ou uma
coleção de Alunos. Em Java, os elementos de uma coleção devem ser sempre
referências a objetos, não podendo ser tipos primitivos, como int e char.

Mas essa limitação na prática não existe, porque a cada tipo primitivo corresponde
uma classe, como as classes Integer e Character. Por exemplo, para cada valor de
int pode ser construído um objeto da classe Integer, que tem esse valor na sua única
variável de instância. Podemos então ter coleções de Integer, de Double, de
Character. Bacana?

Quando falamos em tipo dos elementos de uma coleção, estamos falando,


portanto, do tipo das referências que podem ser armazenadas na coleção. Para
facilitar, na prática usamos comumente expressões como "coleção de objetos" como
uma forma abreviada de dizer "coleção de referências a objetos". Da mesma forma,
dizemos, "coleção de Alunos" para "coleção de referências do tipo Aluno".

É um erro conceitual comum pensar que uma coleção de objetos armazena esses
objetos dentro dela. O conceito de coleção é bem genérico, e significa qualquer
agrupamento de objetos. Existem conceitos mais específicos para representar
coleções com propriedades estruturais particulares. O mais simples é o conceito de
uma lista. Outras formas conceituais são as ideias de conjunto, árvore, grafo, etc.

Vamos começar falando das Listas (java.util.List)! Ela se caracteriza por ser sequencial,
com cada elemento ocupando uma posição relativa, indexada de 0 até N-1, onde N é
a quantidade de elementos. Em uma lista, faz sentido falar em primeiro, segundo,
16712855225

terceiro elemento. Não há restrição em se colocar uma mesma referência em mai


de uma posição da lista (i.e., a lista pode ter elementos duplicados).

Galera, não sei se algum de vocês já programou em C! Se sim, vocês se lembram de


como era complicado utilizar ponteiros, ponteiros para ponteiros, alocação dinâmica
de memória? Pois é, Java não exige que você faça nada disso! As coisas aqui são
muito mais simples e já existe bastante funcionalidade implementada e pronta para
ser utilizada. As principais classes implementadoras são: ArrayList, LinkedList, Vector.

ArrayList arrayList = new ArrayList();


LinkedList linkedList = new LinkedList();
Vector vector = new Vector();

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

//Observem que eu posso referenciar os objetos criados como List (Lista).

List list = new ArrayList();


List list = new LinkedList();
List list = new Vector();

MÉTODO DESCRIÇÃO

add(Object) Adiciona uma referência no final da lista e aceita referências de qualquer


tipo;
add(int, Object) Adiciona uma referência em uma determinada posição da lista;

size() Informa a quantidade de elementos armazenado na lista;

clear() Remove todos os elementos da lista;

contains(Object): Verifica se um elemento está contido em uma lista;

remove(Object): Retira a primeira ocorrência de um elemento de uma lista;

remove(int): Retira elementos pela sua posição na lista;

get(int): Recupera um elemento de uma determinada posição da lista;

indexOf(Object): Descobre o índice da primeira ocorrência de um elemento;

Agora vamos falar um pouco sobre Conjuntos (java.util.Set). Trata-se de outra


16712855225

categoria de coleção, em que não há noção de posição relativa (primeiro, segundo,


etc) e que não podem existir elementos duplicados. Um exemplo simples é o
conjunto de países que estão na Comunidade Europeia. Não há interesse em se
repetir países, e não há ordem relativa (um país não está antes ou depois de outro).

Como os conjuntos não possuem ordem, as operações baseadas em índice que


existem nas listas não aparecem nos conjuntos. Set é a interface Java que define os
métodos que um conjunto deve implementar. As principais classes
implementadoras são: HashSet, TreeSet e LinkedHashSet. Cada implementação possui suas
características sendo apropriadas para contextos diferentes.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Galera, sendo bem sincero, não vejo grandes vantagens no uso de sets. Tudo bem,
algumas vezes, eles possuem performance melhor que a das listas, mas não é nada
demais. O que eu acho importante é saber essas características básicas e diferentes
para outros tipos de coleções. Vamos ver agora um exemplo e algumas das suas
principais operações e suas descrições.

HashSet hashSet = new HashSet();


TreeSet treeSet = new TreeSet();
LinkedHashSet linkedHashSet = new LinkedHashSet();

//Observem que eu posso referenciar os objetos criados como Set (Conjunto).

Set set = new HashSet();


Set set = new TreeSet();
Set set = new LinkedHashSet();

MÉTODO DESCRIÇÃO

size() Retorna a quantidade de elementos armazenados no conjunto;

isEmpty Verifica se o conjunto está vazio;

add() Adiciona um elemento específico ao conjunto;

remove() Remove um elemento específico do conjunto;

Agora vamos ver Filas (java.util.Queue). Trata-se de outra categoria de coleção,


semelhante a filas, em que o primeiro elemento a entrar será o primeiro elemento
a sair (FIFO). Basta lembrar da fila de um supermercado. A primeira pessoa que
entrou na fila será a primeira pessoa a sair da fila. Aliás, ela possui operações de
16712855225

inserção, remoção e inspeção.

Galera, percebam que uma fila é uma lista, porém com um objetivo diferente! A fila
é desenhada para ter elementos inseridos no final da fila e removidos no início da
fila. As principais classes implementadoras da interface Set são: PriorityQueue e LikedList.
Cada implementação possui suas características sendo apropriadas para contextos
diferentes.

LinkedList linkedList = new LinkedList();


PriorityQueue priorityQueued = new PriorityQueue();

//Observem que eu posso referenciar os objetos criados como Queue (Fila).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03
Queue queue = new LinkedList();
Queue queue = new PriorityQueue();

MÉTODO DESCRIÇÃO

add() Insere um elemento na fila;


remove() Remove um elemento da fila;
element() Retorna o primeiro elemento da fila;

Por fim, vamos falar sobre os Mapas (java.util.Map). Aqui já começamos diferente,
porque mapas não são coleções. Pensem comigo: muitas vezes queremos buscar
rapidamente um objeto, dada alguma informação sobre ele (Ex: dada a placa do
carro, obter todos os dados). Poderíamos utilizar uma lista e percorrer todos os
elementos, mas isso é péssimo para a performance – aqui entra o mapa!

Um mapa é composto por um conjunto de associações entre um objeto chave a


um objeto valor. É equivalente ao conceito de dicionário, utilizado em várias
linguagens. Algumas linguagens, como Perl ou PHP, possuem um suporte mais
direto a mapas, onde são conhecidos como matrizes ou arrays associativos. O
objetivo é mapear uma chave a um valor.

Em um dicionário eu associo um vocábulo a uma definição. A chave é um objeto


utilizado para recuperar um valor. O mapa costuma aparecer junto com outras
coleções, para poder realizar essas buscas. As principais classes implementadoras
da interface Map são: HashMap, TreeMap e LinkedHashMap. Cada implementação possui
suas características sendo apropriadas para contextos diferentes.

16712855225

MÉTODO DESCRIÇÃO

clear() Remove todos os pares chave/valor do mapa;


containsKey(k) Retorna true se o mapa invocador contiver o objeto k como chave;
containsValue(v) Retorna true se o mapa contiver o objeto v como chave;
entrySet() Retorna um conjunto que contenha as entradas no mapa;
equals() Retorna true se mapas contiverem as mesmas entradas;
get() Retorna o valor associado com a chave k;
remove(k) Remove a entrada que tiver chave igual a k;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: STREAMS E SERIALIZAÇÃO

O que é Stream? Vamos ver um exemplo bacana: sabem quando vocês veem um
jogo de futebol ao vivo pela internet? Ou quando vocês assistem ao julgamento de
um réu pelo website do Supremo Tribunal Federal? Pois é, isso é streaming! Em outras
palavras, trata-se de um fluxo de dados contínuo (nesse caso, vídeo) transmitido de
uma fonte de dados para um destino específico.

Em Java, quando dizemos que um objeto é serializado, estamos querendo dizer que
ele será transformado em bytes, e poderá ser armazenado em disco ou transmitido
por um stream. Um stream é um objeto de transmissão de dados, em que um fluxo
de dados serial é feito através de uma origem e de um destino. Os tipos mais
comuns de stream são o FileOutputStream e o FileInputStream.

Ambos os streams são utilizados para manipular objetos serializados. O primeiro é


um fluxo de arquivo que permite a gravação em disco; o segundo é um fluxo de
arquivo que permite a leitura em disco – ou seja, o inverso! Galera, em suma, a
serialização serve para salvar, gravar e capturar o estado de um objeto. Assim, posso
criar um objeto, gravá-lo em um arquivo e futuramente utilizá-lo.

A serialização permite que eu transforme uma instância de um objeto em uma


sequência bytes. É bacana porque, nesse formato, eu posso enviá-lo pela rede,
salvar no disco ou comunicar uma JVM com outra. Eu congelo o estado atual de
um objeto e, lá no destino, descongela-se esse estado sem perda de dados. O
exemplo que eu costumo usar é jogo de videogame!

Sabe quando você já está lá quase zerando o jogo? E se você desligar o videogame e
perder tudo? Pois é, é útil salvar o estado atual! Como faço isso? Você deve
implementar a interface Serializable do pacote java.io.Serializable. O que tem nessa
16712855225

interface, professor? Nada, mas ela indica para a JVM que você deseja que
determinada classe esteja habilitada para ser serializada. Não encontrei questões!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JAVA: CLASSES E OPERAÇÕES DE I/O

Professor, o que é I/O? É uma sigla para Input/Output! Em português, seria E/S – ou
Entrada/Saída! Isso indica a comunicação entre sistemas de processamento de
dados (Ex: Computador) e o mundo externo (Ex: Humano). Entradas são dados
recebidos pelo sistema e Saídas são dados enviados pelo sistema. A melhor maneira
de entender isso é por meio de um exemplo!

Uma operação de entrada de dados seria aquele dado lido de uma base de dados
(Ex: read() – lê dados da entrada padrão do sistema). Já uma operação de saída de
dados seria aquele dado escrito em uma base de dados (Ex: write() – escreve dados
na saída padrão do sistema). Agora que vocês já sabem o que são operações de
Entrada/Saída, podemos prosseguir!

O Java é capaz de processar arquivos que requisitam grandes quantidades de dados


persistentes. O que é isso, professor? São aqueles dados armazenados dentro de
arquivos – fala-se persistente porque ele dura além da finalização de um programa.
Esse processamento de arquivos é uma capacidade que a linguagem oferece para
ler e gravar dados! Bacana?

Pessoal, se vocês quiserem trabalhar com entrada e saída de dados em nossa


linguagem, recomenda-se utilizar classes que estão dentro do pacote java.io. Por
que? Porque lá vocês encontrarão classes que oferecem funcionalidades como
manipulação de entrada/saída de bytes, manipulação de entrada/saída de
caracteres, buffers de leitura e escrita, conversão de formatos, entre outros.

As classes abstratas InputStream OutputStream definem, respectivamente, o


comportamento padrão dos fluxos de entrada (para ler bytes) e dos fluxos de saída
(para escrever bytes). Em outras palavras, essas duas classes abstratas permitem
16712855225

manipular a entrada e a saída de dados como uma sequência de bytes, sejam um


arquivo, um BLOB de uma base de dados, uma conexão remota via sockets, etc.

Vamos falar um pouco sobre a Classe InputStream! Ela oferece a funcionalidade básica
de leitura de um byte ou de uma sequência de bytes a partir de alguma fonte.
Podemos utilizar o método read() – o valor de retorno desse método é um inteiro,
que pode ser o byte lido do próprio método ou número de bytes lidos – quando o
retorno for igual a -1, é informado que o final do arquivo foi atingindo.

InputStream is = new FileInputStream("arquivo.txt");


int valor = is.read();

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Observem no exemplo acima que a classe abstrata InputStream foi declarada


inicializando uma classe dependente FileInputStream. Essa classe recebe uma String
como argumento do seu método construtor – ele representa a definição de onde
está localizado o arquivo. Entendido? Podemos ver abaixo a hierarquia das classes
que dependentes da Classe InputStream:

Abaixo podemos ver uma pequena descrição das principais classes:

Classe Descrição
ByteArrayInputStream Valores são originários de um arranjo de bytes.

FileInputStream Bytes com originalidade de um arquivo.

FilterInputStream Filtra os dados de um InputStream.

BufferedInputStream Faz a leitura de grandes volumes de bytes que armazena em um


16712855225

buffer interno.
DataInputStream Permite a leitura de representações binárias dos tipos primitivos
de Java.
ObjectInputStream Oferece o método readObject para a leitura de objetos que foram
serializados para um ObjectOutputStream.
PipedInputStream Faz a leitura de um pipe de bytes cuja origem está associada a um
objeto PipedOutputStream.

Já a Classe OutputStream é responsável por transferir os bytes para algum destino.


método write() tem a função de escrever em forma de bytes para o destino em que
enviará os dados. Que destino é esse? Bem, isso não importa! Quando o sistema

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

precisar escrever em uma saída, basta ele chamar o método que utiliza a classe
abstrata, visto que ele aceita qualquer dependente de OutputStream.
Observem um exemplo abaixo:

File arquivo = new File("Teste.txt");


FileWriter fw = new FileWriter(arquivo);
fw.write("25");
fw.flush();

Abaixo podemos ver uma pequena descrição das principais classes:

Classe Descrição
FileOutputStream Escreve em um arquivo ou em um descritor de arquivo.

FilterOutputStream Filtra saídas, transformando dados ou provendo funcionalidades


adicionais.
PipedOutputStream Cria comunicações pipe ao se conectar com entradas pipe.

ByteArrayOutputStream Implementa uma saída na qual dados são escritos em um array


de bytes.
ObjectOutputStream Escreve tipos de dados primitivos.
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

NOVIDADES: JAVA 8

Pessoal, vocês já devem saber que nós temos uma nova versão! A cobrança ainda
é raríssima (só encontrei uma questão), mas é bom saber um pouco sobre as
principais novidades. A grande novidade foram as Lambda Expressions! Pois é, Java
agora tem algumas características de programação funcional. Professor, o que é
exatamente programação funcional?

É 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 com a programação imperativa, que enfatiza mudanças
no estado do programa. As Lambda Expressions permitem passar comportamentos,
ou funções como argumentos em uma chamada de método.

Para entendê-las, é necessário conhecer os conceitos de funções de primeira classe


e literais. Tradicionalmente no Java, um método (função, procedimento) somente
existe como membro de uma classe. Isso significa que, embora você possa ter uma
variável "apontando" para um objeto, você não pode guardar um método numa
variável. Bacana, pessoal?

Tudo aquilo que é permitido referenciar numa linguagem (no caso, objetos ou tipos
primitivos), passar como parâmetro para outras funções, etc, é dito ser "de primeira
classe". Outras linguagens, entretanto, permitem que funções e outras coisas mais
(como classes) sejam referenciados e passados como argumento. No JavaScript, por
exemplo, é bastante comum passar uma função para uma variável.

O suporte a funções de primeira classe simplifica em muito a construção de certas


funções. Aliás, elas vão um passo além, não só permitindo passar funções como
parâmetro para outras funções, mas também permitindo que as mesmas sejam
16712855225

expressas como literais. Professor, o que é um literal? Um literal é uma notação que
representa um valor fixo no código fonte.

Em outras palavras, através do uso da própria sintaxe você consegue criar um objeto
que de outra forma exigiria a combinação de duas ou mais funcionalidades
diferentes. No Java 8, o literal para uma expressão lambda consiste em uma lista de
argumentos (zero ou mais) seguida do operador -> seguida de uma expressão que
deve produzir um valor. Exemplos:

() -> 42 // Não recebe nada e sempre retorna "42"


x -> x*x // Recebe algo e retorna seu quadrado
(x,y) -> x + y // Recebe dois valores e retorna sua soma

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Em suma, as expressões lambda busca concisão no código, i.e., fazer mais


escrevendo menos. Com frequência, não há razão para se exigir que uma função
esteja sempre acompanhada de uma classe, e o uso dessas expressões evita muitas
construções desnecessárias. Evita-se criar classes anônimas com apenas um método
para solucionar algum problema. Quem se interessar mais:

http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#use-case

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas Garbage


Collector é a tecnologia que gerencia a memória alocada para o programa, a
fim de liberar objetos que não estão sendo utilizados.

Comentários:

O acesso a arrays e strings, e a conversão de tipos são checados em tempo de


execução para assegurar a sua validade. O Garbage Collector faz a desalocação
automática de memória evitando, erros de referência e desperdício de memória.
Finalmente, o recurso de Exception Handling permite o tratamento de erros em tempo de
execução, por um mecanismo robusto, análogo ao do C++.

Conforme vimos em aula, essa é a função precípua do Garbage Collector!

Gabarito: C

(CESPE - 2012 - TRE-RJ - Técnico Judiciário - Programação de Sistemas A


linguagem de programação Java é muito utilizada por ter como característica
gerar um código independente de plataforma que pode ser executado em
qualquer arquitetura e sistema operacional que tenha o sistema Java.

Comentários:

Vocês sabiam que Java é uma Linguagem WORA? Pois é, esse acrônimo significa
Write Once, Run Anywhere ou Escreva uma vez, execute em qualquer lugar. Trata-
se de um slogan para exemplificar os benefícios multiplataforma da linguagem Java!
Idealmente, isso significa que um programa em Java (uma vez compilado em um
bytecode) pode rodar em qualquer equipamento que possua uma JVM!
16712855225

Conforme vimos em aula, seria mais correto dizer Java Virtual Machine (JVM) e, não,
Sistema Java. No entanto, a questão está correta.

Gabarito: C

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Análise de Sistemas


No Java, a JRE possui tudo que é necessário para desenvolver programas em
Java.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Portanto, é o seguinte: se você deseja somente executar alguma aplicação Java no


seu computador ou navegador, basta instalar um JRE! No entanto, se você planeja
programar em Java, você precisará de um JDK (que contém a JRE)! Entenderam? É
bastante simples! JRE é o mínimo que você precisa para rodar uma aplicação e o JDK
é o que você precisa para desenvolver uma aplicação!

Conforme vimos em aula, ela possui tudo que é necessário para executar programas
em Java. Para desenvolver programas, seria necessária uma JDK!

Gabarito: E

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Análise de Sistemas


Em Java, para toda classe, método e variável de instância que se declara há um
controle de acesso, independentemente de o controle ser explicitamente
indicado.

Comentários:

Especificador Própria Classe Subclasse Pacote Global


Private (-) Sim Não Não Não
<vazio> (~) Sim Não* Sim Não
Protegido (#) Sim Sim Sim Não
Público (+) Sim Sim Sim Sim

Conforme vimos em aula, está perfeito! Por que ele diz “independentemente de o
controle ser explicitamente indicado”? Porque quando não se indica o modificador
de acesso, assume-se que é Pacote ou Default.
16712855225

Gabarito: C

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Análise de Sistemas


O operador instanceof só pode ser usado para testar valores null.

Comentários:

Palavras Descrição
Testa se um objeto é uma instância de uma classe específica ou se é null.
Instanceof

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Conforme vimos em aula, ele também pode ser utilizado para testar se um objeto
é instância de uma classe específica.

Gabarito: E

(CESPE - 2012 - MPE-PI - Analista Ministerial - Informática - Cargo 6 Em Java,


qualquer método de uma classe pode ser sobrescrito por métodos de outra
classe.

Comentários:

//Indica que esse método não possui corpo


abstract int soma (int a, int b) {//...//}

//Indica que esse método não pode ser sobrescrito


final int soma (int a, int b) {//...//}

//Indica que esse método só pode acessar atributos de classe e não pode ser sobrescrito
static int soma (int a, int b) {//...//}

//Indica que esse método foi escrito outra linguagem


native int soma (int a, int b) {//...//}

//Indica que esse método só é executável por uma thread por vez
synchronized soma (int a, int b) {//...//}

Não, métodos finais, estáticos e privados não podem ser sobrescritos por métodos
de outra classe.

Gabarito: E

(CESPE - 2011 - -ES - Técnico de Informática - Específicos) O JVM (Java Virtual


16712855225

Machine) é um interpretador que atribui portabilidade à linguagem Java,


possibilitando, consequentemente, a sua execução em qualquer sistema
operacional.

Comentários:

Java é também uma linguagem portável e multiplataforma! O Compilador é capaz


de gerar um código intermediário (bytecode), que permite que o mesmo programa
possa ser executado em qualquer máquina ou sistema operacional que possua uma
JVM. Ademais, busca que todos os aspectos da linguagem sejam independentes de
plataforma (Ex: ela especifica o tamanho e comportamento de cada tipo de dado).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Perfeito, desde que haja uma Java Virtual Machine (JVM) específica para esse
Sistema Operacional. Portanto, a questão está incompleta, mas não é bom brigar
com a banca.

Gabarito: C

(CESPE - 2011 - TRE-ES - Técnico - Programação de Sistemas – Específicos O


encapsulamento em Java somente pode ser realizado por meio do modificador
de acesso protegido.

Comentários:

Especificador Própria Classe Subclasse Pacote Global


Private (-) Sim Não Não Não
<vazio> (~) Sim Não* Sim Não
Protegido (#) Sim Sim Sim Não
Público (+) Sim Sim Sim Sim

Não, pode ser Público, Privado, Protegido ou Padrão.

Gabarito: E

(CESPE - 2010 - TRT - 21ª Região (RN) - Técnico Judiciário - Tecnologia da


Informação A linguagem de programação Java, em razão de sua portabilidade
— uma vez que o compilador Java converte o código fonte em bytecodes,
executados por uma máquina virtual — é bastante utilizada para oferecer
conteúdos dinâmicos na Web. 16712855225

Comentários:

O bytecode é um código intermediário, que é posteriormente interpretado e


executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

Conforme vimos em aula, está perfeito! Para tal, utiliza-se o Java EE.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Gabarito: C

10. (CESPE - 2010 - TRE-BA - Técnico Judiciário - Programação de Sistemas Em


programação orientada a objetos, o pacote tem como função agrupar classes
dentro de um grupo. Em Java, o pacote Swing (javax.swing) é composto de várias
classes para a implementação de interfaces gráficas em desktop.

Comentários:

A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário


(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o
Swing é um conjunto sofisticado de classes e interfaces que definem os componentes
visuais necessários para construir uma interface gráfica de usuário.

Conforme vimos em aula, a questão está correta!

Gabarito: C

11. (CESPE - - ANAC - Analista Administrativo - Tecnologia da Informação


Pelo uso de polimorfismo, uma chamada de método pode fazer que diferentes
ações ocorram, dependendo do tipo do objeto que recebe a chamada.

Comentários:

A palavra Polimorfismo vem do grego: muitas formas. Trata-se da capacidade de um


objeto poder se comportar de diversas formas dependendo da mensagem recebida
Observem que isso não quer dizer que o objeto fica transformando seu tipo a todo
momento. Na verdade, um objeto nasce com um tipo e morre com esse mesmo tipo.
16712855225

O que muda, então? É a forma como nós nos referimos a esse objeto!

Conforme vimos em aula, dependendo do tipo de objeto (se é da Classe-Pai ou da


Classe-Filho), ações diferentes podem ocorrer.

Gabarito: C

12. (CESPE - 2010 - EMBASA - Analista de Saneamento - Analista de Tecnologia da


Informação - Desenvolvimento O trecho de código a seguir está incorreto
porque uma variável booleana em Java usa a sintaxe == e não =.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Public void disconnect() {


Connected = false;
}

Comentários:

ARITMÉTICOS ATRIBUIÇÃO RELACIONAIS LÓGICOS BIT A BIT


+ = > ! &
- += < && |
* -= >= || ^
/ *= <= <<
% /= != >>
%= == >>>
++ ?
-- instanceof

Conforme vimos em aula, o operador de atribuição (=) é diferente do operador


relacional (==).

Gabarito: E

13. (CESPE - - TRE-MA - Técnico Judiciário - Programação de Sistemas) Para


definição e manipulação de uma exceção em Java, devem constar no programa,
obrigatoriamente, os termos:

a) try e catch.
b) try e finally.
c) finally e catch. 16712855225

d) finally e retry.
e) try e retry.

Comentários:

É útil para liberar recursos do sistema quando utilizamos, por exemplo, conexões de
banco de dados e abertura de buffer para leitura ou escrita de arquivos. finally virá
após os blocos de catch. Portanto, o try indica que um bloco de código pode ocorrer
erro; o catch tem o objetivo de capturar, manipula e trata erros; e o finally busca realizar
ações mesmo após a captura de erros. Vejamos a estrutura básica:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Conforme vimos em aula, utilizam-se Try e Catch!

Gabarito: A

14. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação Ao contrário dos tipos primitivos que não são objetos, os tipos de
objetos são determinados pela classe de origem.

Comentários:

Perfeito, perfeito, perfeito!

Gabarito: C

15. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação Uma classe final indica uma classe que não pode ser estendida. Um
método final não pode ser redefinido em classes derivadas.

Comentários:

//Indica que esse método não pode ser sobrescrito


final int soma (int a, int b) {//...//}

//Essa classe não pode ser estendida


final class Carro { //...// }

Conforme vimos em aula, a classe final não pode ter filhos e Método Final não pode
ser sobrescrita.

16712855225

Gabarito: C

16. (CESPE - - SERPRO - Analista - Desenvolvimento de Sistemas A linguagem


Java, orientada a objetos, tem como característica ser compilada em um código
executado em máquina virtual.

Comentários:

Java é também uma linguagem portável e multiplataforma! O Compilador é capaz


de gerar um código intermediário (bytecode), que permite que o mesmo programa
possa ser executado em qualquer máquina ou sistema operacional que possua uma

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

JVM. Ademais, busca que todos os aspectos da linguagem sejam independentes de


plataforma (Ex: ela especifica o tamanho e comportamento de cada tipo de dado).

Conforme vimos em aula, está perfeito! Qual o nome desse código? Bytecode!

Gabarito: C

17. (CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


Informação A instrução import Java.awt.* indica que o programa irá utilizar
componentes gráficos.

Comentários:

Essa questão é polêmica! Alguns afirmar que é possível inserir a instrução, mas não
utilizar componentes gráficos. Não faria sentido importar um pacote para não
utilizar suas funcionalidades, mas é possível – apesar de má prática! Eu acredito que
a questão cabe recurso, sim!

Gabarito: C

18. (CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


Informação Em Java, os métodos public de uma classe são utilizados pelos
clientes da classe para manipular dados armazenados em objetos dessa classe.

Comentários:

Pessoal, esses Modificadores de Acesso determinam quão acessíveis são esses


elementos. Vamos vê-los agora em mais detalhes:
16712855225

 <public>: essa instrução indica que a classe, método ou atributo assim declaradas
podem ser acessadas em qualquer lugar e a qualquer momento da execução do
programa – é o modificador menos restritivo.

Perfeito, são públicos para toda e qualquer classe.

Gabarito: C

19. (CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas A tecnologia


JSE (Java Small Editon) utilizada pela plataforma iOS permite o desenvolvimento

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

de aplicações para todos os seus dispositivos, como estações gráficas, iPad, iPod,
entre outros.

Comentários:

 Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos


compactos ou móveis, como smartphones, tablets, controles remotos, etc. Permite
o desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um
dispositivo de propósito específico, desempenhando alguma tarefa útil. Em geral,
possuem limitações de recursos como memória ou processamento.

Conforme vimos em aula, a questão está cheia de erros! Primeiro, JSE é a sigla de
Java Standard Edition. Segundo, a tecnologia proposta no item é o JME!

Gabarito: E

(CESPE - 2013 - MPOG - Tecnologia da Informação O JME foi criado para


trabalhar com ambientes de programação multiprocessados em ambientes
distribuídos.

Comentários:

 Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos compactos
ou móveis, como smartphones, tablets, controles remotos, etc. Permite o
desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um
dispositivo de propósito específico, desempenhando alguma tarefa útil. Em geral,
possuem limitações de recursos como memória ou processamento.

 Java Enterprise Edition (Java EE): trata-se do padrão para desenvolvimento de


16712855225

sistemas corporativos, voltada para aplicações multicamadas, baseadas em


componentes executados em servidores de aplicações – ele inclui o Java SE.
Contém bibliotecas para acesso a base de dados, RPC, CORBA, entre outras. As
aplicações podem ou não estar na internet.

Conforme vimos em aula, Java ME possui diversas limitações de recursos. Na


verdade, é o Java EE que é ideal para ambientes distribuídos.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

21. (CESPE - 2013 - ANTT - Analista Administrativo - Desenvolvimento de Sistemas


da Informação JSE, JME, JEE e JCE são edições da tecnologia Java voltadas para
o desenvolvimento de aplicações para desktop/servidores, dispositivos móveis,
ambientes corporativos e ambientes em nuvem, respectivamente.

Comentários:

 Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos


compactos ou móveis, como smartphones, tablets, controles remotos, etc. Permite
o desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um
dispositivo de propósito específico, desempenhando alguma tarefa útil. Em geral,
possuem limitações de recursos como memória ou processamento.

Conforme vimos em aula, está quase tudo certo! No entanto, JCE é uma API de
Criptografia (Java Cryptography Extension). Não se trata de uma plataforma ou
ambiente de desenvolvimento em nuvem!

Gabarito: E

(CESPE - - HEMOBRÁS - Técnico de Informática O Java dá suporte a


programação concorrente (multithreading).

Comentários:

Dessa forma, aplicações funcionam da mesma maneira em qualquer ambiente.


Podemos dizer que Java é uma linguagem concorrente ou multithreaded, i.e., pode
realizar diversas tarefas assincronamente com o uso de threads, que são suportadas
de modo nativo. Java torna a manipulação de threads tão simples quanto trabalhar
com qualquer variável. 16712855225

Conforme vimos em aula, Java dá suporte à programação concorrente. Observem


que a própria questão escreveu “a” sem crase. As bancas não ajudam :-(

Gabarito: C

(CESPE - - ANAC - Técnico Administrativo - Informática) A linguagem de


programação Java permite operações de bit, como, por exemplo, AND (&) e OR
(|).

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

ARITMÉTICOS ATRIBUIÇÃO RELACIONAIS LÓGICOS BIT A BIT


+ = > ! &
- += < && |
* -= >= || ^
/ *= <= <<
% /= != >>
%= == >>>
++ ?
-- instanceof

Conforme vimos em aula, esses são de fato operadores de bit!

Gabarito: C

24. (CESPE - 2010 - MPU - Técnico de Informática Na linguagem Java, um objeto


do tipo Integer pode receber valor nulo, porém uma variável primitiva int não pode.

Comentários:

NOME TIPO TAMANHO MÍNIMO MÁXIMO DEFAULT


LÓGICO boolean - false true false
CARACTERE char 16 bits 0 216 – 1 ‘\u0000’
byte 8 bits -27 27 – 1 0
short 16 bits -215 215 – 1 0
INTEIRO
int 32 bits -231 231 – 1 0
long 64 bits -263 263 – 1 0
float 32 bits 16712855225

7 Casas Decimais 0.0


DECIMAL
double 64 bits 15 Casas Decimais 0.0

Conforme vimos em aula, int é uma variável primitiva que recebe valores inteiros,
i.e., não pode receber valor nulo. Já o tipo Integer é um objeto, logo pode receber
valores nulos.

Gabarito: C

( PE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Técnico Judiciário - Tecnologia da


Informação É possível indicar que parte de um código em um método pode
gerar uma exceção, por meio da utilização da palavra-chave finally.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Comentários:

É útil para liberar recursos do sistema quando utilizamos, por exemplo, conexões de
banco de dados e abertura de buffer para leitura ou escrita de arquivos. finally virá
após os blocos de catch. Portanto, o try indica que um bloco de código pode ocorrer
erro; o catch tem o objetivo de capturar, manipula e trata erros; e o finally busca realizar
ações mesmo após a captura de erros. Vejamos a estrutura básica:

Conforme vimos em aula, a questão trata do try e, não, do finally.

Gabarito: E

(CESPE - 2014 - ANATEL - Analista Administrativo - Tecnologia da Informação e


Comunicação A linguagem Java possui checked exceptions que estendem
java.lang.Exception, em que o compilador força o programador a capturar tais
exceções. Essas exceções devem ser tratadas com um bloco try-catch ou com
um throws.

Comentários:

16712855225

A segunda define erros para os quais as aplicações normalmente têm condições de


realizar um tratamento, logo Exception e Error são subtipos de Throwable. As exceções
ainda se dividem em verificadas (Checked), quando obrigatoriamente devem ser

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

tratadas e não-verificadas (Unchecked), quando não há essa obrigação – programador


decide! E como se detectam, manipulam e tratam as exceções?

Conforme vimos em aula, podemos ter vários blocos catch de um único try. Além
disso, de fato elas devem tratadas (try-catch) ou propagadas (throws).

Gabarito: C

27. (CESPE – 2004 – STJ - Analista Judiciário - Análise de Sistemas) O Java collections
framework da API Java J2SE possui um conjunto de interfaces e implementações
que define estruturas usadas para manipular coleções de objetos. As interfaces
fundamentais do framework estão associadas à identificação de funcionalidades
típicas de estruturas de dados clássicas. Assim, a interface java.util.List está ligada
a estruturas de listas, a interface java.util.Set está associada a estruturas do tipo
conjuntos e a interface java.util.Map refere-se a estruturas do tipo mapas. Set,
List e Map possuem a interface abstrata java.util.Collection como superinterface.

Comentários:

Por fim, vamos falar sobre os Mapas (java.util.Map). Aqui já começamos diferente,
porque mapas não são coleções. Pensem comigo: muitas vezes queremos buscar
rapidamente um objeto, dada alguma informação sobre ele (Ex: dada a placa do
carro, obter todos os dados). Poderíamos utilizar uma lista e percorrer todos os
elementos, mas isso é péssimo para a performance – aqui entra o mapa!

Conforme vimos em aula, mapas não são coleções – não são filhos de java.util.Collection.

Gabarito: E
16712855225

(CESPE – 2004 – STJ - Analista Judiciário - Análise de Sistemas) As classes


java.util.LinkedList e java.util.ArrayList são implementações para listas
encadeadas e coleções do tipo arranjos com tamanho modificável,
respectivamente, para a interface java.util.List.

Comentários:

Galera, não sei se algum de vocês já programou em C! Se sim, vocês se lembram de


como era complicado utilizar ponteiros, ponteiros para ponteiros, alocação dinâmica
de memória? Pois é, Java não exige que você faça nada disso! As coisas aqui são

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

muito mais simples e já existe bastante funcionalidade implementada e pronta para


ser utilizada. As principais classes implementadoras são: ArrayList, LinkedList, Vector.

Conforme vimos em aula, essas são – de fato – classes implementadoras de


java.util.List.

Gabarito: C

(CESPE – – ANCINE – Analista de Sistemas) Os tipos de dados HashSet,


ArrayList e HashMap são classes que implementam os tipos de dados Set, List e
Map, respectivamente.

Comentários:

Galera, não sei se algum de vocês já programou em C! Se sim, vocês se lembram de


como era complicado utilizar ponteiros, ponteiros para ponteiros, alocação dinâmica
de memória? Pois é, Java não exige que você faça nada disso! As coisas aqui são
muito mais simples e já existe bastante funcionalidade implementada e pronta para
ser utilizada. As principais classes implementadoras são: ArrayList, LinkedList, Vector.

Como os conjuntos não possuem ordem, as operações baseadas em índice que


existem nas listas não aparecem nos conjuntos. Set é a interface Java que define os
métodos que um conjunto deve implementar. As principais classes implementadoras
são: HashSet, TreeSet e LinkedHashSet. Cada implementação possui suas características
sendo apropriadas para contextos diferentes.

Em um dicionário eu associo um vocábulo a uma definição. A chave é um objeto


utilizado para recuperar um valor. O mapa costuma aparecer junto com outras
coleções, para poder realizar essas buscas. As principais classes implementadoras da
16712855225

interface Map são: HashMap, TreeMap e LinkedHashMap. Cada implementação possui suas
características sendo apropriadas para contextos diferentes.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE – – SGA/AC – Analista de Sistemas – C ArrayList implementa a


interface List e Collection.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Galera, não sei se algum de vocês já programou em C! Se sim, vocês se lembram de


como era complicado utilizar ponteiros, ponteiros para ponteiros, alocação dinâmica
de memória? Pois é, Java não exige que você faça nada disso! As coisas aqui são
muito mais simples e já existe bastante funcionalidade implementada e pronta para
ser utilizada. As principais classes implementadoras são: ArrayList, LinkedList, Vector.

Conforme vimos em aula, ArrayList é uma classe implementadora da Interface List,


que por sua vez estende a interface java.util.Collection. ArrayList não implementa Collection
diretamente.

Gabarito: E

31. (CESPE – 2008 – MPE/RR - Analista de Sistemas) O pacote java.awt contém


diversas classes para criar interfaces gráficas de usuário em aplicações Java.

Comentários:

A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário


(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o
Swing é um conjunto sofisticado de classes e interfaces que definem os componentes
visuais necessários para construir uma interface gráfica de usuário.

Conforme vimos em aula, trata-se de um pacote de classes para criar interfaces


gráficas de usuário em Java.

Gabarito: C
16712855225

(CESPE – – MPE/RR - Analista de Sistemas) No AWT, um componente é


qualquer classe que possa ser representada em uma tela sem interação com
usuário.

Comentários:

A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário


(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o
Swing é um conjunto sofisticado de classes e interfaces que definem os componentes
visuais necessários para construir uma interface gráfica de usuário.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 91 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Conforme vimos em aula, trata-se de uma interface com o usuário, logo interage
com o usuário.

Gabarito: E

(CESPE – – MPE/RR - Analista de Sistemas) O Swing suporta o


desenvolvimento de interfaces gráficas para usuários (GUI) com o uso da IDE
NetBeans

Comentários:

A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário


(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o
Swing é um conjunto sofisticado de classes e interfaces que definem os componentes
visuais necessários para construir uma interface gráfica de usuário.

Conforme vimos em aula, a questão está correta! Qual a IDE utilizada pouco
importa, o swing suporta o desenvolvimento de GUI e ponto final!

Gabarito: C

34. (CESPE – 2011 – MEC - Analista de Sistemas) AWT é um conjunto de


componentes GUI, integrante da arquitetura JEE6, constante no pacote java.awt,
desenvolvidas para substituir as GUIs do SWING.

Comentários:
16712855225

O AWT (javax.awt) veio primeiro, é mais pesado, é gerado pelo sistema operacional,
logo é dependente de plataforma. O Swing (javax.swing) é mais leve, é gerado por uma
Máquina Virtual Java (JVM), logo é independente de plataforma. Galera, nem tudo é
diferente! Vejam: ambos são fáceis de programar, porque a orientação a objetos
proporciona alterar partes do programa, sem alterar toda a estrutura.

Conforme vimos em aula, AWT veio primeiro que o Swing! Esse último veio dar mais
dinamismo e leveza aos componentes – hoje em dia, pouco se usa de AWT!

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 92 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(CESPE – 2015 – TCU - Analista de Sistemas No contexto de um código na


linguagem Java, o comando a seguir é utilizado com a finalidade específica de
passar para o campo de visibilidade pública saldo o valor da variável deposito
com o tipo double. public void saldo (double deposito).

Comentários:

A redação ficou um pouco confusa, mas vejam que a questão fala em passar para
campo. Que campo? O saldo é um método e, não, um campo.
Gabarito: E

(CESPE – 2014 – ANATEL - Analista de Sistemas No JSE (Java Standard Edition)


versão 8, é possível utilizar recursos inerentes à programação funcional por meio
de uma nova característica da linguagem chamada expressões Lambda, que
permitem o tratamento de funções como argumentos de métodos.

Comentários:

Pessoal, vocês já devem saber que nós temos uma nova versão! A cobrança ainda é
raríssima (só encontrei uma questão), mas é bom saber um pouco sobre as principais
novidades. A grande novidade foram as Lambda Expressions! Pois é, Java agora tem
algumas características de programação funcional. Professor, o que é exatamente
programação funcional?

É 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 com a programação imperativa, que enfatiza mudanças
no estado do programa. As Lambda Expressions permitem passar comportamentos,
ou funções como argumentos em uma chamada de método.
16712855225

Conforme vimos em aula, a questão está perfeita!


Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 93 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas Em relação


ao Java Standard Edition, é INCORRETO afirmar:

a) Possui gerenciamento de memória embutido, por meio do coletor de lixo.

b) Ambiente indicado para o desenvolvimento de aplicativos para dispositivos


móveis ou portáteis.

c) Permite o desenvolvimento de aplicações desktop de linha de comando e


interfaces gráficas Swing.

d) Portabilidade dos programas compilados para diversos sistemas operacionais,


sem necessidade de recompilação.

e) Usa conceitos tais como orientação a objetos e multithreading.

Comentários:

O acesso a arrays e strings, e a conversão de tipos são checados em tempo de


execução para assegurar a sua validade. O Garbage Collector faz a desalocação
automática de memória evitando, erros de referência e desperdício de memória.
Finalmente, o recurso de Exception Handling permite o tratamento de erros em tempo de
16712855225

execução, por um mecanismo robusto, análogo ao do C++.

(a) Conforme vimos em aula, ele contém um Garbage Collector para gerenciamento
de memória;

 Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos


compactos ou móveis, como smartphones, tablets, controles remotos, etc. Permite
o desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um
dispositivo de propósito específico, desempenhando alguma tarefa útil. Em geral,
possuem limitações de recursos como memória ou processamento.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 94 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(b) Conforme vimos em aula, esse é o Java ME (Java Micro Edition);

A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário


(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o
Swing é um conjunto sofisticado de classes e interfaces que definem os componentes
visuais necessários para construir uma interface gráfica de usuário.

(c) Conforme vimos em aula, ele permite desenvolvimento de aplicações desktop e


de interfaces gráficos (Swing e AWT);

Vocês sabiam que Java é uma Linguagem WORA? Pois é, esse acrônimo significa
Write Once, Run Anywhere ou Escreva uma vez, execute em qualquer lugar. Trata-
se de um slogan para exemplificar os benefícios multiplataforma da linguagem Java!
Idealmente, isso significa que um programa em Java (uma vez compilado em um
bytecode) pode rodar em qualquer equipamento que possua uma JVM!

(d) Conforme vimos em aula, é uma linguagem WORA (Write Once, Run Anywhere);

Dessa forma, aplicações funcionam da mesma maneira em qualquer ambiente.


Podemos dizer que Java é uma linguagem concorrente ou multithreaded, i.e., pode
realizar diversas tarefas assincronamente com o uso de threads, que são suportadas
de modo nativo. Java torna a manipulação de threads tão simples quanto trabalhar
com qualquer variável.

(e) Conforme vimos em aula, é uma linguagem orientada a objetos e possui suporte
nativo a threads;

16712855225

Gabarito: B

(FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da


Informação A plataforma Java disponibiliza um interpretador que traduz, em
tempo de execução, o bytecode para instruções nativas do processador,
permitindo, dessa forma, que uma mesma aplicação seja executada em qualquer
plataforma computacional que possua essa implementação. Trata-se de:

a) Java Virtual Machine.


b) Java API.
c) JavaBeans.
d) J2SE.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 95 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

e) JavaFX.

Comentários:

O bytecode é um código intermediário, que é posteriormente interpretado e


executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

Conforme vimos em aula, trata-se da Java Virtual Machine (JVM)!

Gabarito: A

(FCC - 2010 - Sergipe Gás S.A. - Analista de Sistemas É tida como uma das
principais linguagens de programação orientada a objeto; tem como
característica a compilação para um bytecode e execução por uma máquina
virtual. Trata-se da linguagem:

a) Algol.
b) Delphi.
c) C++.
d) Java.
e) PHP.

Comentários:

Java é também uma linguagem portável e multiplataforma! O Compilador é capaz


de gerar um código intermediário (bytecode), que permite que o mesmo programa
16712855225

possa ser executado em qualquer máquina ou sistema operacional que possua uma
JVM. Ademais, busca que todos os aspectos da linguagem sejam independentes de
plataforma (Ex: ela especifica o tamanho e comportamento de cada tipo de dado).

Conforme vimos em aula, trata-se da linguagem Java.

Gabarito: D

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web Os aplicativos Java “rodam” em diferentes ambientes. A tradução dos

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 96 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

códigos Java (bytecode), para instruções específicas de cada sistema e


dispositivo, é uma função do programa:

a) Java Community Process (JCP).


b) Java Virtual Module (JVM).
c) Java Virtual Machine (JVM).
d) Java Comunication Process (JCP).
e) Java Enterprise Machine (JEM).

Comentários:

O bytecode é um código intermediário, que é posteriormente interpretado e


executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

Conforme vimos em aula, trata-se da Java Virtual Machine (JVM)!

Gabarito: C

(FCC - 2009 - -SE - Técnico Judiciário - Programação de Sistemas Um objeto


é instanciado em Java por meio do operador:

a) instanceof.
b) extend.
c) new.
d) this.
e) type. 16712855225

Comentários:

Palavras Descrição
Testa se um objeto é uma instância de uma classe específica ou se é null.
Instanceof

Utilizado para aplicar o conceito de herança para uma classe, onde uma
Extends classe receberá os métodos e variáveis de instância da classe chamada de
pai.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 97 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Utilizada para se criar novas instâncias de objetos.


New

Representa a instância que está atualmente sendo executada.


This

Conforme vimos em aula, trata-se da palavra-reservada new – lembrando que type


não é um operador!

Gabarito: C

(FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da


Informação Uma classe Java pode ser instanciada por um comando, cuja sintaxe
é:

a) nome_Objeto nome_Classe = new nome_Objeto();


b) nome_Classe nome_Objeto = new nome_Classe();
c) nome_Classe nome_instancia = new nome_Objeto();
d) nome_Instancia nome_Objeto = new nome_Instancia();
e) nome_Instancia nome_Classe = new nome_Instancia();

Comentários:

/* 1) Operador NEW é responsável por criar um objeto;


* 2) NomeClasse() é o construtor da Classe NomeClasse;
* 3) NomeObjeto é uma variável do Tipo NomeClasse; */

NomeClasse NomeObjeto = new NomeClasse();

/* Observem que é possível atribuir o objeto de uma 16712855225

* classe para uma variável de outra classe */

Conforme vimos em aula, o operador new cria um novo objeto! Para tal, utiliza-se
o construtor da classe que se deseja criar uma instância: Nome_Classe( ). Por fim, ele
atribui esse novo objeto a uma variável Nome_Objeto pertencente a classe Nome_Classe.

Gabarito: B

(FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da


Informação A diretiva public é utilizada em Java para aplicar a encapsulação
pública:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 98 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

a) aos métodos e classes, apenas.


b) aos atributos, métodos e classes.
c) às classes, apenas.
d) aos atributos, apenas.
e) aos atributos e classes, apenas.

Comentários:

Pessoal, esses Modificadores de Acesso determinam quão acessíveis são esses


elementos. Vamos vê-los agora em mais detalhes:

 <public>: essa instrução indica que a classe, método ou atributo assim declaradas
podem ser acessadas em qualquer lugar e a qualquer momento da execução do
programa – é o modificador menos restritivo.

Conforme vimos em aula, o public pode ser aplicado a atributos, métodos e classes.

Gabarito: B

(FCC - 2008 - TCE-AL - Programador Em Java, para alterar a visibilidade do


elemento em que se aplica, entre outros, utiliza-se o modificador de acesso:

a) static.
b) abstract.
c) protected.
d) volatile.
e) transient.
16712855225

Comentários:

Pessoal, esses Modificadores de Acesso determinam quão acessíveis são esses


elementos. Vamos vê-los agora em mais detalhes:

 <protected>: essa instrução indica que métodos ou atributos (classes, não) assim
declaradas somente podem ser acessadas dentro do pacote em que está contida
ou por subclasses no mesmo pacote.

Apenas um desses é um Modificador de Acesso: protected.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 99 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Gabarito: C

(FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas


Analise os seguintes valores, variáveis e operações usando expressões Java:

byte j = 30;
short k = 54;
int m = 40;
long n = 12L;
long resultado = 0L;
resultado += j;
resultado += k;
resultado /= n;
resultado -= m;

Após a última operação, o resultado será igual a:

a) -7.
b) -32.
c) -33.
d) 60.
e) 84.

Comentários:

resultado = resultado + j = 0L + 30 = 30L; //Houve cast implícito


resultado = resultado + j = 30L + 54 = 84L; //Houve cast implícito
resultado = resultado/n = 84L/12L = 7L;
resultado = resultado m = 7L 40 = -33L //Houve cast implícito

Gabarito: C

10. (FCC - - TRE-MG - Técnico Judiciário - Programação de Sistemas Os


16712855225

métodos Java que não retornam valores devem possuir no parâmetro tipo-de-
retorno a palavra:

a) static.
b) public.
c) void.
d) main.
e) string args.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 100 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Palavras Descrição
Representa um retorno vazio, i.e., nenhum retorno para esse método.
Void

Conforme vimos em aula, trata-se da palavra-reservada void.

Gabarito: C

11. (FCC - 2012 - TST - Analista Judiciário - Análise de Sistemas) Considere o


programa abaixo escrito na linguagem Java:

public class Programa


{
public static void main(String args[])
{
for(int i=3; i<20; i+=2)
{
System.out.print((i%3) + "");
}
}
}

O resultado a ser informado ao usuário após a execução do programa acima é:

a) 0 0 1 0 0 1 0 0 1
b) 0 1 2 0 1 2 0 1 2
c) 0 1 0 1 0 1 0 1 0
d) 1 2 1 2 1 2 1 2 1
e) 0 2 1 0 2 1 0 2 1

Comentários: 16712855225

i = 3; 3%3 = 0;
i = 5; 5%3 = 2;
i = 7; 7%3 = 1;
i = 9; 9%3 = 0;
i = 11; 11%3 = 2;
i = 13; 13%3 = 1;
i = 15; 15%3 = 0;
i = 17; 17%3 = 2;
i = 19; 19%3 = 1;

Lembrando que o Operador % oferece o resto da divisão entre dois números.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 101 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

12. (FCC - 2012 - MPE-AP - Analista Ministerial - Tecnologia da Informação Analise


o código das classes a seguir presentes em um mesmo pacote de um projeto
Java:

public class NewClassA {


public double calcular(int x, int y) {
return x + y;
}

public double calcular(double x, double y) {


return x * y;
}
}

public class NewClassB extends NewClassA {

public class Start {


public static void main(String[] args) {

}
}

Com base nos códigos apresentados e nos conceitos da orientação a objetos é


correto afirmar:

a) No método main da classe Start não é possível instanciar objetos das classes
NewClassA e NewClassB, pois essas classes não contêm um construtor válido.

b) Se for digitada a instrução NewClassB c = new NewClassA(); no método main da classe


Start será instanciado um objeto da NewClassA.

c) Se for digitada a instrução NewClassA b = new NewClassB(); no método main da classe


Start ocorrerá um erro, pois não é possível criar um objeto da NewClassA por meio
16712855225

do construtor da NewClassB.

d) A existência de dois métodos de mesmo nome na NewClassA que recebem a


mesma quantidade de parâmetros indica que está ocorrendo uma sobrescrita de
métodos.

e) Por meio de um objeto da NewClassB será possível acessar os métodos presentes


na NewClassA.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 102 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(a) Não, mesmo que não tenha um construtor explícito, o compilador cria um
construtor padrão no momento da criação do objeto; (b) Não, não se pode atribuir
uma instância de classe-pai a variável de uma classe-filha; (c) Não, não haveria erro!
Pode-se atribuir uma instância de classe filha a variável de uma classe-pai; (d) Não,
isso é sobrecarga; (e) Perfeito, ela herda tudo da classe-pai.

Gabarito: E

13. (FCC - 2012 - TCE- - Auxiliar de Fiscalização Financeira Em um programa Java,


considere a existência de uma variável do tipo long chamada cod contendo o
valor 1234. Para passar o valor contido nessa variável para uma variável do tipo
byte chamada codNovo, deve-se fazer casting. Para isso, utiliza-se a instrução:
byte codNovo =

a) Byte.valueOf(cod);
b) (long) cod;
c) Byte.pasreByte(cod);
d) (byte) cod;
e) (cast) cod;

Comentários:

16712855225

Conforme vimos em aula, estamos indo do valor maior para o valor menor, portanto
precisamos fazer um cast explícito: byte codNovo = (byte) cod.

Gabarito: D

14. (FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas Para


chamar o método soma da classe Calculo, e mostrar na tela o retorno desse
método, é correto utilizar:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 103 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03
public class Calculo {
public static double soma(double n1, double n2) {
return n1 + n2;
}
public static double soma(double n1, double n2, double n3) {
return n1 + n2 + n3;
}
}

a) Calculo c = new Calculo(); System.out.println (c.soma(10, 20, 30)); ou


System.out.println (Calculo.soma(10, 20));

b) Exclusivamente as instruções Calculo c = new Calculo(); System.out.println


(c.soma(10, 20));

c) Exclusivamente a instrução System.out.println (Calculo.soma(10, 20, 50));

d) Exclusivamente as instruções Calculo c = new Calculo(); double r = c.soma(10,


20); System.out.println(r);

e) Calculo c = Calculo.soma(10,20,30); System.out.println (c); ou


System.out.println (Calculo.soma(10, 20));

Comentários:

Vamos lá! Observem que há dois métodos estáticos, i.e., não é necessário criar um
objeto dessa classe para ter acesso aos seus métodos. Logo, há duas possibilidades:
pode-se instanciar um objeto dessa classe (Calculo c = new Calculo();) e chamar o método
pelo objeto (c.soma()) ou fazer o mesmo sem utilizar o objeto (Calculo.soma()). Portanto,
as letras B, C, D funcionariam, mas não exclusivamente, porque pode-se acessar o
método pelo objeto ou pela classe.
16712855225

Gabarito: A

15. (FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas Com


relação a herança na programação orientada a objetos com Java, é INCORRETO
afirmar:

a) Uma subclasse herda os métodos da superclasse, entretanto, pode ter seus


próprios métodos.

b) Quando se instancia um objeto da subclasse, podem ser passados valores


para os atributos da superclasse.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 104 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

c) Um objeto da subclasse pode ser um objeto da superclasse.

d) Em uma superclasse, para acessar métodos da subclasse deve ser usada a


instrução super.

e) Para definir que a subclasse herda as características da superclasse utiliza-se


a instrução extends na declaração da subclasse.

Comentários:

(a) Perfeito, ela pode criar seus próprios métodos; (b) Perfeito, porque eles são
herdados; (c) Perfeito, eles são herdados da superclasse; (d) Não, super é utilizado
para acessar métodos da superclasse; (e) Perfeito, esse operador indica que a
superclasse será estendida.

Gabarito: D

16. (FCC - 2011 - TRT - 4ª REGIÃO (RS) - Técnico Judiciário - Tecnologia da


Informação No ambiente de programação Java:

a) uma classe abstrata permite apenas métodos abstratos.


b) o corpo de um método abstrato termina com ponto e vírgula e a declaração
é delimitada por chaves.
c) uma interface pode definir tanto métodos abstratos quanto não abstratos.
d) a herança múltipla permite que mais classes sejam estendidas.
e) toda classe é uma subclasse direta ou indireta da classe Object.

Comentários: 16712855225

Cada classe, na hierarquia de classes, representa uma camada que adiciona diversas
capacidades a um objeto. No topo desta hierarquia você sempre vai encontrar uma
classe chamada de Object (Objeto). Qualquer classe estende implicitamente (sem
necessidade de declarar) a classe Object. Claro que, na maioria das vezes, isso ocorre
indiretamente.

(a) Não, ela permite métodos concretos; (b) Não, não tem chaves; (c) Não, todos os
métodos são abstratos; (d) Java não suporta herança múltipla; (e) Perfeito,
absolutamente todas as classes são filhas da Classe Object.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 105 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Gabarito: E

17. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da
Informação São tipos primitivos da linguagem Java:

a) int, string, long e real.


b) char, int, real e bit.
c) boolean, double, float e byte.
d) real, short, long e char.
e) string, long int, short int e float.

Comentários:

NOME TIPO TAMANHO MÍNIMO MÁXIMO DEFAULT


LÓGICO boolean - false true false
CARACTERE char 16 bits 0 216 – 1 ‘\u0000’
byte 8 bits -27 27 – 1 0
short 16 bits -215 215 – 1 0
INTEIRO
int 32 bits -231 231 – 1 0
long 64 bits -263 263 – 1 0
float 32 bits 7 Casas Decimais 0.0
DECIMAL
double 64 bits 15 Casas Decimais 0.0

(a) string e real, não; (b) real e bit, não; (c) Perfeito! (d) real, não; (e) apenas float.

Gabarito: C

18. (FCC - 2010 - - - Agente Legislativo de Serviços Técnicos e Administrativos


16712855225

- Processamento de Dados Os tipos de dados primitivos em Java são:

a) char, boolean, byte, short, int, long, float e double.


b) char, boolean, byte, short, int, long, float, double e String.
c) byte, short, int, long, float e double.
d) byte, short, int, long, float, double, String e Date.
e) char, boolean, byte, short, int, long, float, double, String e Date.

Comentários:

NOME TIPO TAMANHO MÍNIMO MÁXIMO DEFAULT

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 106 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

LÓGICO boolean - false true false


CARACTERE char 16 bits 0 216 – 1 ‘\u0000’
byte 8 bits -27 27 – 1 0
short 16 bits -215 215 – 1 0
INTEIRO
int 32 bits -231 231 – 1 0
long 64 bits -263 263 – 1 0
float 32 bits 7 Casas Decimais 0.0
DECIMAL
double 64 bits 15 Casas Decimais 0.0

São oito tipos: byte, short, int, long, float, double, char e boolean.

Gabarito: A

19. (FCC - 2009 - TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação
No âmbito da linguagem Java, considere:

I. Edição é a criação do programa, que também é chamado de código Bytecode.

II. Compilação é a geração de um código intermediário chamado fonte, que é


um código independente de plataforma.

III. Na interpretação, a máquina virtual Java ou JVM analisa e executa cada


instrução do código Bytecode.

IV. Na linguagem Java a interpretação ocorre apenas uma vez e a compilação


ocorre a cada vez que o programa é executado.

Está correto o que consta em: 16712855225

a) I, II, III e IV.


b) II e IV, somente.
c) III e IV, somente.
d) IV, somente.
e) III, somente.

Comentários:

(I) Não, bytecode é o resultado da compilação do código-fonte; (II) Não, o código


intermediário é chamado bytecode; (III) Perfeito, é exatamente assim; (IV) Não, a

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 107 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

compilação ocorre apenas uma vez e a interpretação a cada vez que o programa é
executado.

Gabarito: E

(FCC - 2008 - TCE-AL - Programador Os três elementos básicos quando


contidos num arquivo fonte Java devem obrigatoriamente se apresentar na
seguinte ordem:

a) import, package e class.


b) class, package e import.
c) class, import e package.
d) package, class e import.
e) package, import e class.

Comentários:

A diferença entre as duas formas de importação de pacotes é o consumo de recursos


do computador. Como o asterisco importa todos os sub-pacotes, o consumo de
memória será alto e, muito provavelmente, não usaremos todas as classes de todos
os pacotes importados. Por isso, o recomendado é sempre importar apenas o pacote
que será utilizado. A ordem é Package Import Class.

Conforme vimos em aula, deve-se declarar o pacote; depois, import; por fim, classe.

Gabarito: E

21. (FCC - 2014 – TRF/3 – Analista de Sistemas Considere a classe escrita em Java:
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 108 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

O valor que será impresso na execução do método main é:

a) 6.0
b) 7
c) 8.0
d) 5.0
e) 12.5

Comentários:

Isso é um exemplo de polimorfismo! A questão é: qual método multi será utilizado?


Ele envia os valores 2.5 e 2! Ele pode entrar no primeiro método? Não, porque o
valor-padrão de número decimal no Java é Double, logo – para entrar no primeiro
método – teria que enviar o valor 2.5f, visto que é do tipo Float. Ele pode entrar no
segundo método? Não, visto que o valor 2.5 não pode ser inteiro! Ele pode entrar no
terceiro método? Sim, visto que o valor 2.5 é Double e o valor 2 é inteiro! Eu posso
passar um valor inteiro a uma variável do tipo Double? Sim, o que eu não posso
fazer é o contrário. Logo, o valor impresso será 2.5*2+3 = 8.0.

Gabarito: C

(FCC - - TCE-AL - Programador Considerando que as variáveis Java X, Y e


Z foram todas inicializadas com zero, os resultados das mesmas após as
alterações realizadas pelas atribuições X *= 2, Y -= 5 e Z /=3, respectivamente,
serão:

a) 0, -5 e 0
b) 0, 5 e 0 16712855225

c) 1, -5 e 3
d) 2, -5 e 3
e) 2, 5 e 3

Comentários:

X = X*2 = 0*2 = 0;
Y = Y-5 = 0-5 = -5;
Z = Z/3 = 0/3 = 0;

Portanto, a resposta é 0, -5 e 0.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 109 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Gabarito: A

(FCC - 2008 - MPE-RS - Técnico em Informática - Área Sistemas A função Java:

public boolean VerificarCPF (string CPF);

representa um exemplo do conceito de:

a) override.
b) overload.
c) herança.
d) encapsulamento.
e) polimorfismo.

Comentários:

Essa questão é estranha! Ele não especifica exatamente o que ele quer saber, mas
vamos lá: por eliminação! (a) Impossível inferir algo sobre isso; (b) Impossível inferir
algo sobre isso; (c) Impossível inferir algo sobre isso; (d) Bem, há um modificador de
acesso, portanto representa um exemplo do conceito de encapsulamento; (e)
Impossível inferir algo sobre isso.

Gabarito: D

24. (FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas


Quanto às variáveis Java, um inteiro de 64 bits em notação de complemento de
dois que pode assumir valores entre -263 e 263 -1 é:

a) long. 16712855225

b) short.
c) float.
d) byte.
e) double.

Comentários:

NOME TIPO TAMANHO MÍNIMO MÁXIMO DEFAULT


LÓGICO boolean - false true false
CARACTERE char 16 bits 0 216 – 1 ‘\u0000’
INTEIRO byte 8 bits -27 27 – 1 0

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 110 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

short 16 bits -215 215 – 1 0


int 32 bits -231 231 – 1 0
long 64 bits -263 263 – 1 0
float 32 bits 7 Casas Decimais 0.0
DECIMAL
double 64 bits 15 Casas Decimais 0.0

Conforme vimos em aula, trata-se do tipo long.

Gabarito: A

(FCC - 2005 - TRE-MG - Técnico Judiciário - Programação de Sistemas A


seqüência de etapas para implementação de um programa Java é:

a) interpretação, codificação, execução e compilação.


b) codificação, interpretação, compilação e execução.
c) interpretação, codificação, compilação e execução.
d) codificação, compilação, interpretação e execução.
e) compilação, codificação, execução e interpretação.

Comentários:

O bytecode é um código intermediário, que é posteriormente interpretado e


executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

Conforme vimos em aula, devemos codificar o programa em .java; esse arquivo é


compilado em um código intermediário (bytecode) em .class; depois é interpretado
16712855225

em uma JVM; e, por fim, é executado.

Gabarito: D

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas Considere


a variável idade declarada no método main de uma classe Java, com a seguinte
instrução:

int idade=12;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 111 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Analise:

I. System.out.println (idade<18?"Menor de idade":"Maior de idade");

II. if(idade<18) {System.out.println("Menor de idade");} else


{System.out.println("Maior de idade");}

III. if(idade<18) {System.out.println("Menor de idade");} else if (idade>=18)


{System.out.println("Maior de idade");}

IV. switch(idade) {case<18: System.out.println("Menor de idade"); break;


case>=18: System.out.println("Maior de idade");}

Contém uma instrução correta que exibirá na tela a frase "Menor de idade":

a) I, II, III e IV.


b) I, II e III, apenas.
c) II e III, apenas.
d) II, apenas.
e) I e III, apenas.

Comentários:

(I) Operador Ternário: 12 é menor que 18, portanto irá imprimir “Menor de Idade”;
(II) 12 é menor que 18, portanto irá imprimir “Menor de Idade”; (III) 12 é menor que
18, portanto irá imprimir “Menor de Idade”; (IV) Case não aceita <, >, <=, >=, etc.

Gabarito: B
16712855225

27. (FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) Considere


a estrutura de repetição seguinte:

public static void main(String{} args) {


int cont=1, r=0;
cont=1;
do {
r=r+cont;
cont+=4;
} while(cont<=5);
System.out.println(r);
System.out.println(cont);
}

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 112 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

A saída na tela será:

a) 15 e 6.
b) 1 e 5.
c) 0 e 1.
d) 6 e 9.
e) 9 e 7.

Comentários:

r = r + cont = 0 + 1 = 1;
cont = cont + 4 = 1 + 4 = 5;
r = r + cont = 1 + 5 = 6;
cont = cont + 4 = 5 + 4 = 9; //Sai do loop

Portanto, r = 6 e cont = 9.

Gabarito: D

(FCC - 2011 - TRE-AP - Técnico Judiciário - Programação de Sistemas Em relação


à plataforma de desenvolvimento JSE, considere:

I. Possibilita o desenvolvimento de aplicações desktop através de linha de


comando e através da interface gráfica Swing.

II. É multiplataforma: permite a portabilidade dos programas compilados para


diversos sistemas operacionais, sem necessidade de alteração do código ou de
recompilação.
16712855225

III. Faz uso explícito de ponteiros e usa conceitos modernos, tais como,
orientação a objetos e suporte a multithreading.

IV. Possui o gerenciamento de memória embutido, por meio do garbage


collector.

Está correto o que se afirmar em:

a) I, II e III, somente.
b) I, II e IV, somente.
c) I, III e IV, somente.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 113 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

d) II, III e IV, somente.


e) I, II, III e IV.

Comentários:

(I) Perfeito, é possível desenvolver aplicações desktop utilizando interface gráfica,


como Swing e AWT; (II) Perfeito, é uma linguagem WORA (Write Once, Run
Anywhere); (III) Não, não faz uso explícito de ponteiros; (IV) Perfeito, o Garbage
Collector realiza o gerenciamento de memória.

Gabarito: B

(FCC - 2011 - INFRAERO - Analista de Sistemas - Desenvolvimento e


Manutenção No Java, um tipo inteiro (int) utiliza quatro bytes para
armazenamento. A faixa máxima possível de valores inteiros para se armazenar
em uma variável do tipo primitivo int é de:

a) -8388608 a 8388607.
b) -128 a 127.
c) -32768 a 32767.
d) -9223372036854775808 a 9223372036854775807.
e) -2147483648 a 2147483647.

Comentários:

NOME TIPO TAMANHO MÍNIMO MÁXIMO DEFAULT


LÓGICO boolean - false true false
CARACTERE char 16 bits 0 216 – 1 ‘\u0000’
byte 8 bits -27 27 – 1 0
16712855225

short 16 bits -215 215 – 1 0


INTEIRO
int 32 bits -231 231 – 1 0
long 64 bits -263 263 – 1 0
float 32 bits 7 Casas Decimais 0.0
DECIMAL
double 64 bits 15 Casas Decimais 0.0

Basta fazer a conta: -231 a 231 – 1 = -2147483648 a 2147483647.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 114 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(FCC - 2010 - TRT - 9ª REGIÃO (PR) - Técnico Judiciário - Tecnologia da


Informação O JVM mais o núcleo de classes da plataforma Java e os arquivos
de suporte formam o:

a) o J2EE.
b) o JDK.
c) o JRE.
d) uma JSP.
e) uma API.

Comentários:

Um programa escrito para a plataforma Java necessita de um ambiente de execução


chamado Java Runtime Environment (JRE)! O que tem nesse negócio, professor? Ele
contém uma Máquina Virtual (JVM) e Bibiliotecas (APIs). E o Java Development Kit
(JDK)? Bem, eles contêm a JRE e outros componentes úteis para executar aplicações
(Exemplo: Javac, Javadoc, Jar, Appletviewer, Jconsole, Jstack, Jhat, etc).

Conforme vimos em aula, trata-se da Java Runtime Environment (JRE): ambiente


mínimo necessário para rodar aplicativos Java.

Gabarito: C

31. (FCC - 2014 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia da
Informação Considere as classes a seguir, presentes em uma aplicação Java
orientada a objetos:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 115 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

16712855225

Em uma classe principal foram digitadas, no interior do método main, as


seguintes linhas:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 116 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

As linhas que contêm a instrução s = f.calcularSalario( ); demonstram um


conceito da orientação a objetos conhecido como:

a) encapsulamento.
b) sobrecarga de métodos.
c) polimorfismo.
d) sobrescrita de construtores.
e) métodos abstratos.

Comentários:

Primeiro, vamos analisar o código! Saca só... temos três classes: Funcionário,
Mensalista e Diarista. Observe que as classes Mensalista e Diarista 'estendem' a
classe Funcionário, i.e., são filhas de Funcionário! Agora vamos analisar cada classe:

A classe Funcionário possui dois construtores: Funcionário( ) e Funcionário(int id,


String nome, double valorBase), além dos métodos getValorBase( ) e calcularSalario(
). Aí você vai me dizer: professor, tem dois construtores? Sim, com mesmo nome e
assinaturas diferentes! Portanto, temos uma: Sobrecarga (Overloading) de
Construtores. Bacana?

Já a classe Mensalista possui um construtor Mensalista(double descontos, int id,


String nome, double valorBase) e um método calcularSalario( ). Opa, perae... esse
método é igual ao método da classe Funcionário, concorda? Mesmo nome e mesma
assinatura! Portanto, temos uma Sobrescrita (ou Override) de métodos.

Por fim, a classe Diarista possui um construtor Diarista(int diasPorSemana, int id,
String nome, double valorBase) e um método calcularSalario( ). De novo, você vai
dizer: professor, esse método também é igual àquele da classe Funcionário e
16712855225

Mensalista. É verdade, portanto temos uma Sobrescrita (ou Override) de métodos.

Agora vamos para o método main! Observe que ele cria uma variável f do tipo
Funcionário. Em seguida, ele cria um objeto Diarista e atribui à variável f. Professor,
pode isso? Sim, eu posso atribuir um objeto de uma classe-filha para uma variável
do tipo da classe-pai - eu não posso é fazer o contrário (pelo menos, sem um
casting). Na linha seguinte, ele diz: s = f.calcularSalario( ).

Chegamos ao ponto crucial! Ele chama o método calcularSalario( ), mas você lembra
que nós temos 3 métodos com esse nome? Temos um na classe-pai e dois nas
classes-filhas, sobrescrevendo o método da classe-pai. E qual desses ele está

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 117 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

chamando? Lembra que na linha anterior ele diz que f recebe o objeto da classe
Diarista? Pois é, portanto, o método calcularSalario( ) é aquele da classe Diarista.
Mais abaixo, ele faz exatamente a mesma coisa, mas atribui o objeto Mensalista() à
variável f, portanto, na segunda vez que ele chama esse método, refere-se ao objeto
da classe Mensalista. Entendido? Agora vamos para os itens:

(a) Encapsulamento? Não, não tem nenhum modificador de acesso aí;

(b) Sobrecarga de Métodos? Não! Lá em cima, há sobrecarga de construtores. Nessa


linha, há sobrescrita de métodos.

(c) Polimorfismo? Perfeito! Nós temos uma sobrescrita de métodos (que é um tipo
de Polimorfismo).

(d) Sobrescrita de Construtores? Não! Lá em cima, há sobrecarga de construtores.


Nessa linha, há sobrescrita de métodos.

(e) Métodos Abstratos? Não, não há nenhum método abstrato nessa questão.

Aí você vai me dizer: Professor, mas um construtor é um tipo de método! Logo, se há


uma sobrecarga de construtores, há uma sobrecarga de métodos! Sim, concordo
contigo! No entanto, temos que lembrar que é uma questão da FCC! Nesse caso, a
terceira opção não apresenta problema algum! Já a segunda opção, pode-se dizer
que não é exatamente sobrecarga de métodos; é algo mais específico, é uma
sobrecarga de construtores. Percebe? Dessa forma, eu recomendo não brigar com
a banca e marcar a opção que não gera dúvidas. Agora... se for bastante técnico
aqui, você está corretíssimo! A questão possui duas respostas e deveria ser anulada.

16712855225

Gabarito: C

(FCC - 2010 - - - Agente Legislativo de Serviços Técnicos e Administrativos


- Processamento de Dados Métodos estáticos em Java são aqueles que:

a) realizam alguma tarefa que é dependente do conteúdo de algum objeto.

b) não podem ser acessados diretamente pelo nome da classe a que pertencem,
mas sim por meio de um objeto da classe.

c) realizam alguma tarefa que não é dependente do conteúdo de algum objeto.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 118 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

d) são acessados por objetos que não necessitam de ser instanciados


explicitamente.

e) existem em subclasses de uma herança.

Comentários:

(a) Não, é estático, logo não depende de objetos; (b) Não, é justamente o inverso;
(c) Perfeito, não depende de objetos! (d) Na verdade, precisam sim ser instanciados
explicitamente; (e) Isso não define um método estático.

Gabarito: C

(FCC - - TCE-AL - Programador NÃO são nomes válidos em Java:

a) _Real e $real
b) um1 e dois2
c) 3tres e tres3
d) Codigo e codigo
e) cod_valor e cod$valor

Comentários:

Deve ser a combinação de uma ou mais letras e dígitos UNICODE-16: Letras: A-Z;
Letras: a-z; Underscore: _ ; Cifrão: $ ;Números: 0-9.

1. Não pode ser uma palavra-reservada (palavra-chave);


2. Não pode ser true, false ou null;
Não pode começar com números; 16712855225

4. Não pode conter espaços em branco ou caracteres de formatação;

Conforme vimos em aula, “tres3” é um nome válido, mas “3tres” não!

Gabarito: C

34. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A tecnologia Java é, basicamente, dividida em JSE,

a) JEE e JME.
b) JEE e JPE.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 119 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

c) JDE e JME.
d) JDE e JPE.
e) JEEP e JME.

Comentários:

 Java Standard Edition (Java SE): trata-se de uma ferramenta de desenvolvimento


para a Plataforma Java. Ela contém todo o ambiente necessário para a criação e
execução de aplicações Java, incluindo a Máquina Virtual (JVM), Compilador
(Javac), Bibliotecas (APIs), entre outras ferramentas. Em geral, rodam em
computadores pessoais, notebooks, etc.

 Java Enterprise Edition (Java EE): trata-se do padrão para desenvolvimento de


sistemas corporativos, voltada para aplicações multicamadas, baseadas em
componentes executados em servidores de aplicações – ele inclui o Java SE.
Contém bibliotecas para acesso a base de dados, RPC, CORBA, entre outras. As
aplicações podem ou não estar na internet.

 Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos


compactos ou móveis, como smartphones, tablets, controles remotos, etc. Permite
o desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um
dispositivo de propósito específico, desempenhando alguma tarefa útil. Em geral,
possuem limitações de recursos como memória ou processamento.

Conforme vimos em aula, esses são os mais importantes mesmo!

Gabarito: A

(FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da


16712855225

Informação Uma classe Java pode ser instanciada por um comando, cuja sintaxe
é:

a) nome_Objeto nome_Classe = new nome_Objeto();


b) nome_Classe nome_Objeto = new nome_Classe();
c) nome_Classe nome_instancia = new nome_Objeto();
d) nome_Instancia nome_Objeto = new nome_Instancia();
e) nome_Instancia nome_Classe = new nome_Instancia();

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 120 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03
/* 1) Operador NEW é responsável por criar um objeto;
* 2) NomeClasse() é o construtor da Classe NomeClasse;
* 3) NomeObjeto é uma variável do Tipo NomeClasse; */

NomeClasse NomeObjeto = new NomeClasse();

/* Observem que é possível atribuir o objeto de uma


* classe para uma variável de outra classe */

Conforme vimos em aula, trata-se da segunda opção!

Gabarito: B

(FCC - 2005 - TRE-MG - Programador de computador Os erros gerados durante


a execução de um programa Java devem ser controlados com uma estrutura
que pode combinar o uso dos blocos:

a) try e finally, somente.


b) try e catch ou try e finally, somente.
c) try, catch e finally, somente.
d) try e catch, somente.
e) try e catch, try e finally ou try, catch e finally.

Comentários:

try { //Não vem sozinho: try/catch, try/finally ou try/catch/finally

//Código a ser executado


} catch (ClasseDeExceção objDaExceção) { //Não vem sozinho: try/catch ou try/catch/finally

//Tratamento da exceção
} finally { //Não vem sozinho: try/finally ou try/catch/finally.

//Código a ser executado mesmo que uma exceção seja lançada


} 16712855225

Conforme vimos em aula, as combinações possíveis são try/catch, try/finally e


try/catch/finally.

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 121 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(FUNCAB - 2010 - PRODAM- - Analista de TI - Desenvolvimento de Sistemas


Seja a seguinte classe Java:

<mod> public class Xpto


{

Qual das alternativas a seguir contém um modificador que ao ser usado na


declaração acima em substituição ao termo <mod> impedirá que a classe Xpto
seja estendida?

a) static
b) const
c) abstract
d) final
e) virtual

Comentários:

//Essa classe não pode ser estendida


final class Carro {...}
16712855225

Conforme vimos em aula, trata-se do Final.

Gabarito: D

(ESAF - 2012 - Receita Federal - Analista Tributário da Receita Federal - Prova 2


- Área Informática Em programação Java, o comando while:

a) executa um bloco exclusivamente de comandos de atribuição.


b) executa um bloco de comandos enquanto sua condição for verdadeira.
c) executa um bloco de comandos até que sua condição seja verdadeira.
d) equivale ao comando what-if.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 122 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

e) é idêntico ao comando do while.

Comentários:

(a) Não, podem ter outros comandos – não é só atribuição; (b) Perfeito, enquanto
for verdadeira, continua a iteração; (c) Não, enquanto ela for verdadeira; (d) Não,
esse comando não existe; (e) Não, esse comando entra no bloco e só depois avalia
a condição.

Gabarito: B

(CONSULPLAN – – Prefeitura de Natal – Analista de Sistemas) Analise as


afirmativas abaixo colocando V para as afirmativas Verdadeiras e F para as Falsas.
A linguagem JAVA se divide nas seguintes edições:

( ) J2SE (Java 2 Standard Edition) - tecnologia Java para computadores pessoais,


notebooks e arquiteturas com poder de processamento e memória
consideráveis.

( ) J2EE (Java 2 Enterprise Edition) - tecnologia Java para aplicações corporativas


que podem estar na internet ou não.

( ) J2ME (Java 2 Micro Edition) - tecnologia Java para dispositivos móveis com
limitações de memória ou processamento.

( ) J2FE (Java 2 Full Edition) - tecnologia Java para aplicações em computadores


de grande porte (mainframe).

A seqüência está correta em: 16712855225

a) F, F, F, F
b) V, V, V, F
c) V, F, F, V
d) F, V, F, V
e) V, V, V, V

Comentários:

 Java Standard Edition (Java SE): trata-se de uma ferramenta de desenvolvimento


para a Plataforma Java. Ela contém todo o ambiente necessário para a criação e

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 123 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

execução de aplicações Java, incluindo a Máquina Virtual (JVM), Compilador


(Javac), Bibliotecas (APIs), entre outras ferramentas. Em geral, rodam em
computadores pessoais, notebooks, etc.

 Java Enterprise Edition (Java EE): trata-se do padrão para desenvolvimento de


sistemas corporativos, voltada para aplicações multicamadas, baseadas em
componentes executados em servidores de aplicações – ele inclui o Java SE.
Contém bibliotecas para acesso a base de dados, RPC, CORBA, entre outras. As
aplicações podem ou não estar na internet.

 Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos


compactos ou móveis, como smartphones, tablets, controles remotos, etc. Permite
o desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um
dispositivo de propósito específico, desempenhando alguma tarefa útil. Em geral,
possuem limitações de recursos como memória ou processamento.

Conforme vimos em aula, as três primeiras alternativas estão perfeitas; a última


simplesmente não existe.

Gabarito: B

(Instituto Cidades - 2012 - TCM-GO - Auditor de Controle Externo - Informática


Analise:

I. O Java refere-se tanto a uma linguagem de programação quanto a uma


plataforma;

II. O Java SE (Standard Edition) é formalmente chamado de J2SE;


16712855225

III. O J2EE é a edição corporativa do Java. Esta versão inclui o Java Standard
Edition além de outras tecnologias como javamail, servlets, JSF e Enterprise Java
Beans.

IV. O Java possui uma versão para dispositivos móveis chamada J2ME (Micro
Edition).

São verdadeiras as afirmações:

a) I, II e IV, somente;
b) I, III e IV, somente;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 124 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

c) II, III e IV, somente;


d) I e IV, somente;
e) Todas as afirmações.

Comentários:

Java é tanto uma plataforma quanto uma linguagem de programação orientada a


objetos que permite o desenvolvimento de aplicações em diversas plataformas
diferentes. Como já foi dito anteriormente, Java está presente desde dispositivos
pequenos (Smartphone, Tablet, etc) a máquinas de grande porte (Servidores,
Mainframes, etc). A linguagem Java possui quatro ambientes de desenvolvimento:

(a) Conforme vimos em aula, é tanto uma linguagem quanto uma plataforma;

 Java Standard Edition (Java SE): trata-se de uma ferramenta de desenvolvimento


para a Plataforma Java. Ela contém todo o ambiente necessário para a criação e
execução de aplicações Java, incluindo a Máquina Virtual (JVM), Compilador
(Javac), Bibliotecas (APIs), entre outras ferramentas. Em geral, rodam em
computadores pessoais, notebooks, etc.

(b) Conforme vimos em aula, é o nome antigo de Java SE;

 Java Enterprise Edition (Java EE): trata-se do padrão para desenvolvimento de


sistemas corporativos, voltada para aplicações multicamadas, baseadas em
componentes executados em servidores de aplicações – ele inclui o Java SE.
Contém bibliotecas para acesso a base de dados, RPC, CORBA, entre outras. As
aplicações podem ou não estar na internet.

(c) Conforme vimos em aula, é exatamente isso;


16712855225

 Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos


compactos ou móveis, como smartphones, tablets, controles remotos, etc. Permite
o desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um
dispositivo de propósito específico, desempenhando alguma tarefa útil. Em geral,
possuem limitações de recursos como memória ou processamento.

(d) Conforme vimos em aula, é o Java ME (nome atual).

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 125 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(UFBA - 2012 - UFBA - Técnico de Tecnologia da Informação O código-fonte de


um programa de computador escrito na linguagem Java, é compilado para um
formato intermediário conhecido como bytecode.

Comentários:

Java é também uma linguagem portável e multiplataforma! O Compilador é capaz


de gerar um código intermediário (bytecode), que permite que o mesmo programa
possa ser executado em qualquer máquina ou sistema operacional que possua uma
JVM. Ademais, busca que todos os aspectos da linguagem sejam independentes de
plataforma (Ex: ela especifica o tamanho e comportamento de cada tipo de dado).

Conforme vimos em aula, a questão está perfeita! No entanto, há uma coisa muito
errada nessa questão! O que, professor? Não se separa sujeito do predicado com
vírgula! Jamais... Vacilo, UFBA! ;-)

Gabarito: C

(PaqTcPB - 2012 - UEPB - Técnico em Informática - Programador) Em Java, um


bloco de código é:

a) Tudo que está entre ( )


b) Tudo que está entre { }
c) Tudo que está entre [ ]
d) Tudo que está entre < >
e) Tudo que está no mesmo nível de indentação.

Comentários:
16712855225

Blocos de programação são aglomerados de instruções e declarações que têm escopo


conjunto. Em outras palavras, as variáveis definidas como locais dentro de um bloco
somente serão presentes dentro deste bloco, assim como as instruções ali presentes.
Os blocos de programação são delimitados por chaves { } e podem ser aninhados, já
os comandos sempre são terminados com ponto-e-vírgula.

Conforme vimos em aula, bloco de código vem delimitado por chaves { }.

Gabarito: B

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 126 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(CESGRANRIO - 2012 - Petrobrás - Técnico de Exploração de Petróleo Júnior -


Informática Ao escrever o código da Classe PortaDeCofre em Java para que ela
atenda a interface Porta, como um programador deve começar a declaração da
classe?

a) public class Porta:PortaDeCofre {


b) public class PortaDeCofre :: Porta {
c) public class PortaDeCofre inherits Porta {
d) public class PortaDeCofre extends Porta {
e) public class PortaDeCofre implements Porta {

Comentários:

A sintaxe para implementar uma Interface utiliza a palavra reservada implements:

public class Teste implements FiguraGeometrica

Conforme vimos em aula, utilizamos a palavra-reservada implements.

Gabarito: E

(PaqTcPB - 2012 - UEPB - Técnico em Informática - Programador Em linguagem


de programação, um identificador é o nome que utilizamos para representar
variáveis, classes, objetos. etc. Em Java, qual dos itens abaixo não é um
identificador válido?

a) falso
b) true
c) maior_valor 16712855225

d) Mp10
e) xBACON

Comentários:

1. Não pode ser uma palavra-reservada (palavra-chave);


Não pode ser true false ou null;
3. Não pode começar com números;
4. Não pode conter espaços em branco ou caracteres de formatação;

Conforme vimos em aula, não se pode utilizar true.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 127 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Gabarito: B

(ESAF - - - Tecnologia da Informação Com relação a essa


característica, é correto afirmar que:

a) métodos declarados como public em uma superclasse, quando herdados,


precisam ser protected em todas as subclasses dessa classe.

b) métodos declarados como protected em uma superclasse, quando herdados,


precisam ser protected ou public nas subclasses dessa classe.

c) o nível de acesso protected é mais restritivo do que o nível de acesso default.

d) métodos declarados como public só podem ser acessados a partir dos


métodos da própria classe ou de classes derivadas.

e) métodos declarados como default só podem ser acessados a partir dos


métodos da própria classe.

Comentários:

(a) Não, essa afirmação não faz qualquer sentido; (b) Sim, as subclasses nunca
podem ser mais restritivas que as superclasses; (c) Não, default é mais restritivo; (d)
Não, eles podem ser acessados por quaisquer métodos de quaisquer classes ou
pacotes; (e) Não, eles podem ser acessados pela própria classe, pelas subclasses e
pelas classes do mesmo pacote.

16712855225

Gabarito: B

10. (UFBA - – UFBA – Analista de Sistemas) O bloco finally em uma instrução try
catch finally sempre será executado quer ocorra ou não uma exceção no bloco try.

Comentários:

Podemos encadear vários blocos catch, dependendo do número de exceções que


podem ser lançadas por uma classe ou método. O bloco catch obtém o erro criando
uma instância da exceção. Quando uma exceção é lançada e é necessário que
determinada ação seja tomada mesmo após a sua captura, utilizamos a palavra
reservada finally – é opcional, mas se existir, sempre será executado.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 128 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Conforme vimos em aula, é um bloco opcional. No entanto, caso exista, sempre


será executado – com exceção ou não!

Gabarito: C

11. (CONSULPLAN - 2007 - Chesf - Analista de Sistemas – I É possível utilizar vários


blocos catch para capturar exceções vindas de um único bloco try.

Comentários:

Podemos encadear vários blocos catch, dependendo do número de exceções que


podem ser lançadas por uma classe ou método. O bloco catch obtém o erro criando
uma instância da exceção. Quando uma exceção é lançada e é necessário que
determinada ação seja tomada mesmo após a sua captura, utilizamos a palavra
reservada finally – é opcional, mas se existir, sempre será executado.

Conforme vimos em aula, podemos ter vários blocos catch de um único try.

Gabarito: C

12. (AOCP - 2012 - BRDE - Analista de Sistemas - Desenvolvimento de Sistemas -


Java threads são objetos que podem cooperar e comunicar-se entre si para
compartilhar objetos em memória, a tela, ou outros tipos de recursos e
periféricos.

Comentários:

Quando nós executamos essas tarefas em paralelo, estamos usando Threads! Vocês
16712855225

sabem o que essa palavra significa em português? Fios ou Linhas! Em outras palavras,
criamos linhas de execução de tarefas paralelas em memória – cada linha responsável
por executar alguma coisa simultaneamente e relativamente independentes. Em Java,
as Threads são objetos presentes no Pacote java.lang.

Conforme vimos em aula, realmente são objetos que representam recursos


compartilhados em memória.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 129 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

13. (FGV – 2009 – MEC - Analista de Sistemas – D) Swing é um mecanismo simples


e consistente para estender a funcionalidade de um servidor web e para acessar
existentes sistemas de negócio.

Comentários:

A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário


(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o
Swing é um conjunto sofisticado de classes e interfaces que definem os componentes
visuais necessários para construir uma interface gráfica de usuário.

Conforme vimos em aula, a questão não faz o menor sentido – não tem
absolutamente nada a ver com Swing.

Gabarito: E

14. (ESAF – – CGU - Analista de Sistemas) A linguagem Java possui uma API
(Application Program Interface) que disponibiliza pacotes e classes com diversas
funcionalidades para auxiliar no desenvolvimento de aplicações. O pacote que
contém classes que auxiliam na criação de interfaces de usuário, incluindo
tratamento de gráficos e imagens, é denominado:

a) java.util.
b) java.applet.
c) java.graphic.
d) java.image.
e) java.awt.
16712855225

Comentários:

A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário


(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o
Swing é um conjunto sofisticado de classes e interfaces que definem os componentes
visuais necessários para construir uma interface gráfica de usuário.

Conforme vimos em aula, trata-se do pacote java.awt.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 130 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

15. (FGV – 2015 – PGE/RO – Analista de Sistemas) Na linguagem de programação


Java, para indicar que uma classe A é derivada de B, utiliza-se, na declaração de
A, o modificador:

a) imports;
b) extends;
c) inherits;
d) subclass;
e) superclass.

Comentários:

A palavra-chave extends faz com que uma subclasse herde (receba) todos os atributos
e métodos declarados na classe-pai (desde que ela não seja final), incluindo todas as
classes-pai da classe-pai. A classe-filha pode acessar todos os atributos e métodos
não-privados. Ela herda, mas não acessa (ao menos diretamente) métodos e
atributos privados.

Conforme vimos em aula, trata-se do extends.

Gabarito: B

16. (FGV – 2015 – PGE/RO – Analista de Sistemas) São tipos primitivos na linguagem
de programação Java:

a) int, float, double, char, boolean;


b) int, double, string, char, boolean;
c) integer, real, byte, char, boolean; 16712855225

d) byte, word, short, integer, char;


e) int, real, char, string, boolean.

Comentários:

Vamos falar agora sobre uma das linguagens mais famosas do mundo! Professor, o
que é Java? É uma linguagem de programação orientada a objetos, multiplataforma,
robusta, portável, segura, extensível, concorrente e distribuída. E ela é totalmente
orientada a objetos? Não! Por que não? Porque nem todos os seus tipos de dados são
objetos (possui alguns tipos primitivos: int, float, long, double, char, etc).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 131 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Conforme vimos em aula, trata-se do int, float, double, char e boolean.

Gabarito: A

17. (FGV – 2014 – TJ/GO – Analista de Sistemas) Se uma classe na linguagem Java é
declarada com o modificador abstract, então essa classe:

a) não pode ser referenciada;


b) não pode ser estendida;
c) não pode ser instanciada;
d) pode ser instanciada apenas uma vez;
e) não pode possuir métodos estáticos.

Comentários:

Palavras Descrição
abstract Aplicado a um método ou classe indica que a implementação completa deste
método ou classe é efetuada posteriormente, por uma subclasse. Caso seja
uma classe, significa que ela não pode ser instanciada.

Conforme vimos em aula, ela não pode ser instanciada.

Gabarito: C

18. (FGV – 2014 – /GO – Analista de Sistemas) Na linguagem de programação


Java, uma classe declarada com o modificador final:

a) não pode ser instanciada;


b) não pode ser estendida;
16712855225

c) pode ter o modificador abstract também presente na declaração;


d) não pode ter métodos estáticos;
e) não pode ter métodos de instância.

Comentários:

Portanto para declarar uma classe, deve-se colocar a palavra class seguida de um
identificador que irá servir de nome para a classe. O identificador pode ser qualquer
palavra, exceto palavras reservadas. Por exemplo: class Conta introduz a declaração

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 132 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

de uma nova classe chamada Conta. Note que, por convenção, o nome de uma classe
inicia sempre com uma letra maiúscula. A Palavra-Chave é opcional, podendo ser:

//Essa classe pode ser acessada por todos


public class Carro {...}

//Essa classe não pode gerar instâncias


abstract class Carro {...}

//Essa classe não pode ser estendida


final class Carro {...}

Conforme vimos em aula, ela não pode ser instanciada.

Gabarito: B

19. (FGV – 2010 – BADESC – Analista de Sistemas) Observe o código em Java a


seguir, em que se pode verificar a aplicação dos operadores de pré-decremento
e pós-decremento.

public class Decrementa {


public static void main (string args {} )
{
int m, n = 44;
m = --n;
m = n--;
system.out.println (m);
system.out.println (n);
}
}

Após a execução do código, as variáveis m e n exibirão, respectivamente, os


16712855225

valores:

a) 42 e 41.
b) 42 e 42.
c) 42 e 43.
d) 43 e 42.
e) 43 e 43.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 133 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Vamos analisar essa questão! O examinador queria saber se o aluno conhecia os


operadores de pré-incremento e os operadores de pós-incremento. Observem que
na linha 5, temos um operador de pré-incremento. Isso significa que a m será
atribuído o valor de n-1, ou seja, 43. Ao final dessa linha, m = n = 43. Na linha 6,
temos um operador de pós-incremento. Isso significa que a m será atribuído o valor
de n, ou seja, 43 e só depois será feita a operação, i.e., m = 43, mas ao final dessa
linha, n = 42. Então, temos m = 43 e n = 42. Agora o engraçado é que nada isso
será executado porque o comando não é system.out, mas System.out, mas a questão
ignorou esse errinho.

Gabarito: D

(FGV – 2015 – TJ/BA – Analista de Sistemas) Em Java, os métodos declarados


sem modificadores em uma interface são implicitamente:

a) públicos e estáticos;
b) públicos e abstratos;
c) privados e estáticos;
d) públicos e finais;
e) privados e abstratos.

Comentários:

Galera, se o método é declarado sem modificador dentro de uma interface, então


ele é implicitamente público e evidentemente abstrato.

Gabarito: B

ACERTEI 16712855225

ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 134 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


JAVA SE

(CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas Garbage


Collector é a tecnologia que gerencia a memória alocada para o programa, a
fim de liberar objetos que não estão sendo utilizados.

(CESPE - 2012 - TRE-RJ - Técnico Judiciário - Programação de Sistemas A


linguagem de programação Java é muito utilizada por ter como característica
gerar um código independente de plataforma que pode ser executado em
qualquer arquitetura e sistema operacional que tenha o sistema Java.

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Análise de Sistemas


No Java, a JRE possui tudo que é necessário para desenvolver programas em
Java.

(CESPE - 201 - Banco da Amazônia - Técnico Científico - Análise de Sistemas


Em Java, para toda classe, método e variável de instância que se declara há um
controle de acesso, independentemente de o controle ser explicitamente
indicado.

(CESPE - 2012 - Banco da Amazônia - Técnico Científico - Análise de Sistemas


O operador instanceof só pode ser usado para testar valores null.

(CESPE - 2012 - MPE-PI - Analista Ministerial - Informática - Cargo 6 Em Java,


qualquer método de uma classe pode ser sobrescrito por métodos de outra
classe. 16712855225

(CESPE - 2011 - -ES - Técnico de Informática - Específicos) O JVM (Java Virtual


Machine) é um interpretador que atribui portabilidade à linguagem Java,
possibilitando, consequentemente, a sua execução em qualquer sistema
operacional.

(CESPE - 2011 - TRE-ES - Técnico - Programação de Sistemas – Específicos O


encapsulamento em Java somente pode ser realizado por meio do modificador
de acesso protegido.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 135 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(CESPE - 2010 - TRT - 21ª Região (RN) - Técnico Judiciário - Tecnologia da


Informação A linguagem de programação Java, em razão de sua portabilidade
— uma vez que o compilador Java converte o código fonte em bytecodes,
executados por uma máquina virtual — é bastante utilizada para oferecer
conteúdos dinâmicos na Web.

10. (CESPE - 2010 - T -BA - Técnico Judiciário - Programação de Sistemas Em


programação orientada a objetos, o pacote tem como função agrupar classes
dentro de um grupo. Em Java, o pacote Swing (javax.swing) é composto de várias
classes para a implementação de interfaces gráficas em desktop.

11. (CESPE - - ANAC - Analista Administrativo - Tecnologia da Informação


Pelo uso de polimorfismo, uma chamada de método pode fazer que diferentes
ações ocorram, dependendo do tipo do objeto que recebe a chamada.

12. (CESPE - 2010 - EMBAS - Analista de Saneamento - Analista de Tecnologia da


Informação - Desenvolvimento O trecho de código a seguir está incorreto
porque uma variável booleana em Java usa a sintaxe == e não =.

Public void disconnect() {


Connected = false;
}

13. (CESPE - - TRE-MA - Técnico Judiciário - Programação de Sistemas) Para


definição e manipulação de uma exceção em Java, devem constar no programa,
obrigatoriamente, os termos:

a) try e catch.
b) try e finally. 16712855225

c) finally e catch.
d) finally e retry.
e) try e retry.

14. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação Ao contrário dos tipos primitivos que não são objetos, os tipos de
objetos são determinados pela classe de origem.

15. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação Uma classe final indica uma classe que não pode ser estendida. Um
método final não pode ser redefinido em classes derivadas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 136 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

16. (CESPE - - SERPRO - Analista - Desenvolvimento de Sistemas A linguagem


Java, orientada a objetos, tem como característica ser compilada em um código
executado em máquina virtual.

17. (CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


Informação A instrução import Java.awt.* indica que o programa irá utilizar
componentes gráficos.

18. (CESPE - - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da


Informação Em Java, os métodos public de uma classe são utilizados pelos
clientes da classe para manipular dados armazenados em objetos dessa classe.

19. (CESPE - 2013 - SERPR - Analista - Desenvolvimento de Sistemas) A tecnologia


JSE (Java Small Editon) utilizada pela plataforma iOS permite o desenvolvimento
de aplicações para todos os seus dispositivos, como estações gráficas, iPad, iPod,
entre outros.

(CESPE - 2013 - MPOG - Tecnologia da Informação O JME foi criado para


trabalhar com ambientes de programação multiprocessados em ambientes
distribuídos.

21. (CESPE - 2013 - ANTT - Analista Administrativo - Desenvolvimento de Sistemas


da Informação JSE, JME, JEE e JCE são edições da tecnologia Java voltadas para
o desenvolvimento de aplicações para desktop/servidores, dispositivos móveis,
ambientes corporativos e ambientes em nuvem, respectivamente.

(CESPE - - HEMOBRÁS - Técnico de Informática O Java dá suporte a


programação concorrente (multithreading).
16712855225

(CESPE - - ANAC - Técnico Administrativo - Informática) A linguagem de


programação Java permite operações de bit, como, por exemplo, AND (&) e OR
(|).

24. (CESPE - 2010 - MPU - Técnico de Informática Na linguagem Java, um objeto


do tipo Integer pode receber valor nulo, porém uma variável primitiva int não pode.

(CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Técnico Judiciário - Tecnologia da
Informação É possível indicar que parte de um código em um método pode
gerar uma exceção, por meio da utilização da palavra-chave finally.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 137 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(CESPE - 2014 - ANATEL - Analista Administrativo - Tecnologia da Informação e


Comunicação) A linguagem Java possui checked exceptions que estendem
java.lang.Exception, em que o compilador força o programador a capturar tais
exceções. Essas exceções devem ser tratadas com um bloco try-catch ou com
um throws.

27. (CESPE – 2004 – STJ - Analista Judiciário - Análise de Sistemas) O Java collections
framework da API Java J2SE possui um conjunto de interfaces e implementações
que define estruturas usadas para manipular coleções de objetos. As interfaces
fundamentais do framework estão associadas à identificação de funcionalidades
típicas de estruturas de dados clássicas. Assim, a interface java.util.List está ligada
a estruturas de listas, a interface java.util.Set está associada a estruturas do tipo
conjuntos e a interface java.util.Map refere-se a estruturas do tipo mapas. Set,
List e Map possuem a interface abstrata java.util.Collection como superinterface.

(CESPE – 2004 – STJ - Analista Judiciário - Análise de Sistemas) As classes


java.util.LinkedList e java.util.ArrayList são implementações para listas
encadeadas e coleções do tipo arranjos com tamanho modificável,
respectivamente, para a interface java.util.List.

(CESPE – – ANCINE – Analista de Sistemas) Os tipos de dados HashSet,


ArrayList e HashMap são classes que implementam os tipos de dados Set, List e
Map, respectivamente.

(CESPE – – SGA/AC – Analista de Sistemas – C ArrayList implementa a


interface List e Collection.

31. (CESPE – 2008 – MPE/RR - Analista de Sistemas) O pacote java.awt contém


16712855225

diversas classes para criar interfaces gráficas de usuário em aplicações Java.

(CESPE – – MPE/RR - Analista de Sistemas) No AWT, um componente é


qualquer classe que possa ser representada em uma tela sem interação com
usuário.

(CESPE – – MPE/RR - Analista de Sistemas) O Swing suporta o


desenvolvimento de interfaces gráficas para usuários (GUI) com o uso da IDE
NetBeans

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 138 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

34. (CESPE – 2011 – MEC - Analista de Sistemas) AWT é um conjunto de


componentes GUI, integrante da arquitetura JEE6, constante no pacote java.awt,
desenvolvidas para substituir as GUIs do SWING.

(CESPE – 2015 – TCU - Analista de Sistemas) No contexto de um código na


linguagem Java, o comando a seguir é utilizado com a finalidade específica de
passar para o campo de visibilidade pública saldo o valor da variável deposito
com o tipo double. public void saldo (double deposito).

(CESPE – 2014 – ANATEL - Analista de Sistemas) No JSE (Java Standard Edition)


versão 8, é possível utilizar recursos inerentes à programação funcional por meio
de uma nova característica da linguagem chamada expressões Lambda, que
permitem o tratamento de funções como argumentos de métodos.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 139 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


JAVA SE

(FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas Em relação


ao Java Standard Edition, é INCORRETO afirmar:

a) Possui gerenciamento de memória embutido, por meio do coletor de lixo.

b) Ambiente indicado para o desenvolvimento de aplicativos para dispositivos


móveis ou portáteis.

c) Permite o desenvolvimento de aplicações desktop de linha de comando e


interfaces gráficas Swing.

d) Portabilidade dos programas compilados para diversos sistemas operacionais,


sem necessidade de recompilação.

e) Usa conceitos tais como orientação a objetos e multithreading.

(FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da


Informação A plataforma Java disponibiliza um interpretador que traduz, em
tempo de execução, o bytecode para instruções nativas do processador,
permitindo, dessa forma, que uma mesma aplicação seja executada em qualquer
plataforma computacional que possua essa implementação. Trata-se de:

a) Java Virtual Machine.


b) Java API. 16712855225

c) JavaBeans.
d) J2SE.
e) JavaFX.

(FCC - 2010 - Sergipe Gás S.A. - Analista de Sistemas É tida como uma das
principais linguagens de programação orientada a objeto; tem como
característica a compilação para um bytecode e execução por uma máquina
virtual. Trata-se da linguagem:

a) Algol.
b) Delphi.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 140 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

c) C++.
d) Java.
e) PHP.

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web Os aplicativos Java “rodam” em diferentes ambientes. A tradução dos
códigos Java (bytecode), para instruções específicas de cada sistema e
dispositivo, é uma função do programa:

a) Java Community Process (JCP).


b) Java Virtual Module (JVM).
c) Java Virtual Machine (JVM).
d) Java Comunication Process (JCP).
e) Java Enterprise Machine (JEM).

(FCC - - -SE - Técnico Judiciário - Programação de Sistemas Um objeto


é instanciado em Java por meio do operador:

a) instanceof.
b) extend.
c) new.
d) this.
e) type.

(FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da


Informação Uma classe Java pode ser instanciada por um comando, cuja sintaxe
é:

a) nome_Objeto nome_Classe = new nome_Objeto();


16712855225

b) nome_Classe nome_Objeto = new nome_Classe();


c) nome_Classe nome_instancia = new nome_Objeto();
d) nome_Instancia nome_Objeto = new nome_Instancia();
e) nome_Instancia nome_Classe = new nome_Instancia();

(FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da


Informação A diretiva public é utilizada em Java para aplicar a encapsulação
pública:

a) aos métodos e classes, apenas.


b) aos atributos, métodos e classes.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 141 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

c) às classes, apenas.
d) aos atributos, apenas.
e) aos atributos e classes, apenas.

(FCC - 2008 - TCE-AL - Programador Em Java, para alterar a visibilidade do


elemento em que se aplica, entre outros, utiliza-se o modificador de acesso:

a) static.
b) abstract.
c) protected.
d) volatile.
e) transient.

(FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas


Analise os seguintes valores, variáveis e operações usando expressões Java:

byte j = 30;
short k = 54;
int m = 40;
long n = 12L;
long resultado = 0L;
resultado += j;
resultado += k;
resultado /= n;
resultado -= m;

Após a última operação, o resultado será igual a:

a) -7. 16712855225

b) -32.
c) -33.
d) 60.
e) 84.

10. (FCC - - TRE-MG - Técnico Judiciário - Programação de Sistemas Os


métodos Java que não retornam valores devem possuir no parâmetro tipo-de-
retorno a palavra:

a) static.
b) public.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 142 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

c) void.
d) main.
e) string args.

11. (FCC - 2012 - TST - Analista Judiciário - Análise de Sistemas) Considere o


programa abaixo escrito na linguagem Java:

O resultado a ser informado ao usuário após a execução do programa acima é:

a) 0 0 1 0 0 1 0 0 1
b) 0 1 2 0 1 2 0 1 2
c) 0 1 0 1 0 1 0 1 0
d) 1 2 1 2 1 2 1 2 1
e) 0 2 1 0 2 1 0 2 1

12. (FCC - 2012 - E-AP - Analista Ministerial - Tecnologia da Informação Analise


o código das classes a seguir presentes em um mesmo pacote de um projeto
Java:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 143 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

Com base nos códigos apresentados e nos conceitos da orientação a objetos é


correto afirmar:

a) No método main da classe Start não é possível instanciar objetos das classes
NewClassA e NewClassB, pois essas classes não contêm um construtor válido.

b) Se for digitada a instrução NewClassB c = new NewClassA(); no método main da


classe Start será instanciado um objeto da NewClassA.

c) Se for digitada a instrução NewClassA b = new NewClassB(); no método main da


classe Start ocorrerá um erro, pois não é possível criar um objeto da NewClassA por
meio do construtor da NewClassB.

d) A existência de dois métodos de mesmo nome na NewClassA que recebem a


mesma quantidade de parâmetros indica que está ocorrendo uma sobrescrita de
métodos.

e) Por meio de um objeto da NewClassB será possível acessar os métodos presentes


na NewClassA.

13. (FCC - 2012 - TCE- - Auxiliar de Fiscalização Financeira Em um programa Java,


considere a existência de uma variável do tipo long chamada cod contendo o
valor 1234. Para passar o valor contido nessa variável para uma variável do tipo
byte chamada codNovo, deve-se fazer casting. Para isso, utiliza-se a instrução:
byte codNovo =

a) Byte.valueOf(cod);
b) (long) cod;
c) Byte.pasreByte(cod); 16712855225

d) (byte) cod;
e) (cast) cod;

14. (FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas Para


chamar o método soma da classe Calculo, e mostrar na tela o retorno desse
método, é correto utilizar:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 144 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

a) Calculo c = new Calculo(); System.out.println (c.soma(10, 20, 30)); ou


System.out.println (Calculo.soma(10, 20));

b) Exclusivamente as instruções Calculo c = new Calculo(); System.out.println


(c.soma(10, 20));

c) Exclusivamente a instrução System.out.println (Calculo.soma(10, 20, 50));

d) Exclusivamente as instruções Calculo c = new Calculo(); double r = c.soma(10,


20); System.out.println(r);

e) Calculo c = Calculo.soma(10,20,30); System.out.println (c); ou


System.out.println (Calculo.soma(10, 20));

15. (FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas Com


relação a herança na programação orientada a objetos com Java, é INCORRETO
afirmar:

a) Uma subclasse herda os métodos da superclasse, entretanto, pode ter seus


próprios métodos.

b) Quando se instancia um objeto da subclasse, podem ser passados valores


para os atributos da superclasse.
16712855225

c) Um objeto da subclasse pode ser um objeto da superclasse.

d) Em uma superclasse, para acessar métodos da subclasse deve ser usada a


instrução super.

e) Para definir que a subclasse herda as características da superclasse utiliza-se


a instrução extends na declaração da subclasse.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 145 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

16. (FCC - 2011 - TRT - 4ª REGIÃO (RS) - Técnico Judiciário - Tecnologia da


Informação No ambiente de programação Java:

a) uma classe abstrata permite apenas métodos abstratos.


b) o corpo de um método abstrato termina com ponto e vírgula e a declaração
é delimitada por chaves.
c) uma interface pode definir tanto métodos abstratos quanto não abstratos.
d) a herança múltipla permite que mais classes sejam estendidas.
e) toda classe é uma subclasse direta ou indireta da classe Object.

17. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da
Informação São tipos primitivos da linguagem Java:

a) int, string, long e real.


b) char, int, real e bit.
c) boolean, double, float e byte.
d) real, short, long e char.
e) string, long int, short int e float.

18. (FCC - 2010 - - - Agente Legislativo de Serviços Técnicos e Administrativos


- Processamento de Dados Os tipos de dados primitivos em Java são:

a) char, boolean, byte, short, int, long, float e double.


b) char, boolean, byte, short, int, long, float, double e String.
c) byte, short, int, long, float e double.
d) byte, short, int, long, float, double, String e Date.
e) char, boolean, byte, short, int, long, float, double, String e Date.

19. (FCC - 2009 - TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação
16712855225

No âmbito da linguagem Java, considere:

I. Edição é a criação do programa, que também é chamado de código Bytecode.

II. Compilação é a geração de um código intermediário chamado fonte, que é


um código independente de plataforma.

III. Na interpretação, a máquina virtual Java ou JVM analisa e executa cada


instrução do código Bytecode.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 146 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

IV. Na linguagem Java a interpretação ocorre apenas uma vez e a compilação


ocorre a cada vez que o programa é executado.

Está correto o que consta em:

a) I, II, III e IV.


b) II e IV, somente.
c) III e IV, somente.
d) IV, somente.
e) III, somente.

(FCC - 2008 - TCE-AL - Programador Os três elementos básicos quando


contidos num arquivo fonte Java devem obrigatoriamente se apresentar na
seguinte ordem:

a) import, package e class.


b) class, package e import.
c) class, import e package.
d) package, class e import.
e) package, import e class.

21. (FCC - 2014 – TRF/3 – Analista de Sistemas Considere a classe escrita em Java:

16712855225

O valor que será impresso na execução do método main é:

a) 6.0
b) 7
c) 8.0

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 147 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

d) 5.0
e) 12.5

(FCC - - TCE-AL - Programador Considerando que as variáveis Java X, Y e


Z foram todas inicializadas com zero, os resultados das mesmas após as
alterações realizadas pelas atribuições X *= 2, Y -= 5 e Z /=3, respectivamente,
serão:

a) 0, -5 e 0
b) 0, 5 e 0
c) 1, -5 e 3
d) 2, -5 e 3
e) 2, 5 e 3

(FCC - 2008 - MPE-RS - Técnico em Informática - Área Sistemas A função Java:

public boolean VerificarCPF (string CPF);

representa um exemplo do conceito de:

a) override.
b) overload.
c) herança.
d) encapsulamento.
e) polimorfismo.

24. (FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas


Quanto às variáveis Java, um inteiro de 64 bits em notação de complemento de
dois que pode assumir valores entre -263 e 263 -1 é:
16712855225

a) long.
b) short.
c) float.
d) byte.
e) double.

(FCC - 2005 - TRE-MG - Técnico Judiciário - Programação de Sistemas A


seqüência de etapas para implementação de um programa Java é:

a) interpretação, codificação, execução e compilação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 148 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

b) codificação, interpretação, compilação e execução.


c) interpretação, codificação, compilação e execução.
d) codificação, compilação, interpretação e execução.
e) compilação, codificação, execução e interpretação.

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas Considere


a variável idade declarada no método main de uma classe Java, com a seguinte
instrução:

int idade=12;

Analise:

I. System.out.println (idade<18?"Menor de idade":"Maior de idade");

II. if(idade<18) {System.out.println("Menor de idade");} else


{System.out.println("Maior de idade");}

III. if(idade<18) {System.out.println("Menor de idade");} else if (idade>=18)


{System.out.println("Maior de idade");}

IV. switch(idade) {case<18: System.out.println("Menor de idade"); break;


case>=18: System.out.println("Maior de idade");}

Contém uma instrução correta que exibirá na tela a frase "Menor de idade":

a) I, II, III e IV.


b) I, II e III, apenas.
c) II e III, apenas. 16712855225

d) II, apenas.
e) I e III, apenas.

27. (FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) Considere


a estrutura de repetição seguinte:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 149 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

A saída na tela será:

a) 15 e 6.
b) 1 e 5.
c) 0 e 1.
d) 6 e 9.
e) 9 e 7.

(FCC - 2011 - TRE-AP - Técnico Judiciário - Programação de Sistemas Em relação


à plataforma de desenvolvimento JSE, considere:

I. Possibilita o desenvolvimento de aplicações desktop através de linha de


comando e através da interface gráfica Swing.
II. É multiplataforma: permite a portabilidade dos programas compilados para
diversos sistemas operacionais, sem necessidade de alteração do código ou de
recompilação.
III. Faz uso explícito de ponteiros e usa conceitos modernos, tais como,
orientação a objetos e suporte a multithreading.
IV. Possui o gerenciamento de memória embutido, por meio do garbage
collector.
16712855225

Está correto o que se afirmar em:

a) I, II e III, somente.
b) I, II e IV, somente.
c) I, III e IV, somente.
d) II, III e IV, somente.
e) I, II, III e IV.

(FCC - 2011 - INFRAERO - Analista de Sistemas - Desenvolvimento e


Manutenção No Java, um tipo inteiro (int) utiliza quatro bytes para

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 150 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

armazenamento. A faixa máxima possível de valores inteiros para se armazenar


em uma variável do tipo primitivo int é de:

a) -8388608 a 8388607.
b) -128 a 127.
c) -32768 a 32767.
d) -9223372036854775808 a 9223372036854775807.
e) -2147483648 a 2147483647.

(FCC - 2010 - TRT - 9ª REGIÃO (PR) - Técnico Judiciário - Tecnologia da


Informação O JVM mais o núcleo de classes da plataforma Java e os arquivos
de suporte formam o:

a) o J2EE.
b) o JDK.
c) o JRE.
d) uma JSP.
e) uma API.

31. (FCC - 2014 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia da
Informação Considere as classes a seguir, presentes em uma aplicação Java
orientada a objetos:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 151 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

16712855225

Em uma classe principal foram digitadas, no interior do método main, as


seguintes linhas:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 152 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

As linhas que contêm a instrução s = f.calcularSalario( ); demonstram um


conceito da orientação a objetos conhecido como:

a) encapsulamento.
b) sobrecarga de métodos.
c) polimorfismo.
d) sobrescrita de construtores.
e) métodos abstratos.

(FCC - 2010 - - - Agente Legislativo de Serviços Técnicos e Administrativos


- Processamento de Dados Métodos estáticos em Java são aqueles que:

a) realizam alguma tarefa que é dependente do conteúdo de algum objeto.

b) não podem ser acessados diretamente pelo nome da classe a que pertencem,
mas sim por meio de um objeto da classe.

c) realizam alguma tarefa que não é dependente do conteúdo de algum objeto.

d) são acessados por objetos que não necessitam de ser instanciados


explicitamente.

e) existem em subclasses de uma herança.

(FCC - - TCE-AL - Programador NÃO são nomes válidos em Java:

a) _Real e $real
b) um1 e dois2
c) 3tres e tres3 16712855225

d) Codigo e codigo
e) cod_valor e cod$valor

34. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A tecnologia Java é, basicamente, dividida em JSE,

a) JEE e JME.
b) JEE e JPE.
c) JDE e JME.
d) JDE e JPE.
e) JEEP e JME.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 153 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da


Informação Uma classe Java pode ser instanciada por um comando, cuja sintaxe
é:

a) nome_Objeto nome_Classe = new nome_Objeto();


b) nome_Classe nome_Objeto = new nome_Classe();
c) nome_Classe nome_instancia = new nome_Objeto();
d) nome_Instancia nome_Objeto = new nome_Instancia();
e) nome_Instancia nome_Classe = new nome_Instancia();

(FCC - - TRE-MG - Programador de computador) Os erros gerados


durante a execução de um programa Java devem ser controlados com uma
estrutura que pode combinar o uso dos blocos:

a) try e finally, somente.


b) try e catch ou try e finally, somente.
c) try, catch e finally, somente.
d) try e catch, somente.
e) try e catch, try e finally ou try, catch e finally.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 154 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JAVA SE

(FUNCAB - 2010 - PRODAM- - Analista de TI - Desenvolvimento de Sistemas


Seja a seguinte classe Java:

<mod> public class Xpto


{

Qual das alternativas a seguir contém um modificador que ao ser usado na


declaração acima em substituição ao termo <mod> impedirá que a classe Xpto seja
estendida?

a) static
b) const
c) abstract
d) final
e) virtual

(ESAF - 2012 - Receita Federal - Analista Tributário da Receita Federal - Prova 2


- Área Informática Em programação Java, o comando while:

a) executa um bloco exclusivamente de comandos de atribuição.


b) executa um bloco de comandos enquanto sua condição for verdadeira.
c) executa um bloco de comandos até que sua condição seja verdadeira.
16712855225

d) equivale ao comando what-if.


e) é idêntico ao comando do while.

(CONSULPLAN – – Prefeitura de Natal – Analista de Sistemas) Analise as


afirmativas abaixo colocando V para as afirmativas Verdadeiras e F para as Falsas.
A linguagem JAVA se divide nas seguintes edições:

( ) J2SE (Java 2 Standard Edition) - tecnologia Java para computadores pessoais,


notebooks e arquiteturas com poder de processamento e memória
consideráveis.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 155 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

( ) J2EE (Java 2 Enterprise Edition) - tecnologia Java para aplicações corporativas


que podem estar na internet ou não.

( ) J2ME (Java 2 Micro Edition) - tecnologia Java para dispositivos móveis com
limitações de memória ou processamento.

( ) J2FE (Java 2 Full Edition) - tecnologia Java para aplicações em computadores


de grande porte (mainframe).

A seqüência está correta em:

a) F, F, F, F
b) V, V, V, F
c) V, F, F, V
d) F, V, F, V
e) V, V, V, V

(Instituto Cidades - 2012 - TCM-GO - Auditor de Controle Externo - Informática


Analise:

I. O Java refere-se tanto a uma linguagem de programação quanto a uma


plataforma;

II. O Java SE (Standard Edition) é formalmente chamado de J2SE;

III. O J2EE é a edição corporativa do Java. Esta versão inclui o Java Standard
Edition além de outras tecnologias como javamail, servlets, JSF e Enterprise Java
Beans.
16712855225

IV. O Java possui uma versão para dispositivos móveis chamada J2ME (Micro
Edition).

São verdadeiras as afirmações:

a) I, II e IV, somente;
b) I, III e IV, somente;
c) II, III e IV, somente;
d) I e IV, somente;
e) Todas as afirmações.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 156 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

(UFBA - 2012 - UFBA - Técnico de Tecnologia da Informação O código-fonte de


um programa de computador escrito na linguagem Java, é compilado para um
formato intermediário conhecido como bytecode.

(PaqTcPB - 2012 - UEPB - Técnico em Informática - Programador) Em Java, um


bloco de código é:

a) Tudo que está entre ( )


b) Tudo que está entre { }
c) Tudo que está entre [ ]
d) Tudo que está entre < >
e) Tudo que está no mesmo nível de indentação.

(CESGRANRIO - 2012 - Petrobrás - Técnico de Exploração de Petróleo Júnior -


Informática Ao escrever o código da Classe PortaDeCofre em Java para que ela
atenda a interface Porta, como um programador deve começar a declaração da
classe?

a) public class Porta:PortaDeCofre {


b) public class PortaDeCofre :: Porta {
c) public class PortaDeCofre inherits Porta {
d) public class PortaDeCofre extends Porta {
e) public class PortaDeCofre implements Porta {

(PaqTcPB - 2012 - UEPB - Técnico em Informática - Programador Em linguagem


de programação, um identificador é o nome que utilizamos para representar
variáveis, classes, objetos. etc. Em Java, qual dos itens abaixo não é um
identificador válido?
16712855225

a) falso
b) true
c) maior_valor
d) Mp10
e) xBACON

(ESAF - - - Tecnologia da Informação Com relação a essa


característica, é correto afirmar que:

a) métodos declarados como public em uma superclasse, quando herdados,


precisam ser protected em todas as subclasses dessa classe.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 157 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

b) métodos declarados como protected em uma superclasse, quando herdados,


precisam ser protected ou public nas subclasses dessa classe.

c) o nível de acesso protected é mais restritivo do que o nível de acesso default.

d) métodos declarados como public só podem ser acessados a partir dos


métodos da própria classe ou de classes derivadas.

e) métodos declarados como default só podem ser acessados a partir dos


métodos da própria classe.

10. (UFBA - – UFBA – Analista de Sistemas) O bloco finally em uma instrução try
catch finally sempre será executado quer ocorra ou não uma exceção no bloco try.

11. (CONSULPLAN - 2007 - Chesf - Analista de Sistemas – I É possível utilizar vários


blocos catch para capturar exceções vindas de um único bloco try.

12. (AOCP - 2012 - BRDE - Analista de Sistemas - Desenvolvimento de Sistemas - III)


Java threads são objetos que podem cooperar e comunicar-se entre si para
compartilhar objetos em memória, a tela, ou outros tipos de recursos e
periféricos.

13. (FGV – 2009 – MEC - Analista de Sistemas – D) Swing é um mecanismo simples


e consistente para estender a funcionalidade de um servidor web e para acessar
existentes sistemas de negócio.

14. (ESAF – – CGU - Analista de Sistemas) A linguagem Java possui uma API
(Application Program Interface) que disponibiliza pacotes e classes com diversas
16712855225

funcionalidades para auxiliar no desenvolvimento de aplicações. O pacote que


contém classes que auxiliam na criação de interfaces de usuário, incluindo
tratamento de gráficos e imagens, é denominado:

a) java.util.
b) java.applet.
c) java.graphic.
d) java.image.
e) java.awt.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 158 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

15. (FGV – 2015 – PGE/RO – Analista de Sistemas) Na linguagem de programação


Java, para indicar que uma classe A é derivada de B, utiliza-se, na declaração de
A, o modificador:

a) imports;
b) extends;
c) inherits;
d) subclass;
e) superclass.

16. (FGV – 2015 – PGE/RO – Analista de Sistemas) São tipos primitivos na linguagem
de programação Java:

a) int, float, double, char, boolean;


b) int, double, string, char, boolean;
c) integer, real, byte, char, boolean;
d) byte, word, short, integer, char;
e) int, real, char, string, boolean.

17. (FGV – 2014 – TJ/GO – Analista de Sistemas) Se uma classe na linguagem Java é
declarada com o modificador abstract, então essa classe:

a) não pode ser referenciada;


b) não pode ser estendida;
c) não pode ser instanciada;
d) pode ser instanciada apenas uma vez;
e) não pode possuir métodos estáticos.

18. (FGV – 2014 – TJ/GO – Analista de Sistemas) Na linguagem de programação


16712855225

Java, uma classe declarada com o modificador final:

a) não pode ser instanciada;


b) não pode ser estendida;
c) pode ter o modificador abstract também presente na declaração;
d) não pode ter métodos estáticos;
e) não pode ter métodos de instância.

19. (FGV – 2010 – BADESC – Analista de Sistemas) Observe o código em Java a


seguir, em que se pode verificar a aplicação dos operadores de pré-decremento
e pós-decremento.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 159 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

public class Decrementa {


public static void main (string args {} )
{
int m, n = 44;
m = --n;
m = n--;
system.out.println (m);
system.out.println (n);
}
}

Após a execução do código, as variáveis m e n exibirão, respectivamente, os


valores:

a) 42 e 41.
b) 42 e 42.
c) 42 e 43.
d) 43 e 42.
e) 43 e 43.

GV – 2015 – TJ/BA – Analista de Sistemas) Em Java, os métodos declarados


sem modificadores em uma interface são implicitamente:

a) públicos e estáticos;
b) públicos e abstratos;
c) privados e estáticos;
d) públicos e finais;
e) privados e abstratos.
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 160 de 161


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 03

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


JAVA SE

1 2 3 4 5 6 7 8 9 10
C C E C E E C E C C
11 12 13 14 15 16 17 18 19 20
C E A C C C C C E E
21 22 23 24 25 26 27 28 29 30
E C C C E C E C C E
31 32 33 34 35 36 37 38 39 40
C E C E E C

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


JAVA SE

1 2 3 4 5 6 7 8 9 10
B A D C C B B C C C
11 12 13 14 15 16 17 18 19 20
E E D A D E C A E E
21 22 23 24 25 26 27 28 29 30
C A D A D B D B E C
31 32 33 34 35 36 37 38 39 40
C C C A B E

16712855225

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS)


JAVA SE

1 2 3 4 5 6 7 8 9 10
D B B E C B E B B C
11 12 13 14 15 16 17 18 19 20
C C E E B A C B D B

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 161 de 161


Aula 04

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

AULA 04

SUMÁRIO PÁGINA
Apresentação 01
- Java Enteprise Edition (JAVA EE) 02
- Java Server Pages (JSP) 19
- Servlets 56
- Java Server Faces (JSF) 90
Lista de Exercícios Comentados 199
Gabarito 156

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

JAVA ENTEPRISE EDITION (JAVA EE)

Bem, galera... nosso foco aqui é Java EE1! Empresas de tecnologia da informação
sofrem atualmente com a altíssima competitividade. Não é raro ver uma gigante,
que todo mundo achava que seria eterna, desmoronando-se por conta de uma
nova tecnologia que surgiu ou paradigma que apareceu! Ou alguém aí ainda usa
IRC, ICQ, MSN para se comunicar?

É verdade, professor! As empresas de Tecnologia da Informação têm vida curta! Não


são só elas! Hoje em dia, empresas de quaisquer áreas precisam de aplicações para
satisfazer as suas necessidades de negócio, que estão se tornando cada vez mais
complexas. E tudo isso se torna mais complicado com a globalização – as empresas
estão cada vez mais espalhadas por cidades, países e continentes.

E, ainda assim, realizam seus negócios 24/7 por meio da internet, com um bocado
de data centers e sistemas internacionalizados para lidar com diferentes línguas,
moedas, fusos-horários, etc. E elas param de trabalhar em algum momento? Não!
Estão sempre tentando diminuir seus custos, tempo de resposta de seus serviços,
armazenar mais dados de maneira confiável e segura, entre outros.

E tudo isso de forma transparente para o cliente, que simplesmente acessa uma
interface gráfica amigável achando que isso tudo é muito simples (mal sabem o que
ocorre por trás). Pessoal, tudo tem que funcionar para o usuário não reclamar ou
trocar de prestadora de serviço – e, claro, sem perder dinheiro, i.e., tem que haver
prevenção de falhas, alta disponibilidade, redundância, escalabilidade e segurança.

Além disso, as corporações têm de enfrentar constantes mudanças de requisitos,


16712855225

tecnologias, políticas, leis, etc. Em 2014, grande parte do que citamos é oferecido
pelo Java Enterprise Edition (Java EE). Mas, então, o que é de fato o Java EE? É um
conjunto de especificações destinadas ao desenvolvimento de aplicações
distribuídas, robustas, potentes, escaláveis, multicamadas e de alta disponibilidade.

Rapaziada, vamos ver agora algumas novidades trazidas pela Plataforma Java EE 6:
conceito de profiles ou perfis; Java API for RESTful Web Services (JAX-RS); Managed
Beans; Contexts and Dependency Injection (CDI); Dependency Injection for Java;

1
Esse nome já mudou repetidas vezes! Inicialmente, chamava-se J2EE; depois foi modificado para JEE; e
atualmente é conhecido como Java EE.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Bean Validation; entre outras tecnologias concernentes a Enterprise JavaBeans,


JavaServer Faces e Servlets.

Como ele oferece tudo isso, nós veremos por meio do estudo de um assunto muito
importante: Arquitetura Java EE – apresentada na imagem abaixo:

O Client System é a Camada do Cliente; Web Container é a Camada Web; o EJB


Container é a Camada de Negócio; e o Database é a Camada de Dados2. No
entanto, há quem condense a Camada Web e a Camada de Negócio em uma
camada chamada Servidor Java EE, representada pelo retângulo maior à direita –
veremos com detalhes mais à frente!

16712855225

2
É também conhecida como Camada EIS (Enterprise Information System), que disponibiliza informações relevantes ao negócio e,
diferente do que apresenta a imagem, não trata apenas do banco de dados, mas também de sistemas legados, processamento de
transações de mainframe, sistemas externos, entre outros.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Vamos falar um pouco agora sobre o Modelo de Aplicações Java EE! Galera, Java
EE é projetado para suportar aplicações que implementam serviços corporativos
para clientes, empregados, fornecedores, parceiros e outros que demandem ou
contribuem com a organização! Essas aplicações são inerentemente complexas,
acessando dados de diversas fontes e distribuindo as aplicações entre os clientes.

O Modelo de Aplicações Java EE define uma arquitetura para implementação de


serviços como aplicações multicamadas que fornecem escalabilidade, acessibilidade
e gerenciabilidade necessários para aplicações corporativas. Dessa forma, a lógica
de apresentação e a lógica de negócio são implementadas pelo desenvolvedor e os
outros serviços são fornecidos pela plataforma Java EE!

Conforme mostra a imagem acima, existem duas aplicações multicamadas Java EE


divididas em níveis descritos como se segue:

 Camada do Cliente: componentes rodam na Máquina Cliente;


 Camada Web: componentes rodam no Servidor Java EE;
 Camada de Negócio: componentes rodam no Servidor Java EE;
 Camada EIS: software roda no Servidor EIS.

Galera, a imagem abaixo apresenta um pouco da evolução do Java EE e a tabela


que segue apresenta as APIs do Java EE:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

JAVA EE 6 (10/12/2009) JAVA EE 7 (12/06/2013)

- Java API for WebSocket


- Java API for JSON Processing
Java Servlet 3.0 Java Servlet 3.1
JavaServer Faces (JSF) 2.0 JavaServer Faces (JSF) 2.2
Expression Language (EL) 2.2 Expression Language (EL) 3.0
JavaServer Pages (JSP) 2.2 JavaServer Pages (JSP) 2.3
JavaServer Pages Standard Tag Library (JSTL) 1.2 JavaServer Pages Standard Tag Library (JSTL) 1.2
- Batch Applications for the Java Platform
- Concurrency Utilities for Java EE 1.0
Contexts and Dependency Injection for Java 1.0 Contexts and Dependency Injection for Java 1.1
Dependency Injection for Java 1.0 Dependency Injection for Java 1.0
Bean Validation 1.0 Bean Validation 1.1
Enterprise JavaBeans (EJB) 3.1 Enterprise JavaBeans (EJB) 3.2
Interceptors 1.1 Interceptors 1.2
Java EE Connector Architecture 1.6 Java EE Connector Architecture 1.7
Java Persistence API (JPA) 2.0 Java Persistence API (JPA) 2.1
Common Annotations for the Java Platform 1.1 Common Annotations for the Java Platform 1.2
Java Message Service API (JMS) 1.1 Java Message Service API (JMS) 2.0
Java Transaction API (JTA) 1.1 Java Transaction API (JTA) 1.2
JavaMail API 1.4 JavaMail API 1.5
Java API for RESTful Web Services (JAX-RS) 1.1 Java API for RESTful Web Services (JAX-RS) 2.0
- Implementing Enterprise Web Services 1.3
Java API for XML-Based Web Services (JAX-WS) 2.2 Java API for XML-Based Web Services (JAX-WS) 2.2
Web Services Metadata for the Java Platform 2.1 Web Services Metadata for the Java Platform
Java API for XML-based RPC (JAX-RPC) 1.1 Java API for XML-based RPC (JAX-RPC) (Opcional) 1.1
Java APIs for XML Messaging (JAXM) 1.3 Java APIs for XML Messaging 1.3
Java API for XML Registries (JAXR) 1.0 Java API for XML Registries (JAXR) 1.0
Java Authentication Service Provider Interface for Java Authentication Service Provider Interface for Containers
Containers (JASPIC) 1.0 (JASPIC) 1.1
Java Authorization Service Provider Contract for Containers Java Authorization Service Provider Contract for Containers
(JACC) 1.4 (JACC) 1.5
Java EE Application Deployment 1.2 Java EE Application Deployment (Opcional) 1.2
16712855225

J2EE Management 1.1 J2EE Management 1.1


- Debugging Support for Other Languages 1.0
Java Architecture for XML Binding (JAXB) 2.2 Java Architecture for XML Binding (JAXB) 2.2
- Java API for XML Processing (JAXP) 1.3
- Java Database Connectivity 4.0
- Java Management Extensions (JMX) 2.0
- JavaBeans Activation Framework (JAF) 1.1
- Streaming API for XML (StAX) 1.0
Managed Beans 1.0 -
Web Services 1.3 -
Debuggin Support for Other Languages 1.0 -

A versão Java EE 6 traz o conceito de profile (ou perfil)! O que é isso, professor? Um
perfil busca definir um subconjunto das tecnologias dentre aquelas da plataforma

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Java EE. Como assim? Bem, pensem comigo: cada aplicação tem sua particularidade,
portanto não é necessário implementar obrigatoriamente todas as tecnologias da
plataforma, i.e., eu posso criar perfis – cada um com sua configuração!

Imaginem que vamos fazer um sisteminha pequeno! Eu preciso implementar tudo


que está na plataforma? Não, posso criar um perfil que implementa somente um
subconjunto de funcionalidades! Existem dois perfis importantes: Web Profile e Full
Profile! O primeiro perfil é um subconjunto do segundo e ajuda desenvolvedores a
criarem aplicações mais leves que podem rodar em um Servlet Container.

Plataforma Java EE Java EE 6 Java EE 7


Java Servlet  
Java Server Faces (JSF)  
Java Server Pages (JSP)  
Expression Language (EL)  
Standard Tag Library for JavaServer Pages (JSTL)  
Debugging Support for Other Languages  
Contexts and Dependency Injection for the Java EE Platform  
Dependency Injection for Java  
Enterprise JavaBeans (EJB)  
Java Persistence API  
Common Annotations for the Java Platform  
Java Transaction API  
Bean Validation  
Java EE Connector Architecture 
Java API for RESTful Web Services (JAX-RS) 

Observem que a tabela abaixo apresenta o EJB 3.1 como parte do Web Profile. Na
verdade, no Web Profile, trata-se do EJB 3.1 Lite, que é mais leve. Como assim,
16712855225

professor? Assim como os perfis, ele possui um subconjunto dos features do EJB 3.1
Full. Por que? Porque é uma API utilizada especificamente para aplicações web.
Vejam a diferença de acordo com a tabela abaixo.

Percebam que o EJB 3.1 Lite deixa de fora funcionalidades que são pouco utilizadas
em aplicações web. De forma similar o Web Profile não oferece suporte a JAX-WS,
JAX-RPC, JAXR, SAAJ, JAX-RS, JAXB, JMS, JAAS, JASPIC, JACC, JCA, JavaMail,
Management Specification e Deployment Specification – além disso, ele não oferece
suporte a Arquivos EAR (apenas Arquivos WAR).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Para finalizar, vamos entender algumas coisinhas! O processo de implantar (para


alguns, instalar) uma aplicação em um Servidor Java EE é chamado Deploy ou
Deployment. Sabe-se que componentes são agrupados em módulos, compactados
em .ZIP e, na Implantação, mapeia-se cada componente do Java EE para seu
contêiner correspondente. Existem três tipos básicos de módulo:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

MÓDULO DESCRIÇÃO

EAR Também chamado Enteprise Application Archives, contém a aplicação completa, com todos os
seus módulos e componentes. É composta por vários arquivos .war e .jar.
WAR Também chamado Web Application Archives, contém a Aplicação Web (JSP, HTML, Servlets,
Arquivos de Configuração, Imagens, etc) – é o que forma uma página em si.
JAR Também chamado Java Application Archives, contém a Aplicação EJB, Aplicação Cliente e
Applets3, além de arquivos de configuração dos aplicativos.
RAR Também chamado Resource Adapter, contém interfaces, classes, bibliotecas, etc.

16712855225

3
A bem da verdade, todos os módulos são Arquivos JAR com a extensão modificada. Por que essa mudança?
Para que o servidor possa diferenciar o que está sendo implantado.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE – – INMETRO – Analista de Sistemas) São exemplos de tipos de


componentes de software reusáveis desenvolvidos na plataforma JEE: JSP (Java
Server Page); biblioteca de tags; Servlet; EJB. O grau de reúso provido por esses
componentes, EJBs e JSPs, é usualmente superior a bibliotecas de TAG.

Comentários:

Galera, vamos responder isso intuitivamente! Como uma Página JSP ou um


Componente EJB poderia oferecer maior reusabilidade que uma biblioteca? Ora, essa
é uma das principais características de uma biblioteca: sua reusabilidade! Logo, isso
não faz sentido! Bibliotecas de Tags são mais reusáveis.

Gabarito: E

(CESPE – – SERPRO – Analista de Sistemas) A tecnologia Enterprise


JavaBeans (EJB) é uma arquitetura de componentes do tipo cliente que atua na
plataforma J2EE.

Comentários:

16712855225

JAVA EE 6 (10/12/2009) JAVA EE 7 (12/06/2013)

Enterprise JavaBeans (EJB) 3.1 Enterprise JavaBeans (EJB) 3.2

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, Enterprise Java Bean (EJB) não é uma arquitetura, é um
componente da Arquitetura J2EE. Além disso, é do tipo Servidor (veja a imagem
acima).

Gabarito: E

(CESPE - 2010 – TCU – Auditor Federal de Controle Externo) A web profile da


plataforma JEE apresenta, em relação ao perfil application server definido em
edições anteriores da plataforma Java, as seguintes vantagens: fornece suporte
para POJOs (Plain Old Java Objects) e Annotations; possui modelo de
empacotamento de componentes mais simples; a configuração dos seus
descritores XML (extensible markup language) é mais fácil; é aderente ao padrão
SOA.

Comentários:

Imaginem que vamos fazer um sisteminha pequeno! Eu preciso implementar tudo


que está na plataforma? Não, posso criar um perfil que implementa somente um
subconjunto de funcionalidades! Existem dois perfis importantes: Web Profile e Full
Profile! O primeiro perfil é um subconjunto do segundo e ajuda desenvolvedores a
criarem aplicações mais leves que podem rodar em um Servlet Container.

Conforme vimos em aula, primeiro, não existe Application Server Profile – existe
apenas Web Profile e Full Profile. Segundo, o conceito de Perfis foi introduzido
apenas no Java EE 6 – eu calculo que ele esteja considerando Full Profile como
Application Server Profile. Terceiro, POJOs e Annotations são tecnologias do Java
EE 5. Quarto, pode-se dizer que é aderente ao SOA por conta do JAX-RS, no
entanto o Full Profile também é (inclusive é aderente ao JAX-RS também). Logo, a
16712855225

questão está errada desde o início.

Gabarito: E

(CESPE - 2010 – TRE/MT – Analista Judiciário – Tecnologia da Informação – A)


Clientes J2EE são necessariamente páginas web dinâmicas que normalmente não
fazem acessos a banco de dados, nem executam regras de negócio complexas.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, os clientes Java EE não são necessariamente Páginas Web
Dinâmicas (Browser). A imagem acima mostra que eles podem ser também uma
Aplicação Cliente.

Gabarito: E

(CESPE - 2010 – TRE/MT – Analista Judiciário – Tecnologia da Informação – D)


Um componente J2EE é uma unidade funcional de software autocontida, escrito
na linguagem de programação Java e executado exclusivamente em servidores.

Comentários:

16712855225

Conforme vimos em aula, um componente Java EE é uma unidade autocontida,


porque pode ser reusada sem a necessidade de incluir ou depender de outros
componentes. Ademais, eles são escritos na linguagem de programação Java, no
entanto não são necessariamente executados exclusivamente em servidores, podem
ser executados no cliente (conforme imagem acima).

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE - 2011 – PREVIC – Analista de Sistemas) Em uma aplicação multicamadas


na plataforma Java EE, servlets, JavaServer Faces e JSP consistem em tecnologias
utilizadas na camada web.

Comentários:

Conforme vimos em aula, a Camada Web é composta por JSP, JSF e Servlets.

Gabarito: C

(ESAF – 2012 – CGU – Analista de Finanças e Controle) Os níveis da plataforma


J2EE são:

a) Patrocinador. Web. Negócios. Sistemas de Computação Corporativos.


b) Cliente. Web. Negócios. Sistemas de Informação Corporativos.
c) Cliente. Interno. Externo. Negócios.
d) Fornecedor. Web. Político. Sistemas de Informação Camada.
e) Cliente. Stakeholders. Negócios. Background corporativo.
16712855225

Comentários:

 Camada do Cliente: componentes rodam na Máquina Cliente;


 Camada Web: componentes rodam no Servidor Java EE;
 Camada de Negócio: componentes rodam no Servidor Java EE;
 Camada EIS: software roda no Servidor EIS.

Conforme vimos em aula, os níveis são: Cliente, Web, Negócios e Sistemas de


Informação Corporativos (EIS).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Gabarito: B

(CESGRANRIO – 2008 – BNDES – Analista de Sistemas) Uma aplicação


empresarial contendo componentes EJB e módulos web deverá ser publicada
em um servidor de aplicações compatível com J2EE. No contexto do
empacotamento dessa aplicação para publicação (deploy), é correto afirmar que:

a) não há como juntar componentes EJB e módulos web em uma mesma


aplicação, pois deverão ser publicados separadamente.

b) um arquivo EAR poderá conter arquivos WAR e JAR representativos dos


módulos web e EJB.

c) o tamanho do pacote, em bytes, sempre fica maior que o código original, em


virtude do algoritmo empregado no empacotamento da aplicação em um
arquivo EAR.

d) módulos web não devem ser empacotados, pois isso inviabiliza seu acesso
pela Internet.

e) arquivos JAR servem apenas para empacotar componentes EJB.

Comentários:

Para finalizar, vamos entender algumas coisinhas! O processo de implantar (para


alguns, instalar) uma aplicação em um Servidor Java EE é chamado Deployment.
Sabe-se que componentes são agrupados em módulos, compactados em .ZIP e, na
Implantação, mapeia-se cada componente da Arquitetura Java EE para seu contêiner
correspondente. Existem três tipos básicos de módulo:
16712855225

Conforme vimos em aula, a primeira opção está errada, porque pode-se junta
ambos em um Arquivo EAR; a segunda opção está correta e justifica a primeira; a
terceira opção está errada, porque são arquivos compactados em .ZIP; a quarta
opção está errada, porque simplesmente não faz nenhum sentido; e a última opção
está errada porque arquivo JAR pode empacotar componentes EJB, Cliente e Applet.

Gabarito: B

(FCC – 2011 – TRT/19 – Analista de Sistemas) A especificação Java EE define os


seguintes componentes:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

I. Clientes da aplicação (Application Clients) e applets.


II. Java Servlet, JavaServer Faces e JavaServer Pages.
III. Enterprise Javabeans (EJB).

Os componentes I, II e III rodam, respectivamente, em:

a) cliente, cliente, servidor.


b) servidor, cliente, servidor.
c) cliente, servidor, servidor.
d) servidor, cliente, cliente.
e) cliente, servidor, cliente.

Comentários:

Conforme vimos em aula, tanto aplicações clientes como applets rodam no cliente;
Servlets, JSF e JSP rodam no Servidor, assim como o EJBs.

16712855225
Gabarito: C

10. (FCC - 2011 - TRT - 1ª REGIÃO (RJ) - Analista Judiciário - Tecnologia da


Informação) J2EE é uma plataforma de programação para servidores na
linguagem de programação Java, que integra uma série de especificações e
containers, cada uma com funcionalidades distintas. Nesse contexto, é correto
afirmar que são integrantes do J2EE:

a) Servlets, Jcompany e JSP.


b) JDBC, JSP, EJBs.
c) EJBs, Servlets e JBoss.
d) JDBC, Hibernate e JPA.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

e) JSP, JSF e Eclipse.

Comentários:

JAVA EE 6 (10/12/2009) JAVA EE 7 (12/06/2013)

JavaServer Pages (JSP) 2.2 JavaServer Pages (JSP) 2.3


Enterprise JavaBeans (EJB) 3.1 Enterprise JavaBeans (EJB) 3.2
- Java Database Connectivity 4.0

Conforme vimos em aula, trata-se do JDBC, JSP e EJB!

Gabarito: B

11. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da
Informação) O Contêiner J2EE que fornece aos desenvolvedores o ambiente
para rodar Java Server Pages (JSPs) e servlets é:

a) Applet (Applet container).


b) Enterprise Java Beans (EJB).
c) Interface (Interface container).
d) do cliente do aplicativo (Application client container).
e) Web (Web container).

Comentários:

16712855225

Conforme vimos em aula, o Contêiner Web é o responsável por rodar JSP/Servlet!

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

12. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web) São apenas tipos de componentes executados em servidores Web:

a) Beans, Servlets e J2EE.


b) JVM, Servlets e JSP.
c) Beans, Servlets e JSP.
d) Beans, Swing e JSP.
e) Beans, Swing e JVM.

Comentários:

Conforme vimos em aula, JSP e Servlets são fáceis! E os beans? Pois é,


excepcionalmente eles podem ser executados em Servidores Web (Contêiner Web).

Gabarito: C

13. (FCC - 2014 – TRT/2 – Analista de Sistemas) Um contêiner Java EE pode oferecer
serviços como gestão de memória, ciclo de vida e estado de objetos, conexões,
transações, serviços de nomes, segurança, tolerância a falhas, integração,
16712855225

clustering, alta disponibilidade, confiabilidade e web services. Um servidor Java


EE completo disponibiliza dois tipos principais de contêiner, que são:

a) Contêiner MVC e Contêiner EJB.


b) Applet Container e Web Container.
c) Contêiner Web e Contêiner EJB.
d) Servlet Container e JSP Container.
e) Application Client Container e Web Container.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, disponibiliza o Contêiner Web e Contêiner EJB!

Gabarito: C

14. (FCC – 2012 – TJ/PE – Analista de Sistemas) Sobre a plataforma Java EE 6, é


correto afirmar:

a) Simplifica a implantação sem a necessidade de descritores de implantação,


com exceção do descritor de implantação exigido pela especificação servlet, o
arquivo web.xml.

b) Necessita do descritor de implantação ejb-jar.xml e entradas relacionadas aos


web services no arquivo web.xml.

c) Faz uso de anotações (annotations). Anotações são modificadores Java,


semelhantes aos públicos e privados, que devem ser especificados nos arquivos
de configuração XML.

d) A especificação EJB 3, que é um subconjunto da especificação Java EE, define


16712855225

anotações apenas para o tipo bean.

e) Anotações são marcados com um caracter # (cerquilha).

Comentários:

(a) Correto. Pessoal, a plataforma Java EE realmente simplifica a implantação


removendo a necessidade de descritores de implantação, mas há uma exceção: o
arquivo web.xml;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(b) Descritores de implantação, como o ejb-jar.xml e entradas relacionadas aos Web


services no web.xml, já estão obsoletos – não se usa mais!

(c) A Plataforma Java EE utiliza Anotações, que são modificadores Java, semelhantes
aos públicos e privados. No entanto, eles são especificados no código!

(d) Ele define anotações para o tipo Bean, tipo de Interface, referências de recurso,
atributos de transação, segurança, etc;

(e) Essa ele entregou! Anotações são marcados com @.

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

JAVA SERVER PAGES (JSP)

Primeiro, o que é JSP? É uma tecnologia da plataforma Java Enterprise Edition (Java
EE) que permite utilizar ou o código Java dentro das páginas web ou tags que
realizam sua lógica. Por ser tecnologia Java, seus objetos são definidos segundo
define a linguagem, i.e., podendo utilizar todos os seus recursos, tais como
modificadores de acesso, tratamento de exceções, entre outros.

Galera, trata-se de uma tecnologia para geração de documentos baseados em texto


e executados do lado do servidor (assim como Servlets). Professor, como assim
texto? Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou
pode ser um conjunto de elementos JSP e tags customizadas, que definem como a
página construirá conteúdo dinâmico.

Professor, como funciona esse tal de JSP? Cara, Páginas JSP utilizam tags XML e
Scriplets escritos em Java para encapsular a lógica que gera o conteúdo para a
página web. Ele separa a lógica do conteúdo da sua apresentação. Páginas JSP são
compiladas em Servlets e podem chamar beans a fim de executar o processamento
no servidor. Espera, professor! Como assim são compiladas em Servlets?

Cara, Páginas JSP tipicamente se tornam uma Servlet! Vocês podem me perguntar:
Por que, então, precisamos da tecnologia JSP se já temos a tecnologia de Servlets?
Teoricamente, é possível escrever apenas Servlets para desenvolver suas aplicações
web. No entanto, a Tecnologia JSP foi desenhada para simplificar o processo de
criação de páginas ao separar a apresentação do conteúdo.

Em muitas aplicações, a resposta enviada ao cliente é a combinação dos dados de


16712855225

apresentação (template) com dados de conteúdo gerados dinamicamente. Nesse


caso, é muito mais fácil trabalhar com Páginas JSP do que fazer tudo com Servlets.
Galera, basta pensar nos conceitos de coesão, acoplamento e modularidade. Vocês
entenderam a sacada do negócio?

É mais simples, organizado e legível utilizar uma tecnologia para fazer a


apresentação e outra para gerar dados dinamicamente – assim, mantém-se a
divisão de responsabilidades, a independência entre os módulos, entre outros
benefícios. Você ainda não entendeu? Acho que sei como fazer isso entrar na sua
cabeça: vamos ver agora uma Servlet e uma Página JSP!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04
Arquivo: HelloWorld.jsp (No MVC, em geral, é utilizada como Visão)

<html>
<head>
<title>
<%="Hello World"%>
</title>
</head>
<body>
<%out.println("Hello Again!");%>
</body>
</html>

Arquivo: HelloWorld.java (No MVC, em geral, utilizada como Controladora)

//Definições e importações.

public void doGet(HttpServletRequest request, HttpServletResponse response) throws


IOException, ServletException {
Writer out = response.getWriter();

out.println("<html><head><title>");
out.println("HelloWorld");
out.println("</title></head><body>");
out.println("HelloAgain");
out.println("</body></html>");
out.flush();
out.close();
}

Galera, esses códigos são semelhantes: o primeiro é uma Página JSP (Arquivo .jsp
ou .jspx4) e o segundo é uma Servlet (Arquivo .java). Vocês percebem que no primeiro
código nós temos código HTML com algumas coisas de Java? Já no segundo nós
temos Java com algumas coisas de HTML? Vejam como é chato escrever o segundo
código – é preciso colocar as tags HTML dentro das funções de escrita do Java.

Já imaginaram que insuportável fazer isso para arquivos muito grandes? Pois é, JSP
16712855225

torna possível desenvolver aplicações web sem ter que escrever todo código
estático dentro de servlets. Professor, eu posso ter uma Página JSP sem nenhum
código Java? Claro, não é obrigatório ter código Java, no entanto é ele quem permite
suportar comportamento dinâmico em páginas web.

Outra desvantagem importante é que o programador, além de ser bom em Java,


tem que ser bom em Web Design! No entanto, quando ele está escrevendo o
código Java, ele não possui as ferramentas de Web Design! O JSP permite ess

4
.jspx refere-se ao Arquivo JSP que obedecer às regras de formação do XML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

separação, i.e., os Desenvolvedores Java criam as Servlets (Lógica de Negócio) e os


Web Designers criam as Páginas JSP (Lógica de Apresentação)!5 Bacana?

Um grande benefício dessa tecnologia é a integração com HTML! Galera, HTML é


uma linguagem amplamente conhecida e estudada! Portanto, facilita a criação de
páginas web dinâmicas tendo que, posteriormente, apenas embutir o código Java!
O que isso significa? Significa que, quando o código Java for executado, parte da
página será gerada em tempo de execução (dinamismo).

Além da perfeita integração com HTML, Páginas JSP também oferecem modos de
manipulação de arquivos texto (Ex: PDF, DOCX, etc); suportam criptografia de
dados; suportam a utilização de cookies e sessões; suportam a manipulação de
Arquivos XML; suportam diversos bancos de dados e sistemas de relatórios;
possuem baixo custo de aprendizagem; entre outras vantagens.

Em suma: JSP é uma linguagem de script server-side com especificação aberta cujo
principal objetivo é a geração simples, prática e rápida de conteúdo dinâmico para
páginas web. É uma tecnologia que possui o suporte de vários servidores, tais como:
Tomcat, GlassFish, JBoss, entre outros. Ela define a interação entre Servidor e Página
JSP, e descreve o formato e sintaxe da página. Vamos ver como tudo funciona?

Bem, lá em cima eu disse que Páginas JSP tipicamente se tornam uma Servlet! Como
assim, professor? Em relação a Servlets, processamento da Página JSP passa por
uma camada adicional em que a página é compilada e transformada em uma
Servlet no Servidor Web. Simples, não?! Se vocês possuem uma página .html,
renomeiem-a para .jsp e coloquem-na em um Servidor Web.

Ao fazer isso, a página é automaticamente transformada em uma Servlet! No


primeiro acesso, a compilação é realizada. Nos acessos subsequentes, a requisição
16712855225

é redirecionada para a Servlet que foi gerada anteriormente. Quando o arquivo


.html se transforma em um arquivo .jsp, ele já pode conter scriplets, diretivas,
expressões, etc. Entendido?

A partir daí, o ciclo de vida é exatamente igual ao de uma Servlet, porém com
métodos diferentes (apesar de semelhantes). Agora que tal vermos em detalhes um
pouco sobre a sintaxe da nossa linguagem, i.e., declarações, expressões, scriplets,
comentários, ações e diretivas. Antes de partir para as sintaxes, vamos ver um pouco
sobre os objetos implícitos!
5
Antes, para cada mudança no Código HTML, uma recompilação da servlet era necessária. Para fazer essa
separação que foi criada a Tecnologia JSP.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Galera, objetos implícitos são os objetos que são criados de forma automática pelo
Contêiner JSP e posteriormente disponibilizados para os desenvolvedores, de
maneira que eles não precisam ser instanciados explicitamente. No JSP, existem
nove: request, response, pageContext, application, out, config, page, session e
exception. Em seguida, veremos a sintaxe da linguagem!

OBJETO DESCRIÇÃO

request Objeto do tipo HttpServletRequest e contém a informação do pedido HTTP.

response Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada
ao cliente. Não é usado com frequência.
pageContext Objeto do tipo PageContext e contém informações de contexto para execução da
página.
application Objeto do tipo ServletContext que permite compartilhar informações entre todos os
componentes web da aplicação.
out Objeto da classe JspWriter que permite imprimir para o response através do
método println.
config Objeto do tipo ServletConfig da página JSP.

page Sinônimo do operador “this” do objeto HttpJspPage. Não é usado com frequência.

session Objeto do tipo HttpSession que guarda informações da sessão de um usuário


específico entre múltiplas requisições.
exception É o objeto Throwable que é resultante de uma situação de erro numa página JSP.

DECLARAÇÕES
16712855225

Galera, Declarações são similares às declarações em Java e definem variáveis,


objetos e métodos para uso subsequente em expressões ou scriplets. Alguns alunos
me perguntam como eu decoro isso! Bem, a declaração declara! Declara o quê?
Variáveis! Como? Com ponto de exclamação. Quando eu gosto de enfatizar uma
declaração, eu uso um ponto de exclamação! No JSP, é similar...

//Declarações JSP

<%! public final static String[] estacoes = {"Primavera", "Verão", "Outono",


"Inverno"} %>

EXPRESSÕES

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Expressões retornam valores que são inseridos dinamicamente na página no lugar


da expressão, i.e., toda expressão é avaliada, executada, convertida em uma string
e inserida no local onde aparece a expressão no Arquivo JSP. Falando de outra
maneira: expressões são utilizadas para embutir o resultado da avaliação de uma
expressão na Página JSP. Detalhe: não se termina a expressão com ponto-e-vírgula!

O valor é convertido em um objeto string e inserido no objeto implícito out. Esse


objeto tem escopo de página e permite acessar o fluxo de saída da Servlet. Como
você decorava isso, professor? Bem, eu me lembrava de expressões matemáticas!
Por que? Porque, assim como as Expressões JSP, elas geralmente possuem o sinal
de igualdade (=). Expressões são similares a Scriplets!

//Expressões JSP

<%= idade = idade + 1 %>


<%= "Esse é seu aniversário de " + idade + "anos" %>

SCRIPLETS

Scriplets são importantíssimos e, de todos, é facilmente o que mais cai em prova6!


Trata-se de blocos de Código Java embutidos em uma Página JSP. Qualquer código
válido na linguagem Java pode ser inserido em um scriplet! Galera, como eu
decorava isso? É o mais simples: é o único que não possui nada após o sinal de
porcentagem.

Quando transformamos Páginas JSP em Servlets, tudo aquilo que for scriplet é
traduzido para chamadas out.println() no método _jspService da servlet gerada. A
variável de uma linguagem de programação criada dentro de um scriplet pode ser
acessada de qualquer lugar dentro da Página JSP. Dentro das scriplets, estamos
16712855225

lidando com Java. Abaixo a instrução manda escrever “Bem vindo!”.

Vocês se lembram que eu falei que expressões são similares a scriplets? Pois é,
expressão <% expressão %> equivale a out.println(expressão), visto que o valor da
expressão é convertido em uma string e inserido no objeto implícito out. A partir
daí, funciona como um scriplet <% out.println(expressão) %>. Entenderam agora a
similaridade entre ambos? ;)

//Scriplets JSP

6
Apesar disso, hoje em dia, é considerado má prática utilizar Scriplets em Páginas JSP.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04
<html>
<body>
<% String mensagem = "Bem vindo!"; %>
<% out.println(mensagem); %>
</body>
</html>

COMENTÁRIOS

Comentários não mudam muito em relação a outras linguagens. Eles são


completamente ignorados pelo tradutor da página e, nesse caso, possui uma sintaxe
bastante parecida com a da Linguagem HTML. Enfim, eles servem apenas para
ajudar o desenvolvedor e em nada interferem na página que o cliente visualiza! Há
duas maneiras de se fazer um comentário:

//Comentários JSP

<%-- Comentário JSP --%> // Em HTML, seria: <!-- Comentário HTML -->

AÇÕES

Ações permitem acessar e alterar regras de negócio por meio das propriedades de
JavaBeans7. Ademais, disponibilizam comando para redirecionamento de
Requisições JSP para outra Servlet ou Página JSP. Esse também é tranquilo de
decorar, porque é o único que utiliza a sigla jsp. Professor, você pode dar um exemplo
de Ação JSP? Claro, meu querido! Temos vinte delas:

JSP :USE BEAN JSP :PARAM JSP :INVOQUE JSP :OUTPUT


JSP :SETPROPERTY JSP :FALLBACK JSP :DOBODY JSP :ROOT
JSP :GETPROPERTY JSP :TEXT JSP :ELEMENTO JSP :DECLARATION
JSP :INCLUDE JSP :PLUGIN JSP :BODY JSP :SCRIPLET
JSP :FORWARD JSP :PARAMS JSP :ATTIBUTE JSP :EXPRESSION
16712855225

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações


mais famosas e conhecidas são:

 jsp:include: usada para inserir conteúdo dinâmico em tempo de solicitação;


 jsp:forward: usada para redirecionar requisições para outra Página JSP;
 jsp:param: usada para passar parâmetros para outra Ação JSP;

7
JavaBeans são componentes reutilizáveis de software que podem ser manipulados visualmente com a ajuda
de uma ferramenta de desenvolvimento.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

 jsp:useBean: usada quando se deseja invocar/instanciar um JavaBean 8;


 jsp:plugin: usada para executar e mostrar um objeto (Ex: Applet) no browser.
 jsp:setProperty: usada para setar o valor da propriedade de um JavaBean;
 jsp:getProperty: usada para recuperar o valor da propriedade de um JavaBean.

//Ações JSP

<jsp: useBean id="user" scope="session" type="org.apache.struts"/>

DIRETIVAS

Diretivas são instruções enviadas ao servidor contendo informações que definam


algum procedimento para o processo de compilação da página. Em outras palavras,
podemos dizer que são instruções processadas quando a Página JSP é compilada
em uma Servlet. As Diretivas são utilizadas para importar classes de um pacote,
inserir dados de arquivos externos e habilitar o uso de bibliotecas de tags.

Ao compilar uma Página JSP em uma Servlet, essas instruções podem afetar sua
estrutura, no entanto não criam nenhuma saída visível. Ademais, são interpretadas
pelo contêiner antes mesmo de qualquer elemento! Existem três diretivas principais:

 page – define atributos de configuração da Página JSP.

ATRIBUTO PROPÓSITO

buffer Especifica o modelo de buffering da saída padrão.


autoFlush Controla o comportamento da saída padrão da Servlet.
contentType Define a codificação de caracteres e media type (MIME)
errorPage Define a URL de outro JSP que reporta exceções.
16712855225

isErrorPage Indica se a Página JSP possui URL de outra página.


Extends Especifica uma superclasse a ser estendida pela servlet.
Import Especifica uma lista de pacotes ou classes importadas.
Info Define uma string que pode ser acessada para informações.
isThreadSafe Define se a servlet é capaz de atender múltiplas solicitações.
language Define a linguagem de programação utilizada.
Session Especifica se a Página JSP participa de Sessões HTTP.
isELIgnored Especifica se Linguagens de Expressão serão ignoradas.
isScriptingEnabled Determina se elementos de script são permitidos.

8
Ele ajuda a localizar a instanciar Componentes JavaBean. Dessa forma, não é necessário instanciar
explicitamente um objeto da classe para acessar seus métodos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04
//Diretiva PAGE

<%@ page import = "java.swing.*" %>

// Page pode usar 11 atributos: Info; Language; ContentType; Extends; Import;


Session; Buffer; AutoFlush; isThreadSafe; errorPage; isErrorPage.

 include – inclui recursos estáticos em uma Página JSP.

//Diretiva INCLUDE

<%@ include file = "teste.jsp" %>

 taglib – estende o conjunto de tags através de uma biblioteca de tags.

//Diretiva TAGLIB

<%@ taglib uri = "http://serlets.com/testes" prefix = "ops" %>

COMPONENTES EM INGLÊS SINTAXE

Declarações Declarations <%! ... %>


Expressões Expressions <%= Expressão %>
Scriplets Scriplets <% Scriplet %>
Comentários Comments <%-- Comentário --%>
Ações Actions <jsp: Ação />
Diretivas Directives <%@ Diretiva %>

Por fim, vamos falar um pouquinho sobre Expression Language! Como vimos,
podemos utilizar Scriplets e Expressões para recuperar atributos e parâmetros em
16712855225

Páginas JSP por meio de Código Java e utilizá-los para propósitos de Apresentação
(ou Visão). No entanto – para Web Designers –, Código Java é difícil de entender e
foi para isso que foi criada a Expression Language9!

Desenvolvida pela Sun, ela é interpretada pelo Servlet Container e busca remover
um pouco do Código Java que fica na Página JSP. Agora Web Designers pode
recuperar atributos e parâmetros facilmente utilizando tags HTML-like. Em geral,
quando se especifica o valor de um atributo em uma tag JSP, simplesmente utiliza-
se uma string, como é mostrado abaixo:

9
O JSP 2.1 trouxe suporte a Unified Expression Language (UEL), que representa a união da linguagem de
expressão oferecida pelo JSP 2.0 e a criada linguagem de expressão criada para o JSF.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

<jsp:setProperty name="cubo" property="perimetro" value="120"/>

O exemplo apresentado acima apresenta algumas propriedades de um


Componente JavaBean, de forma que um Cubo possui um Perímetro de 120
unidades de medida (Ex: Centímetro). Uma JSP Expression Language (JSPEL) permite
especificar uma expressão para qualquer um desses valores de atributos mostrados
acima. Uma sintaxe simples é:

${expressão}

Os operadores mais comuns do JSPEL são “.” e “[ ]”. Esses dois operadores (ponto
e colchetes) permitem acessar diversas atributos de Componentes JavaBeans. Por
exemplo, poderíamos escrever a primeira expressão da maneira mostrada abaixo!
Quando o Compilador JSP encontrar a forma ${...} em um atributo, ele gerará
código para avaliar a expressão e substituir seu valor.

<jsp:setProperty name="cubo" property="aresta" value="10"/>


<jsp:setProperty name="cubo" property="perimetro" value="${12*cubo.aresta}"/>

Vejam que o Valor do Perímetro do Cubo é dado pela expressão contida em value
presente na segunda linha. O operador Ponto permite acessar o valor da
propriedade aresta do JavaBeans cubo e disso, seu valor continua sendo 120
unidades de medida. No entanto, o Operador Colchetes é mais poderoso, visto que
pode recuperar dados de listas, vetores e mapas. Vejamos abaixo:

${Lista[1]}
Lista // É exatamente igual ao anterior

Lista Carro
${Lista.Carro} // É exatamente igual ao anterior
16712855225

A JSPEL suporta a maioria dos operadores aritméticos e lógicos do Java, além de


muitos outros. Além disso, ela é baseada em propriedades aninhadas e coleções;
operadores relacionais, lógicos e aritméticos, funções estendidas de mapeamento
em métodos estáticos de Classes Java; e um conjunto de objetos implícitos.
Ademais, podem ser usados em textos estáticos e atributos de tags.

Professor, o que é esse negócio vermelho do último parágrafo? Cara, JSPEL permite
a definição de funções (por meio de tags personalizadas) que podem ser chamadas
em uma expressão. Para tal, deve-se definir o método da classe que realiza a função

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

como público e estático. Em seguida, deve-se mapear o nome da função no Tag


Library Descriptors (TLD, ou Descritor de Biblioteca de Tags).

Por fim, devemos utilizar a Diretiva Taglib para importar a Biblioteca de Tags
personalizada que agora contém essa função e invocá-la pelo seu prefixo. Professor,
o nome do método público que realiza a função deve ser o mesmo nome da própria
função? Não é obrigatório! A função pode se chamar Multiplica e o método que a
realiza se chamar Divida – sem nenhum problema.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE – 2013 – CNJ – Analista de Sistemas Como forma de incluir dinamismo


em páginas JSP, é possível incluir blocos de código Java conhecidos como
scriptlets.

Comentários:

Scriplets são importantíssimos e, de todos, é facilmente o que mais cai em prova!


Trata-se de blocos de Código Java embutidos em uma Página JSP. Qualquer código
válido na linguagem Java pode ser inserido em um scriplet! Galera, como eu
decorava isso? É o mais simples: é o único que não possui nada após o sinal de
porcentagem.

Conforme vimos em aula, trata-se dos Scriplets.

Gabarito: C

(CESPE – 2011 – PREVIC – Analista de Sistemas O container JSP provê uma lista
de objetos instanciados, chamados de objetos implícitos. É através do objeto
aplicação (application object) que são rastreadas as informações de um cliente
específico entre múltiplas requisições.

Comentários:
16712855225

OBJETO DESCRIÇÃO

request Objeto do tipo HttpServletRequest e contém a informação do pedido HTTP.

response Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada
ao cliente. Não é usado com frequência.
pageContext Objeto do tipo PageContext e contém informações de contexto para execução da
página.
application Objeto do tipo ServletContext que permite compartilhar informações entre todos os
componentes web da aplicação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

out Objeto da classe JspWriter que permite imprimir para o response através do
método println.
config Objeto do tipo ServletConfig da página JSP.

page Sinônimo do operador “this” do objeto HttpJspPage. Não é usado com frequência.

session Objeto do tipo HttpSession que guarda informações da sessão de um usuário


específico entre múltiplas requisições.
exception É o objeto Throwable que é resultante de uma situação de erro numa página JSP.

Galera, olhem para as duas definições acima! A questão está se referindo ao Objeto
Application ou Session? Evidente que é o Session!

Gabarito: E

(CESPE – 2013 – TRT/10 – Analista de Sistemas Nas páginas JSP, combinam-se


modelos estáticos, incluindo fragmentos de HTML ou XML, com o código para
gerar conteúdo dinâmico e compilar páginas JSP dinamicamente em servlets,
quando solicitado.

Comentários:

Galera, trata-se de uma tecnologia para geração de documentos baseados em texto


e executados do lado do servidor (assim como Servlets). Professor, como assim texto?
Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser
um conjunto de elementos JSP e tags customizadas, que definem como a página
construirá conteúdo dinâmico.

Conforme vimos em aula, combina estático e dinâmico, compilando em servlets.


16712855225

Gabarito: C

(CESPE – 2013 – TRT/10 – Analista de Sistemas O JSP, cuja base é a linguagem


de programação Java, tem portabilidade de plataforma, o que o permite ser
executado em diversos sistemas operacionais, como o Windows e o Linux.

Comentários:

Primeiro, o que é JSP? É uma tecnologia da plataforma Java Enterprise Edition (Java
EE) que permite utilizar ou o código Java dentro das páginas web ou tags que

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

realizam sua lógica. Por ser tecnologia Java, seus objetos são definidos segundo define
a linguagem, i.e., podendo utilizar todos os seus recursos, tais como modificadores de
acesso, tratamento de exceções, entre outros.

Conforme vimos em aula, é uma Tecnologia Java! Logo, é portável e


multiplataforma, podendo ser executada em qualquer sistema operacional que
possua uma Java Virtual Machine (JVM).

Gabarito: C

(CESPE – 2013 – TRT/10 – Analista de Sistemas Para usar o JSP com Java
embutido e algumas tags de marcação complexas, o programador tem de
conhecer a fundo as complexidades do desenvolvimento de aplicações.

Comentários:

Conhecer a fundo as complexidades do desenvolvimento de aplicações? Galera, quem


hoje em dia conhece a fundo o desenvolvimento de aplicações? Nós estamos em uma
era de especialização e componentização, ou seja, cada um é especialista em uma
área. O programador deve conhecer bem JSP e, não, os meandros de todo
desenvolvimento de aplicações. Não faz sentido dizer que ele precisa conhecer a
fundo as complexidades do desenvolvimento de aplicações.

Gabarito: E

(CESPE - 2013 - SERPRO - Analista - Suporte Técnico Um scriptlet na tecnologia


JSP (Java server pages) abrange todo o código entre "<#" e "#>".

Comentários: 16712855225

COMPONENTES EM INGLÊS SINTAXE

Declarações Declarations <%! ... %>


Expressões Expressions <%= Expressão %>
Scriplets Scriplets <% Scriplet %>
Comentários Comments <%-- Comentário --%>
Ações Actions <jsp: Ação />
Diretivas Directives <%@ Diretiva %>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, scriplets vem entre “<%” e “%>”.

Gabarito: E

(CESPE - 2011 - CBM-DF - Oficial Bombeiro Militar Complementar - Informática


O uso de Javabeans, o controle de transferência entre as páginas e o suporte
independente de applets Java pelos browsers são possibilidades proporcionadas
pela action tag da JSP.

Comentários:

JSP :USE BEAN JSP :PARAM JSP :INVOQUE JSP :OUTPUT


JSP :SETPROPERTY JSP :FALLBACK JSP :DOBODY JSP :ROOT
JSP :GETPROPERTY JSP :TEXT JSP :ELEMENTO JSP :DECLARATION
JSP :INCLUDE JSP :PLUGIN JSP :BODY JSP :SCRIPLET
JSP :FORWARD JSP :PARAMS JSP :ATTIBUTE JSP :EXPRESSION

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações


mais famosas e conhecidas são: (...)

 jsp:useBean: usada quando se deseja invocar/instanciar um JavaBean;


 jsp:plugin: usada para executar e mostrar um objeto (Ex: Applet) no browser.

Conforme vimos em aula, temos: jsp:useBean (para uso de javabeans); jsp:forward


(para controle de transferência entre páginas); e jsp:plugin (para suporte a applets).

Gabarito: C

(CESPE - 2011 - PREVIC - Analista de Tecnologia da Informação Em uma


16712855225

aplicação multicamadas na plataforma Java EE, servlets, JavaServer Faces e JSP


consistem em tecnologias utilizadas na camada web.

Comentários:

Galera, todos eles são da Camada Web! A fonte oficial diz: “Java Servlet, JavaServer
Faces, and JavaServer Pages (JSP) technology components are web components that
run on the server”, conforme podemos ver na imagem abaixo:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) As tags


utilizadas em uma página JSP para importar classes de um pacote, habilitar o
uso de bibliotecas de classes (por exemplo, JSTL) e incluir arquivos (por exemplo,
JSP Fragments) são conhecidas como tags:

a) diretivas.
b) de scriptlet.
c) de declaração.
d) de expressão.
e) standard action.

Comentários:

Diretivas são instruções enviadas ao servidor contendo informações que definam


algum procedimento para o processo de compilação da página. Em outras palavras,
podemos dizer que são instruções processadas quando a Página JSP é compilada em
uma Servlet. As Diretivas são utilizadas para importar classes de um pacote, inserir
dados de arquivos externos e habilitar o uso de bibliotecas de tags.

Conforme vimos em aula, trata-se das Diretivas.

Gabarito: A
16712855225

(FCC - - PGE- - Técnico Superior de Análise de Sistemas e Métodos)


Blocos ou trechos de operações em código Java podem ser incluídos em uma
página JSP por meio de:

a) diretiva page.
b) diretiva include.
c) comentário.
d) taglib.
e) scriptlet.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Comentários:

Scriplets são importantíssimos e, de todos, é facilmente o que mais cai em prova!


Trata-se de blocos de Código Java embutidos em uma Página JSP. Qualquer código
válido na linguagem Java pode ser inserido em um scriplet! Galera, como eu
decorava isso? É o mais simples: é o único que não possui nada após o sinal de
porcentagem.

Conforme vimos em aula, trata-se das Scriplets.

Gabarito: E

(FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da


Informação Na diretiva page, do JSP, podemos utilizar o atributo import que
permite:

a) configurar arquivos html.


b) importar figuras.
c) configurar pacotes.
d) importar arquivos htm
e) importar pacotes.

Comentários:

ATRIBUTO PROPÓSITO

buffer Especifica o modelo de buffering da saída padrão.


autoFlush Controla o comportamento da saída padrão da Servlet.
16712855225

contentType Define a codificação de caracteres e media type (MIME)


errorPage Define a URL de outro JSP que reporta exceções.
isErrorPage Indica se a Página JSP possui URL de outra página.
Extends Especifica uma superclasse a ser estendida pela servlet.
Import Especifica uma lista de pacotes ou classes importadas.
Info Define uma string que pode ser acessada para informações.
isThreadSafe Define se a servlet é capaz de atender múltiplas solicitações.
language Define a linguagem de programação utilizada.
Session Especifica se a Página JSP participa de Sessões HTTP.
isELIgnored Especifica se Linguagens de Expressão serão ignoradas.
isScriptingEnabled Determina se elementos de script são permitidos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, ele especifica uma lista de pacotes ou classes importadas.

Gabarito: E

(FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da


Informação) Em JSP, a diretiva taglib define:

a) uma biblioteca de tags para serem usadas na página.


b) um conjunto de classes importadas para serem usadas na página.
c) uma nova tag para ser usada na página.
d) uma biblioteca para ser inserida na página.
e) um módulo logicamente coesivo.

Comentários:

 taglib – estende o conjunto de tags através de uma biblioteca de tags.

//Diretiva TAGLIB

<%@ taglib uri = "http://serlets.com/testes" prefix = "ops" %>

Conforme vimos em aula, a Diretiva Taglib estende o conjunto de tags através de


uma biblioteca de tags, similar ao que diz a primeira opção.

Gabarito: A

(FCC - 2008 - MPE-RS - Técnico em Informática - Área Sistemas) Para incluir


blocos de código Java em uma página JSP utiliza-se a categoria de tags
denominada: 16712855225

a) diretivas.
b) expressões.
c) declarações.
d) scriptlets.
e) comentários.

Comentários:

Scriplets são importantíssimos e, de todos, é facilmente o que mais cai em prova!


Trata-se de blocos de Código Java embutidos em uma Página JSP. Qualquer código

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

válido na linguagem Java pode ser inserido em um scriplet! Galera, como eu


decorava isso? É o mais simples: é o único que não possui nada após o sinal de
porcentagem.

Conforme vimos em aula, trata-se dos Scriplets.

Gabarito: D

(FCC - 2010 - METRÔ- - Analista - Tecnologia da Informação Na diretiva page,


do JSP, utiliza-se o atributo import, que permite:

a) configurar pacotes.
b) importar arquivos html.
c) importar pacotes.
d) configurar arquivos html.
e) importar figuras.

Comentários:

ATRIBUTO PROPÓSITO

buffer Especifica o modelo de buffering da saída padrão.


autoFlush Controla o comportamento da saída padrão da Servlet.
contentType Define a codificação de caracteres e media type (MIME)
errorPage Define a URL de outro JSP que reporta exceções.
isErrorPage Indica se a Página JSP possui URL de outra página.
Extends Especifica uma superclasse a ser estendida pela servlet.
Import Especifica uma lista de pacotes ou classes importadas.
Info Define uma string que pode ser acessada para informações.
16712855225

isThreadSafe Define se a servlet é capaz de atender múltiplas solicitações.


language Define a linguagem de programação utilizada.
Session Especifica se a Página JSP participa de Sessões HTTP.
isELIgnored Especifica se Linguagens de Expressão serão ignoradas.
isScriptingEnabled Determina se elementos de script são permitidos.

Conforme vimos em aula, ele especifica uma lista de pacotes ou classes importadas.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FCC - 2012 - TRE-SP - Técnico Judiciário - Programação de Sistemas No


JavaServer Pages a tag <%=conteúdo %> é uma:

a) Declaration tag.
b) Directive tag.
c) Scriplet tag.
d) Action tag.
e) Expression tag.

Comentários:

COMPONENTES EM INGLÊS SINTAXE

Declarações Declarations <%! ... %>


Expressões Expressions <%= Expressão %>
Scriplets Scriplets <% Scriplet %>
Comentários Comments <%-- Comentário --%>
Ações Actions <jsp: Ação />
Diretivas Directives <%@ Diretiva %>

Conforme vimos em aula, trata-se da Tag Expression!

Gabarito: E

(FCC - 2011 – TRE/AP – Analista de Sistemas – A) Em JSP o conceito de classes e


objetos não leva em conta os princípios de proteção de dados tanto nas
propriedades quanto nos métodos.

Comentários:
16712855225

Primeiro, o que é JSP? É uma tecnologia da plataforma Java Enterprise Edition (Java
EE) que permite utilizar ou o código Java dentro das páginas web ou tags que
realizam sua lógica. Por ser tecnologia Java, seus objetos são definidos segundo define
a linguagem, i.e., podendo utilizar todos os seus recursos, tais como modificadores de
acesso, tratamento de exceções, entre outros.

Conforme vimos em aula, leva – sim – em consideração.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FCC - 2011 – TRE/AP – Analista de Sistemas – C) Em JSP pode-se chamar o


construtor do objeto pai em qualquer parte do código e não há tratamento de
exceções nos métodos nativos.

Comentários:

Primeiro, o que é JSP? É uma tecnologia da plataforma Java Enterprise Edition (Java
EE) que permite utilizar ou o código Java dentro das páginas web ou tags que
realizam sua lógica. Por ser tecnologia Java, seus objetos são definidos segundo define
a linguagem, i.e., podendo utilizar todos os seus recursos, tais como modificadores de
acesso, tratamento de exceções, entre outros.

Conforme vimos em aula, é código java – sendo assim, pode-se chamar o construtor
do objeto pai, pode fazer uso de tratamento de exceções, etc.

Gabarito: E

10. (FCC - 2010 – MPU – Analista de Sistemas O contêiner, que executa JSP,
transforma o programa JSP em Servlet, assim, a expressão “<%=
Math.Random()%>” se torna argumento para out.println().

Comentários:

Expressões retornam valores que são inseridos dinamicamente na página no lugar da


expressão, i.e., toda expressão é avaliada, executada, convertida em uma string e
inserida no local onde aparece a expressão no Arquivo JSP. Falando de outra maneira:
expressões são utilizadas para embutir o resultado da avaliação de uma expressão
na Página JSP. Detalhe: não se termina a expressão com ponto-e-vírgula!
16712855225

Vocês se lembram que eu falei que expressões são similares a scriplets? Pois é,
expressão <% expressão %> equivale a out.println(expressão), visto que o valor da
expressão é convertido em uma string e inserido no objeto implícito out. A partir daí,
funciona como um scriplet <% out.println(expressão) %>. Entenderam agora a
similaridade entre ambos? ;)

Conforme visto em aula, a expressão Math.Random() será avaliada, executada,


convertida em uma string e inserida no local onde aparece a expressão no Arquivo
JSP. E, por essa razão, é considerada equivalente à Scriplet:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

out.println(Math.Random())

Gabarito: C

11. (FCC - 2011 – TRE/AP – Analista de Sistemas – A) Para que métodos estáticos de
classes Java sejam executados a partir das funções da linguagem de expressão
em JSP, é necessário que o nome da função coincida com o nome do método
da classe Java.

Comentários:

Por fim, devemos utilizar a Diretiva Taglib para importar a Biblioteca de Tags
personalizada que agora contém essa função e invocá-la pelo seu prefixo. Professor,
o nome do método público que realiza a função deve ser o mesmo nome da própria
função? Não é obrigatório! A função pode se chamar Multiplica e o método que a
realiza se chamar Divida – sem nenhum problema.

Conforme vimos em aula, não é obrigatório.

Gabarito: E

12. (FCC - 2009 – TCE/SP – Analista de Sistemas – A) Quando se usa classes do tipo
bean, não é necessário instanciar explicitamente um objeto da classe para poder
acessar seus métodos. A instância do objeto é criada pelo elemento especial:

a) <jsp:useJavaBean/>
b) <jsp:useJava/>
c) <jsp:useBean.Java/>
d) <jsp:useJava.Bean/> 16712855225

e) <jsp:useBean/>

Comentários:

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações


mais famosas e conhecidas são:

 jsp:include: usada para inserir conteúdo dinâmico em tempo de solicitação;


 jsp:forward: usada para redirecionar requisições para outra Página JSP;
 jsp:param: usada para passar parâmetros para outra Ação JSP;
 jsp:useBean: usada quando se deseja invocar/instanciar um JavaBean;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

 jsp:setProperty: usada para setar o valor da propriedade de um JavaBean;


 jsp:getProperty: usada para recuperar o valor da propriedade de um JavaBean.

Conforme vimos em aula, trata-se do <jsp:useBean>.

Gabarito: E

13. (FCC - – TCE/ – Analista de Sistema Nas páginas dinâmicas escritas em


JSP, para declaração de atributos ou métodos, utilizam-se as tags:

a) <% %>
b) <%! %>
c) <%= %>
d) <%-- --%>
e) /* */

Comentários:

COMPONENTES EM INGLÊS SINTAXE

Declarações Declarations <%! ... %>


Expressões Expressions <%= Expressão %>
Scriplets Scriplets <% Scriplet %>
Comentários Comments <%-- Comentário --%>
Ações Actions <jsp: Ação />
Diretivas Directives <%@ Diretiva %>

Declarações lembra...? Ponto de Exclamação!


16712855225

Gabarito: A

14. (FCC – 2012 – TST – Analista de Sistemas Páginas JavaServer Pages são páginas
web:

a) que permitem combinar códigos Java, HTML estático, CSS, XML e JavaScript.
b) escritas em Java, sem código HTML.
c) Interpretadas e não compiladas.
d) Transformadas em bytecode e executadas no cliente.
e) Combinadas com servlets no desenvolvimento exclusivo de páginas estáticas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Comentários:

Galera, trata-se de uma tecnologia para geração de documentos baseados em texto


e executados do lado do servidor (assim como Servlets). Professor, como assim texto?
Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser
um conjunto de elementos JSP e tags customizadas, que definem como a página
construirá conteúdo dinâmico.

Conforme vimos em aula, pode combinar Java, HTML, CSS, XML, Javascript. A
segunda opção está errada porque possui código HTML. A terceira opção está
errada porque páginas JSP são compiladas e interpretadas. A quarta opção está
errada porque são executadas no servidor. E, por fim, a última opção está errada
porque não é desenvolvimento exclusivo de páginas estáticas – seu foco é no
desenvolvimento de páginas dinâmicas.

Gabarito: A

15. (FCC – – TRT/3 – Analista de Sistemas NÃO possui uma habilidade de


armazenar e recuperar valores de atributos arbitrários o objeto implícito de JSP:

a) Session.
b) Request.
c) Exception.
d) Application.
e) pageContext.

Comentários:
16712855225

OBJETO DESCRIÇÃO

Request Objeto do tipo HttpServletRequest e contém a informação do pedido HTTP.

Response Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada
ao cliente. Não é usado com frequência.
pageContext Objeto do tipo PageContext e contém informações de contexto para execução da
página.
Application Objeto do tipo ServletContext que permite compartilhar informações entre todos os
componentes web da aplicação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Out Objeto da classe JspWriter que permite imprimir para o response através do
método println.
Config Objeto do tipo ServletConfig da página JSP.

Page Sinônimo do operador “this” do objeto HttpJspPage. Não é usado com frequência.

Session Objeto do tipo HttpSession que guarda informações da sessão de um usuário


específico entre múltiplas requisições.
Exception É o objeto Throwable que é resultante de uma situação de erro numa página JSP.

Observem que todos eles manipulam informações (atributos arbitrários), exceto o


Objeto Exception, que apenas retorna erros.

Gabarito: C

16. (FCC – 2007 – TRF/4 – Analista de Sistemas Uma ferramenta usada


especificamente para gerar páginas dinâmicas de HTML, baseada em
programação Java, é:

a) o WSDL.
b) o DTD.
c) a JCP.
d) a XSL.
e) o JSP.

Comentários:

Galera, trata-se de uma tecnologia para geração de documentos baseados em texto


e executados do lado do servidor (assim como Servlets). Professor, como assim texto?
16712855225

Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser
um conjunto de elementos JSP e tags customizadas, que definem como a página
construirá conteúdo dinâmico.

Sabe aquelas questões que você não pode errar de tão fácil? Ei-la!

Gabarito: E

17. (FCC – 2013 – ALERN – Analista de Sistemas) Em uma aplicação web


desenvolvida utilizando a plataforma Java EE 6, há a seguinte classe Java:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04
package dados;

public class Cliente {


private String nome;
public Cliente() {
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}

Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe
pode-se utilizar a tag:

a) <jsp:setBean name="cliente" class="dados.Cliente"/>


b) <jsp:setBean id="cliente" class="dados.Cliente"/>
c) <jsp:useBean name="cliente" class="dados.Cliente"/>
d) <jsp:useBean id="cliente" class="dados.Cliente"/>
e) <jsp:newInstance id="cliente" class= "dados.Cliente"/>

Comentários:

JSP :USE BEAN JSP :PARAM JSP :INVOQUE JSP :OUTPUT


JSP :SETPROPERTY JSP :FALLBACK JSP :DOBODY JSP :ROOT
JSP :GETPROPERTY JSP :TEXT JSP :ELEMENTO JSP :DECLARATION
JSP :INCLUDE JSP :PLUGIN JSP :BODY JSP :SCRIPLET
JSP :FORWARD JSP :PARAMS JSP :ATTIBUTE JSP :EXPRESSION

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações


mais famosas e conhecidas são: (...) 16712855225

 jsp:useBean: usada quando se deseja invocar/instanciar um JavaBean;

//Ações JSP - Exemplo

<jsp: useBean id="user" scope="session" type="org.apache.struts"/>

Conforme vimos em aula, trata-se da penúltima opção.

Gabarito: D

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

18. (FCC - 2012 - MPE-PE - Analista Ministerial - Informática Em uma aplicação web
Java que utiliza JSP, as linhas de código comuns a diversas páginas podem ser
criadas em um arquivo ..I.. , que pode ser incluído nas páginas utilizando-se a
diretiva ..II.. .

As lacunas I e II são preenchidas correta e respectivamente por

a) I. Javascript, <%@page
II. file="caminho/nome_do_arquivo"%>.
b) I. Java Servlet, <%@include
II. uri="caminho/nome_do_arquivo"%>.
c) I. JSTL, <%@taglib
II. uri="caminho/nome_do_arquivo"%>.
d) I. JSF, <%@page
II. import="caminho/nome_do_arquivo%>.
e) I. JSPF, <%@include
II. file="caminho/nome_do_arquivo"%>.

Comentários:

 include – inclui recursos estáticos em uma Página JSP.

//Diretiva INCLUDE

<%@ include file = "teste.jsp" %>

Professor, que raios é esse JSPF? Cara, não se assuste! É apenas o nome dado a um
fragmento de JSP que é inserido em outro JSP. E que diretiva pode ser utilizada para
inserir um recurso em uma Página JSP? @include.
16712855225

barito: E

19. (FCC - 2012 - MPE-PE - Analista - Tecnologia da Informação) Em uma página


JSP, para importar uma classe de um pacote e para fazer referência a uma
biblioteca (como, por exemplo, JSTL) podem ser utilizadas, respectivamente, as
diretivas:

a) <%@page import=“pacote.Classe”%> e <%@taglib uri=“caminho/biblioteca”


prefix=“prefixo”%>.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

b) <%@include import= “pacote.Classe”%> e <%@taglib


uri=“caminho/biblioteca”%>.
c) <%import= “pacote.Classe”%> e <%taglib uri=“caminho/biblioteca”%>.
d) <%@page include= “pacote.Classe”%> e <%@library
uri=“caminho/biblioteca”%>.
e) <%@import class= “pacote.Classe”%> e <%@taglib
urli=“caminho/biblioteca”%>.

Comentários:

 page – define atributos de configuração da Página JSP.

ATRIBUTO PROPÓSITO

buffer Especifica o modelo de buffering da saída padrão.


autoFlush Controla o comportamento da saída padrão da Servlet.
contentType Define a codificação de caracteres e media type (MIME)
errorPage Define a URL de outro JSP que reporta exceções.
isErrorPage Indica se a Página JSP possui URL de outra página.
Extends Especifica uma superclasse a ser estendida pela servlet.
Import Especifica uma lista de pacotes ou classes importadas.
Info Define uma string que pode ser acessada para informações.
isThreadSafe Define se a servlet é capaz de atender múltiplas solicitações.
language Define a linguagem de programação utilizada.
Session Especifica se a Página JSP participa de Sessões HTTP.
isELIgnored Especifica se Linguagens de Expressão serão ignoradas.
isScriptingEnabled Determina se elementos de script são permitidos.

 taglib – estende o conjunto de tags através de uma biblioteca de tags.


16712855225

Conforme vimos em aula, podemos usar a Diretiva page com o Atributo import e a
Diretiva taglib.

Gabarito: A

(FCC - 2012 - TRE- - alista Judiciário - Análise de Sistemas <%@ page


atributo1="valor1" atributo2="valor2"... %> é a sintaxe típica da diretiva Page, em
JSP. Um de seus atributos, se definido para true, indica o processamento normal
do servlet quando múltiplas requisições podem ser acessadas simultaneamente
na mesma instância de servlet. Trata-se do atributo:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

a) Extends.
b) Import.
c) isThreadSafe.
d) Session.
e) AutoFlush.

Comentários:

ATRIBUTO PROPÓSITO

buffer Especifica o modelo de buffering da saída padrão.


autoFlush Controla o comportamento da saída padrão da Servlet.
contentType Define a codificação de caracteres e media type (MIME)
errorPage Define a URL de outro JSP que reporta exceções.
isErrorPage Indica se a Página JSP possui URL de outra página.
Extends Especifica uma superclasse a ser estendida pela servlet.
Import Especifica uma lista de pacotes ou classes importadas.
Info Define uma string que pode ser acessada para informações.
isThreadSafe Define se a servlet é capaz de atender múltiplas solicitações.
language Define a linguagem de programação utilizada.
Session Especifica se a Página JSP participa de Sessões HTTP.
isELIgnored Especifica se Linguagens de Expressão serão ignoradas.
isScriptingEnabled Determina se elementos de script são permitidos.

Conforme vimos em aula, trata-se do atributo isThreadSafe.

Gabarito: C
16712855225

21. (FCC - - MPE-RS - Técnico em Informática - Área Sistemas) Se uma super


classe de servlet deve ser gerada, será definida na diretiva page do JSP por meio
do atributo:

a) info.
b) extends.
c) session.
d) import.
e) autoFlush.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

ATRIBUTO PROPÓSITO

buffer Especifica o modelo de buffering da saída padrão.


autoFlush Controla o comportamento da saída padrão da Servlet.
contentType Define a codificação de caracteres e media type (MIME)
errorPage Define a URL de outro JSP que reporta exceções.
isErrorPage Indica se a Página JSP possui URL de outra página.
Extends Especifica uma superclasse a ser estendida pela servlet.
Import Especifica uma lista de pacotes ou classes importadas.
Info Define uma string que pode ser acessada para informações.
isThreadSafe Define se a servlet é capaz de atender múltiplas solicitações.
language Define a linguagem de programação utilizada.
Session Especifica se a Página JSP participa de Sessões HTTP.
isELIgnored Especifica se Linguagens de Expressão serão ignoradas.
isScriptingEnabled Determina se elementos de script são permitidos.

Conforme vimos em aula, trata-se do Atributo Extends.

Gabarito: B

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FGV - – Senado Federal – Analista de Sistemas) No contexto do


Desenvolvimento WEB JAVA, analise as afirmativas a seguir, a respeito da
tecnologia JSP ("JavaServer Page"):

I. Disponibiliza uma tecnologia simples e rápida para criar páginas que exibem
conteúdo gerado dinamicamente, define a interação entre o servidor e a página
JSP, e descreve o formato e sintaxe da página.

II. Emprega servlets - programas escritos na linguagem Java e executados no


servidor, em oposição aos applets, executados no browser do cliente.

III. Utiliza páginas JSP, com extensão .jsp ou .jspx, criadas pelo desenvolvedor da
web e que incluem especificações JSP e tags customizadas, em combinação com
outras tags estáticas, HTML ou XML.

Assinale:

a) se somente a afirmativa I estiver correta.


b) se somente as afirmativas I e II estiverem corretas.
c) se somente as afirmativas I e III estiverem corretas.
d) se somente as afirmativas II e III estiverem corretas.
e) se todas as afirmativas estiverem corretas.
16712855225

Comentários:

I.

Em suma: JSP é uma linguagem de script server-side com especificação aberta cujo
principal objetivo é a geração simples, prática e rápida de conteúdo dinâmico para
páginas web. É uma tecnologia que possui o suporte de vários servidores, tais como:
Tomcat, GlassFish, JBoss, entre outros. Ela define a interação entre Servidor e Página
JSP, e descreve o formato e sintaxe da página. Vamos ver como tudo funciona?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Foi considerada errada. Eu discordo do gabarito, assim como a Documentação


oficial da Oracle, que ratifica o que foi dito em aula.

II.

Professor, como funciona esse tal de JSP? Cara, Páginas JSP utilizam tags XML e
Scriplets escritos em Java para encapsular a lógica que gera o conteúdo para a página
web. Ele separa a lógica do conteúdo da sua apresentação. Páginas JSP são
compiladas em Servlets e podem chamar beans a fim de executar o processamento
no servidor. Espera, professor! Como assim são compiladas em Servlets?

Perfeito, empregam Servlets (executadas no Servidor) em oposição às Applets


(executadas no cliente).

III.

Galera, esses códigos são semelhantes: o primeiro é uma Página JSP (Arquivo .jsp ou
.jspx) e o segundo é uma Servlet (Arquivo .java). Vocês percebem que no primeiro
código nós temos código HTML com algumas coisas de Java? Já no segundo nós
temos Java com algumas coisas de HTML? Vejam como é chato escrever o segundo
código – é preciso colocar as tags HTML dentro das funções de escrita do Java.

Galera, trata-se de uma tecnologia para geração de documentos baseados em texto


e executados do lado do servidor (assim como Servlets). Professor, como assim texto?
Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser
um conjunto de elementos JSP e tags customizadas, que definem como a página
construirá conteúdo dinâmico.

Conforme visto em aula, está perfeito. 16712855225

Gabarito: D

(CESGRANRIO – 2010 – BNDES – Analista de Sistemas É característica de um


arquivo JSP a:

a) compilação em um servlet.
b) presença maciça de código Assembly.
c) impossibilidade de inclusão de comentários.
d) execução exclusiva em sistemas Windows.
e) execução exclusiva em sistemas Linux.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Comentários:

Professor, como funciona esse tal de JSP? Cara, Páginas JSP utilizam tags XML e
Scriplets escritos em Java para encapsular a lógica que gera o conteúdo para a página
web. Ele separa a lógica do conteúdo da sua apresentação. Páginas JSP são
compiladas em Servlets e podem chamar beans a fim de executar o processamento
no servidor. Espera, professor! Como assim são compiladas em Servlets?

Conforme vimos em aula, Páginas JSP são compiladas em Servlets.

Gabarito: A

(NCE – – BNDES – Analista de Sistemas Considere as seguintes afirmativas


sobre JSP e Servlets:

I. É possível usar uma página JSP para gerar um arquivo de imagem do tipo
JPEG, GIF ou PNG.
II. Um servlet é executado no servidor, ao passo que uma página JSP é
executada no browser do cliente.
III. Uma página gerada por um servlet não pode conter código Javascript.
IV. Uma página JSP é executada no servidor enquanto que um servlet é
executado no browser do cliente.

A quantidade de afirmativas corretas é:

a) 0;
b) 1;
c) 2; 16712855225

d) 3;
e) 4.

Comentários:

ATRIBUTO PROPÓSITO

buffer Especifica o modelo de buffering da saída padrão.


autoFlush Controla o comportamento da saída padrão da Servlet.
contentType Define a codificação de caracteres e media type (MIME)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

errorPage Define a URL de outro JSP que reporta exceções.


isErrorPage Indica se a Página JSP possui URL de outra página.
Extends Especifica uma superclasse a ser estendida pela servlet.
Import Especifica uma lista de pacotes ou classes importadas.
Info Define uma string que pode ser acessada para informações.
isThreadSafe Define se a servlet é capaz de atender múltiplas solicitações.
language Define a linguagem de programação utilizada.
Session Especifica se a Página JSP participa de Sessões HTTP.
isELIgnored Especifica se Linguagens de Expressão serão ignoradas.
isScriptingEnabled Determina se elementos de script são permitidos.

I. Conforme visto em aula, o atributo contentType da Diretiva Page permite definir


a codificação dos caracteres e o Media Type (Ex: text/plain, image/jpeg, vídeo/mp4).
Logo, é possível sim usar uma Página JSP para gerar um arquivo de imagem do tipo
JPEG, GIF ou PNG.

Galera, trata-se de uma tecnologia para geração de documentos baseados em texto


e executados do lado do servidor (assim como Servlets). Professor, como assim texto?
Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser
um conjunto de elementos JSP e tags customizadas, que definem como a página
construirá conteúdo dinâmico.

II. Conforme visto em aula, ambos são executados no Servidor.

III. Não existe isso! JavaScript roda no browser do cliente, logo é completamente
possível ter código JavaScript em uma Página JSP.

Galera, trata-se de uma tecnologia para geração de documentos baseados em texto


e executados do lado do servidor (assim como Servlets). Professor, como assim texto?
Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser
16712855225

um conjunto de elementos JSP e tags customizadas, que definem como a página


construirá conteúdo dinâmico.

IV. Conforme visto em aula, ambos são executados no Servidor.

Gabarito: B

(CESGRANRIO – 2012 – CEF – Analista de Sistemas) Um objeto implícito é


utilizado dentro de páginas JSP sem que haja necessidade de declará-lo. Que
objeto é esse?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

a) Integer.
b) queryString.
c) getParameter.
d) String.
e) Request.

Comentários:

OBJETO DESCRIÇÃO

request Objeto do tipo HttpServletRequest e contém a informação do pedido HTTP.

response Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada
ao cliente. Não é usado com frequência.
pageContext Objeto do tipo PageContext e contém informações de contexto para execução da
página.
application Objeto do tipo ServletContext que permite compartilhar informações entre todos os
componentes web da aplicação.
out Objeto da classe JspWriter que permite imprimir para o response através do
método println.
config Objeto do tipo ServletConfig da página JSP.

page Sinônimo do operador “this” do objeto HttpJspPage. Não é usado com frequência.

session Objeto do tipo HttpSession que guarda informações da sessão de um usuário


específico entre múltiplas requisições.
exception É o objeto Throwable que é resultante de uma situação de erro numa página JSP.

16712855225

Conforme vimos em aula, trata-se do Objeto Request.

Gabarito: E

(FMP-RS - 2013 - MPE-AC - Analista - Tecnologia da Informação) No contexto


de arquitetura Java Enterprise Edition, ___________________ é uma tecnologia que
simplifica o processo de gerar páginas dinamicamente, pois permite embutir Java
diretamente em uma página HTML ou XML.

Assinale a única alternativa que completa corretamente a lacuna acima:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

a) Java Virtual Machine (JVM)


b) JavaServer Pages (JSP)
c) Java ME (Java Micro Edition)
d) Enterprise JavaBeans (EJB)
e) Java Persistence API (JPA)

Comentários:

Primeiro, o que é JSP? É uma tecnologia da plataforma Java Enterprise Edition (Java
EE) que permite utilizar ou o código Java dentro das páginas web ou tags que
realizam sua lógica. Por ser tecnologia Java, seus objetos são definidos segundo define
a linguagem, i.e., podendo utilizar todos os seus recursos, tais como modificadores de
acesso, tratamento de exceções, entre outros.

Conforme vimos em aula, trata-se do JSP!

Gabarito: B

(CESGRANRIO - 2011 - FINEP - Analista - Desenvolvimento de Sistemas Qual


ação padrão do JSP interrompe o processamento das requisições pela página
corrente e as direciona para outro componente Web?

a) <jsp:invoke>
b) <jsp:include>
c) <jsp:forward>
d) <jsp:plugin>
e) <jsp:call>

Comentários: 16712855225

JSP :USE BEAN JSP :PARAM JSP :INVOQUE JSP :OUTPUT


JSP :SETPROPERTY JSP :FALLBACK JSP :DOBODY JSP :ROOT
JSP :GETPROPERTY JSP :TEXT JSP :ELEMENTO JSP :DECLARATION
JSP :INCLUDE JSP :PLUGIN JSP :BODY JSP :SCRIPLET
JSP :FORWARD JSP :PARAMS JSP :ATTIBUTE JSP :EXPRESSION

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações


mais famosas e conhecidas são: (...)

 jsp:forward: usada para redirecionar requisições para outra Página JSP;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, trata-se do jsp:forward.

Gabarito: C

(ESAF - - ANA - Analista Administrativo - Tecnologia da Informação -


Desenvolvimento O mecanismo de inclusão, que permite o conteúdo dinâmico
ser incluído em uma JSP em tempo de solicitação, é denominado:

a) Ação <jsp:plugin>.
b) Ação <jsp:include>.
c) Diretiva include.
d) Diretiva Page.
e) Diretiva taglib.

Comentários:

JSP :USE BEAN JSP :PARAM JSP :INVOQUE JSP :OUTPUT


JSP :SETPROPERTY JSP :FALLBACK JSP :DOBODY JSP :ROOT
JSP :GETPROPERTY JSP :TEXT JSP :ELEMENTO JSP :DECLARATION
JSP :INCLUDE JSP :PLUGIN JSP :BODY JSP :SCRIPLET
JSP :FORWARD JSP :PARAMS JSP :ATTIBUTE JSP :EXPRESSION

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações


mais famosas e conhecidas são: (...)

 jsp:include: usada para inserir conteúdo dinâmico em tempo de solicitação;

Conforme vimos em aula, trata-se da Ação jsp:include.


16712855225

Gabarito: B

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

SERVLETS

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma
API independente de plataforma, escrita em Java, que roda no servidor (Container
Web) processando requisições de clientes e enviando respostas, e que pode ser
traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para
estender as funcionalidades de um servidor.

A documentação oficial afirma que se trata de uma classe java pura utilizada para
estender as capacidades dos servidores que hospedam aplicações acessadas por
meio de um modelo de requisição-resposta. Em geral, elas funcionam para fornecer
conteúdo web dinâmicos (normalmente em HTML) às páginas web, processando
requisições/respostas, filtrando dados, acessando o banco de dados, etc.

Vocês podem me perguntar se as servlets utilizam apenas HTTP. Não! Elas utilizam
qualquer protocolo, no entanto ele é o protocolo mais utilizado por clientes web.
Professor, o que você quis dizer com “classe java pura”? Cara, isso significa que essa
classe só contém código java. Professor as servlets rodam no cliente ou no servidor?
Pô... essa é muito fácil: Servlets rodam no Servidor (JVM)!10 ;)

16712855225

10
O A

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Bem, acima eu afirmei que as servlets são responsáveis por fornecer conteúdo web
dinâmicos. E aí, alguém sabe o que é uma página web dinâmica? Bem, nós temos
dois tipos de página web dinâmicas: client-side e server-side. O primeiro se refere
a páginas que permitem mudanças em sua interface como resposta a ações do
mouse, teclado, entre outros. Vejam o exemplo da imagem anterior!

Agora observem que a página acima é modificada quando se move o cursor do


mouse sobre o link “menu” – ela é dinâmica! Bem, mas nosso interesse nessa aula
são as páginas web dinâmicas server-side, i.e., que variam de acordo com os
parâmetros fornecidos por um usuário/programa com o intuito de aumentar o
potencial de comunicação e interação com cada usuário especificamente.
16712855225

Antigamente, para gerar conteúdo dinâmico, utilizava-se o CGI (Common Gateway


Interface) – ele permitia escrever pequenos programas para apresentar páginas web
dinâmicas utilizando outras linguagens de programação. Em 1997, apareceu a
tecnologia de servlets, que são utilizadas para gerar páginas web dinâmicas por
meio da linguagem Java. Professor, deixa eu ver uma servlet? Vamos lá:

import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTeste extends HttpServlet

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04
{
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {

res.setContentType("text/html");
PrintWriter out = res.getWriter();

out.println("<html>");
out.println("<body bgcolor = \"white\">");
out.println("<h1>Hello Servlet</h1>");
out.println("</body>");
out.println("</html>");
}
}

Dado esse código, vamos ver alguns detalhes importantes: primeiro, foi importado
o pacote javax.servlet, que é um conjunto de classes e interfaces responsáveis pela
comunicação com diversos protocolos – lá se encontram, por exemplo, as interfaces
ServletRequest e ServletResponse. No entanto, observem abaixo que se importa
também o pacote javax.servlet.http – cuja estrutura é mostrada a seguir:

16712855225

Ele se trata de um conjunto de classes e interfaces responsáveis pela comunicação


especificamente com o protocolo HTTP – lá se encontram as interfaces
HttpServletRequest e HttpServletResponse, e também uma classe abstrata chamada
HttpServlet11. Essa classe define diversos métodos para lidar com Requisições HTTP:
doGet, doPost, doPut, doDelete, doHead, doTrace e doOptions, etc.

Dentro da javax.servlet, temos também a interface ServletContext! Ela define um


contexto, i.e., uma unidade de aplicação web que possui suas próprias
configurações. Para executar Servlets e Páginas JSP, é necessário colocá-los dentro

11
Seu nome completo é: javax.servlet.http.HttpServlet.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

de um contexto de uma aplicação web – existe um Contexto por Aplicação Web por
JVM. Entenderam mais ou menos? É simples, só é um pouco abstrato!

A interface ServletContext é um conjunto de métodos que uma servlet utiliza para


interagir com seu Servlet Container – por exemplo, para recuperar um arquivo,
despachar requisições ou escrever em um arquivo de log! Bem, conforme a imagem
abaixo, cada servlet possui seu ServletConfig. Já o ServletContext serve para qualquer
servlet do contexto e pode ser acessado por meio do objeto ServletConfig.

Voltando ao nosso código: importamos os dois pacotes, estendemos essa classe


abstrata e passamos como parâmetro as duas interfaces. Se a Requisição HTTP foi
feita utilizando o Método GET, executaremos o método doGet; se foi com o Método
POST, executaremos o método doPost. Esses métodos recebem dois parâmetros:
uma requisição HttpServletRequest e uma resposta HttpServletResponse.
16712855225

Vocês observarão um padrão muito comum em servlets. Qual, professor? Para


devolver a resposta ao cliente, devemos primeiro definir o tipo de saída. Para tal,
utilizamos a função setContentType do HttpServletResponse – nossa servlet definiu
como text/html, i.e., teremos uma saída em HTML! A seguir, utilizamos o método
getWriter para capturar os caracteres da resposta e inseri-los em um objeto out.

Após isso, nós já podemos utilizar o método println do objeto out para escrever a
saída, resultando em uma Página HTML “Hello Servlet” – como é apresentado na
imagem abaixo. Qualé, professor? O que tem de dinâmico aí? Isso foi só um exemplo

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

para vocês verem como é possível receber dados de entrada do usuário e manipulá-
los dinamicamente.

O único objetivo da servlet acima é exibir uma mensagem HTML simples para os
usuários que a requisitarem. No entanto, note como seria muito fácil escrever outros
códigos Java mais poderosos para gerar as strings do HTML baseadas em
informações dinâmicas vindas, por exemplo, de um banco de dados. Vocês
entenderam direitinho?

16712855225

É importante entender também como funciona um dos métodos mais importantes


da interface HttpServletRequest: método getParameter12! Bem, ele retorna o valor
do parâmetro de uma requisição como uma String; E por que é importante? Porque
12
Já o Método getInitParameter retorna o valor do parâmetro de inicialização.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

ele é útil na passagem de dados de um formulário do cliente, i.e., por meio dele, a
servlet pode capturar dados de formulários! Agora vamos ver o ciclo das servlets ;)

Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a repassa


para o Servlet Container. Já existe uma instância13 da servlet capaz de responder a
essa requisição? Se sim, delega-se a requisição para essa instância; se não, carrega-
se a classe servlet na memória, cria-se uma instância dela e a inicializa por meio do
método init. Esse método recebe como parâmetro um objeto ServletConfig!

Esse objeto contém informações de configuração e parâmetros de inicialização da


aplicação web. A partir do momento que a servlet é inicializada, o contêiner pode
utilizá-la para tratar requisições dos clientes. Chama-se então o método service com
dois parâmetros: ServletRequest, que contém a solicitação do cliente; e o
ServletResponse, que contém a resposta – ambos criados pelo contêiner.

Na prática, método service determina qual Método HTTP (GET/POST) deve ser
chamado na servlet. Por fim, o contêiner chama o método destroy a fim de remover
a instância da servlet da memória e liberar os recursos e os dados. Tanto o método
init quanto o método destroy são executados apenas uma vez durante o ciclo de
vida da servlet. Professor, quem gerencia tudo nisso? O Servlet Container!

16712855225

13
A cada nova thread, cria-se uma nova instância? Não, existe apenas uma instância e a cada nova requisição
do cliente, o contêiner gera um novo par de objetos request e response, cria uma nova thread e os passa para
ela.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Técnico Judiciário - Tecnologia da
Informação) No ciclo de vida de um servlet, o servidor recebe uma requisição e
a repassa para o container, que a delega a um servlet. O container carrega a
classe na memória, cria uma instância da classe do servlet e inicia a instância
chamando o método init( ).

Comentários:

O Servidor recebe uma Requisição HTTP e a repassa para o Servlet Container. Já


existe uma instância da servlet capaz de responder a essa requisição? Se sim, delega-
se a requisição para essa instância; se não, carrega-se a classe servlet na memória,
cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe
como parâmetro um objeto ServletConfig!

Perfeito, conforme visto em aula.

Gabarito: C

(CESPE – 2013 – DPE/SP – Analista de Sistemas) No ciclo de vida de um servlet,


o servidor recebe uma requisição e a repassa para o container, que a delega a
um servlet. O container carrega a classe na memória, cria uma instância da classe
do servlet e inicia a instância chamando o método init().
16712855225

Comentários:

O Servidor recebe uma Requisição HTTP e a repassa para o Servlet Container. Já


existe uma instância da servlet capaz de responder a essa requisição? Se sim, delega-
se a requisição para essa instância; se não, carrega-se a classe servlet na memória,
cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe
como parâmetro um objeto ServletConfig!

Conforme vimos em aula, está perfeito!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE – – MPE/RR – Analista de Sistemas) O nome completo da classe da


qual herda a classe acima declarada é javax.servlet.HttpServlet. A classe indicada
também herda, indiretamente, da classe java.lang.Object. Portanto, é correto
afirmar que classes em Java podem ter herança múltipla.

Comentários:

Ele se trata de um conjunto de classes e interfaces responsáveis pela comunicação


especificamente com o protocolo HTTP – lá se encontram as interfaces
HttpServletRequest e HttpServletResponse, e também uma classe abstrata chamada
HttpServlet2. Essa classe define diversos métodos para lidar com Requisições HTTP:
doGet, doPost, doPut, doDelete, doHead, doTrace e doOptions, etc.

A classe acima herda da classe HttpServlet, cujo nome completo é


javax.servlet.http.HttpServlet. Além disso, todas (todas mesmo!) as classes (inclusive
a classe HttpServlet) herdam da classe Object (ou java.lang.Object). No entanto, a
classe BookStoreServlet não herda diretamente de Object, logo não há que se falar
em Herança Múltipla.

Gabarito: E

import java.io.*; import javax.servlet.*; import javax.servlet.http.*;


public class BookStoreServlet extends HttpServlet {
public void service (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Get the dispatcher; it gets the main page to the user
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(
"/bookstore/bookstore.html");
if (dispatcher == null) { 16712855225

System.out.println("There was no dispatcher");


//No dispatcher means the html file could not be found.
response.sendError(response.SC_NO_CONTENT);
} else {
System.out.println("There is a dispatcher");
// Get or start a new session for this user
HttpSession session = request.getSession();
// Send the user the bookstore's opening page
dispatcher.forward(request,response);
}
}
public String getServletInfo() {
return "The BookStore servlet returns the main web page " +
"for Duke's Bookstore.";
}
}

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE – – MPE/RR – Analista de Sistemas) Para a recuperação dos


parâmetros que o browser envia para essa servlet, deve-se fazer acesso ao
objeto apontado pela variável request, declarada na linha 3.

Comentários:

Perfeito, isso vale para qualquer servlet. Se você deseja ter acesso a parâmetros
enviados pelo usuário por meio do browser para a servlet, você precisa ter acesso
ao objeto request do tipo HttpServletRequest.

Gabarito: C

(CESPE – – MPE/RR – Analista de Sistemas) Se, durante o processamento


de um pedido por essa servlet, quando da execução da linha de código 10, o
valor da variável dispatcher for null (nulo), então, a mensagem There was no
dispatcher será apresentada na interface do usuário.

Comentários:

Questão de programador mesmo. Essa questão parece boba, mas observem que
ela diz que a mensagem será apresentada na interface do usuário (i.e., no browser).
Galera, para apresentar no browser, é necessário utilizar o objeto PrintWriter, caso
contrário ele irá imprimir esse valor na JVM e o usuário não visualizará!

Gabarito: E

(CESPE – – MPE/RR – Analista de Sistemas) Durante o funcionamento de


uma aplicação web na qual esteja em uso a servlet acima declarada, cada pedido
16712855225

http enviado pelo browser e direcionado à servlet BookStoreServlet implicará a


criação de uma nova instância da classe BookStoreServlet, bem como a criação
de uma thread que invoca o método service(HttpServletRequest,
HttpServletResponse), declarado no código apresentado.

Comentários:

Galera, implicará a criação de uma nova instância? Não, só existe uma instância! Na
verdade, implicará a criação de uma nova thread para cada novo pedido.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE – – TRT/5 – Analista de Sistemas) Java Servlets são componentes


Java executados somente do lado do servidor.

Comentários:

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma
API independente de plataforma, escrita em Java, que roda no servidor (Container
Web) processando requisições de clientes e enviando respostas, e que pode ser
traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para
estender as funcionalidades de um servidor.

Perfeito, conforme visto em aula.

Gabarito: C

(CESPE – 1 – /ES – Analista de Sistemas) Servlet pode ser considerado um


applet que é executado no lado servidor.

Comentários:

Na minha opinião, essa questão está errada! O Guia da Oracle afirma: “A servlet can
almost be thought of as an applet that runs on the server side--without a face. Java
servlets make many Web applications possible”. Para mim, isso é diferente de dizer
que um servlet pode ser considerado um applet que é executado no lado do
servidor. Eu diria: “Em termos de local de execução, uma servlet pode ser
considerada uma applet que é executada no lado servidor”, no entanto a banca não
entendeu dessa maneira :(
16712855225

Gabarito: C

(CESPE – 2011 – TRE/ES – Analista de Sistemas) Um servlet é uma classe Java


utilizada para ampliar a capacidade de acesso dos servidores a aplicações por
meio do modelo requisição-resposta. Embora os servlets possam responder a
um tipo específico de requisição hospedada em servidores web, os servlets não
respondem a requisições genéricas.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma
API independente de plataforma, escrita em Java, que roda no servidor (Container
Web) processando requisições de clientes e enviando respostas, e que pode ser
traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para
estender as funcionalidades de um servidor.

Vocês podem me perguntar se as servlets utilizam apenas HTTP. Não! Elas utilizam
qualquer protocolo, no entanto ele é o protocolo mais utilizado por clientes web.
Professor, o que você quis dizer com “classe java pura”? Cara, isso significa que essa
classe só contém código java. Professor as servlets rodam no cliente ou no servidor?
Pô... essa é muito fácil: Servlets rodam no Servidor (JVM)! ;)

Embora os servlets possam responder a qualquer tipo de requisição, eles são mais
utilizados para tratar requisições HTTP.

Gabarito: E

10. (CESPE – 2013 – CNJ – Analista de Sistemas) Apesar de serem independentes de


plataforma, os servlets, para funcionarem, precisam utilizar o protocolo HTTP.

Comentários:

Vocês podem me perguntar se as servlets utilizam apenas HTTP. Não! Elas utilizam
qualquer protocolo, no entanto ele é o protocolo mais utilizado por clientes web.
Professor, o que você quis dizer com “classe java pura”? Cara, isso significa que essa
classe só contém código java. Professor as servlets rodam no cliente ou no servidor?
Pô... essa é muito fácil: Servlets rodam no Servidor (JVM)! ;)

Opa, não precisa utilizar HTTP (apesar de ele ser o mais comum).
16712855225

Gabarito: E

11. (CESPE – 2013 – TRE/MS – Analista de Sistemas – D) O servlet é uma classe de


programa em Java utilizada para estender a capacidade dos servidores em
aplicações web que trabalham com a filosofia requisição e resposta.

Comentários:

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma
API independente de plataforma, escrita em Java, que roda no servidor (Container

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Web) processando requisições de clientes e enviando respostas, e que pode ser


traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para
estender as funcionalidades de um servidor.

Perfeito, conforme visto em aula.

Gabarito: C

12. (CESPE - - STJ - Analista Judiciário - Tecnologia da Informação Na


plataforma J2EE, uma aplicação web para a Internet pode ser composta por
servlets, Java Server Pages (JSP) e páginas HTML. Nessas aplicações, a
apresentação dos dados pode ser separada da lógica do negócio, adotando-se
o estilo de arquitetura model view controller (MVC). Nesse caso, pode-se usar
servlets operando como controladoras que recebem as solicitações dos usuários
e providenciam o processamento das mesmas. Em uma mesma aplicação,
entretanto, só pode existir um servlet operando como controladora.

Comentários:

Não faz sentido, visto que mais de uma servlet pode operar como controladora de
uma aplicação.
Gabarito: E

13. (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Todo servlet
pode interagir com o contexto no qual ele está inserido por meio dos métodos
especificados na interface ServletContext.

Comentários:
16712855225

Dentro da javax.servlet, temos também a interface ServletContext! Ela define um


contexto, i.e., uma unidade de aplicação web que possui suas próprias configurações.
Para executar Servlets e Páginas JSP, é necessário colocá-los dentro de um contexto
de uma aplicação web – existe um Contexto por Aplicação Web por JVM. Entenderam
mais ou menos? É simples, só é um pouco abstrato!

A interface ServletContext é um conjunto de métodos que uma servlet utiliza para


interagir com seu Servlet Container – por exemplo, para recuperar um arquivo,
despachar requisições ou escrever em um arquivo de log! Bem, conforme a imagem
abaixo, cada servlet possui seu ServletConfig. Já o ServletContext serve para qualquer
servlet do contexto e pode ser acessado por meio do objeto ServletConfig.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, os servlets interagem com o contexto por meio de


métodos especificados na interface ServletContext – que estão contidos em um
Servlet Container.

Gabarito: C

14. (CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas - Produção


Entre outras aplicações, os servlets são utilizados para escrever aplicativos web
J2EE dinâmicos em servidores web. Um servlet pode utilizar seus recursos para
realizar ações como, por exemplo, usar os registros (logging) para permitir que
o servidor possa autenticar usuários.

Comentários:

Essa é uma questão bastante difícil! Tive que pesquisar e, de fato, pode-se utilizar
recursos de servlets para autenticação, auditoria e logging!

Gabarito: C

15. (CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação


No desenvolvimento de uma aplicação web que siga o padrão JEE, a tecnologia
JSP (Java Server Pages) permite criar páginas web com componentes estáticos e
dinâmicos; o AJAX permite a troca e manipulação de dados XML com
comunicação assíncrona, utilizando XMLHttpRequest; e o servlet é exemplo de
servidor de aplicações que contém diretórios como o bin e o webapps e é
responsável por gerenciar requisições recebidas de clientes.

Comentários: 16712855225

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma
API independente de plataforma, escrita em Java, que roda no servidor (Container
Web) processando requisições de clientes e enviando respostas, e que pode ser
traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para
estender as funcionalidades de um servidor.

Confome vimos em aula, servlet não é um servidor de aplicação, mas simplesmente


uma Classe Java.

Gabarit E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Quando


um servlet é carregado pela primeira vez para a máquina virtual Java do servidor:

a) ocorre um destroy() no processo cliente.


b) o seu método init() é invocado.
c) o método service() é definido.
d) ocorre a execução do método getOutputStream().
e) o seu método stream() é invocado.

Comentários:

O Servidor recebe uma Requisição HTTP e a repassa para o Servlet Container. Já


existe uma instância da servlet capaz de responder a essa requisição? Se sim, delega-
se a requisição para essa instância; se não, carrega-se a classe servlet na memória,
cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe
como parâmetro um objeto ServletConfig!

Perfeito, conforme visto em aula.

Gabarito: B

(FCC – 2011 – TRT - 1ª REGIÃO – Analista de Sistemas Em relação às tecnologias


16712855225

Java, é INCORRETO afirmar que as Servlets:

a) deixam para a API utilizada na sua escrita a responsabilidade com o ambiente


em que elas serão carregadas e com o protocolo usado no envio e recebimento
de informações.

b) fornecem um mecanismo simples e consistente para estender a


funcionalidade de um servidor Web.

c) podem ser incorporadas em vários servidores Web diferentes.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

d) podem rodar em qualquer plataforma sem a necessidade de serem reescritas


ou compiladas novamente.

e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera
uma nova thread.

Comentários:

(a) Deixa a responsabilidade do ambiente de execução e protocolo para a API? De


jeito algum! Isso é uma escolha do programador; (b) Perfeito, já vimos diversas vezes
que elas são responsáveis por estender a funcionalidade de servidores; (c) Perfeito,
está disponível para diversos servidores web; (d) Perfeito, nunca se esqueçam que
são classes Java; (e) Perfeito, é uma thread para cada requisição.

Gabarito: A

(FCC – 2010 – DPE/SP – Analista de Sistemas) Servlets são projetadas para


fornecer aos desenvolvedores uma solução JAVA para criar aplicações web. Para
criar Servlets é necessário importar as classes padrão de extensão dos pacotes:

a) javax.servlet e javax.servlet.http.
b) javax.servlet e javax.http.servlet.
c) javax.servlet.html e javax.servlet.http.
d) servlet.javax e servlet.javax.http.
e) javax.servlet.smtp e javax.servlet.html.

Comentários:

Dado esse código, vamos ver alguns detalhes importantes: primeiro, foi importado o
16712855225

pacote javax.servlet, que é um conjunto de classes e interfaces responsáveis pela


comunicação com diversos protocolos – lá se encontram, por exemplo, as interfaces
ServletRequest e ServletResponse. No entanto, observem abaixo que se importa
também o pacote javax.servlet.http – cuja estrutura é mostrada a seguir:

Conforme vimos em aula, trata-se da javax.servlet e javax.servlet.http.

Gabarito: A

(FCC – 2 – TRE/CE – Analista de Sistemas) No contexto do ciclo de vida de


um servlet, considere:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

I. Quando o servidor recebe uma requisição, ela é repassada para o container


que, por sua vez, carrega a classe na memória e cria uma instância da classe do
servlet.

II. Quando um servlet é carregado pela primeira vez para a máquina virtual Java
do servidor, o método init() é invocado, para preparar recursos para a execução
do serviço ou para estabelecer conexão com outros serviços.

III. Estando o servlet pronto para atender as requisições dos clientes, o container
cria um objeto de requisição (ServletRequest) e de resposta (ServletResponse) e
depois chama o método service(), passando os objetos como parâmetros.

IV. O método destroy() permite liberar os recursos que foram utilizados, sendo
invocado quando o servidor estiver concluindo sua atividade.

Está correto o que se afirma em:

a) I, II e III, apenas.
b) I, II e IV, apenas.
c) I, III e IV, apenas.
d) II, III e IV, apenas.
e) I, II, III e IV.

Comentários:

Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a repassa para
o Servlet Container. Já existe uma instância da servlet capaz de responder a essa
requisição? Se sim, delega-se a requisição para essa instância; se não, carrega-se a
16712855225

classe servlet na memória, cria-se uma instância dela e a inicializa por meio do
método init. Esse método recebe como parâmetro um objeto ServletConfig!

(I) Galera, isso só ocorre se já não existir uma instância da servlet. No entanto,
guardem isso para sempre na vida de concurseiros: “Um item só está errado se
contiver um erro”. O item disse que ocorre sempre assim? Não. Existe um caso em
que o que foi descrito no item ocorre? Sim! Logo, não há erro! Ele descreveu um
caso, não disse que era o único caso! Item completamente perfeito...

Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a repassa para
o Servlet Container. Já existe uma instância da servlet capaz de responder a essa

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

requisição? Se sim, delega-se a requisição para essa instância; se não, carrega-se a


classe servlet na memória, cria-se uma instância dela e a inicializa por meio do
método init. Esse método recebe como parâmetro um objeto ServletConfig!

(II) Conforme vimos em aula, esse método contém as configurações que preparam
os recursos para a execução do serviço ou conexão com outros serviços.

Esse objeto contém informações de configuração e parâmetros de inicialização da


aplicação web. A partir do momento que a servlet é inicializada, o contêiner pode
utilizá-la para tratar requisições dos clientes. Chama-se então o método service com
dois parâmetros: ServletRequest, que contém a solicitação do cliente; e o
ServletResponse, que contém a resposta – ambos criados pelo contêiner.

(III) Conforme vimos em aula, eles são criados para tratar a solicitação e resposta
para o cliente e são criados pelo contêiner.

Na prática, o método service determina qual Método HTTP (GET/POST) deve ser
chamado na servlet. Por fim, o contêiner chama o método destroy a fim de remover
a instância da servlet da memória e liberar os recursos e os dados. Tanto o método
init quanto o método destroy são executados apenas uma vez durante o ciclo de vida
da servlet. Professor, quem gerencia tudo nisso? O Servlet Container!

(IV) Conforme vimos em aula, está perfeito! Quando a servlet tiver cumprido seu
papel, o servidor liberará os recursos investidos.

Gabarito: E

(FCC – 3 – DPE/SP – Analista de Sistemas) Um Servlet Contêiner controla o


ciclo de vida de uma servlet onde são invocados três métodos essenciais: um
16712855225

para inicializar a instância da servlet, um para processar a requisição e outro para


descarregar a servlet da memória. Os itens a seguir representam, nessa ordem,
o que ocorre quando um usuário envia uma requisição HTTP ao servidor:

I. A requisição HTTP recebida pelo servidor é encaminhada ao Servlet Contêiner


que mapeia esse pedido para uma servlet específica.

II. O Servlet Contêiner invoca o método init da servlet. Esse método é chamado
em toda requisição do usuário à servlet não sendo possível passar parâmetros
de inicialização.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

III. O Servlet Contêiner invoca o método service da servlet para processar a


requisição HTTP, passando os objetos request e response. O método service não
é chamado a cada requisição, mas apenas uma vez, na primeira requisição do
usuário à servlet.

IV. Para descarregar a servlet da memória, o Servlet Contêiner chama o método


unload, que faz com que o garbage collector retire a instância da servlet da
memória.

Está correto o que se afirma em:

a) I, II, III e IV.


b) I, apenas.
c) I e IV, apenas.
d) II, III e IV, apenas.
e) II e III, apenas.

Comentários:

Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a repassa para
o Servlet Container. Já existe uma instância da servlet capaz de responder a essa
requisição? Se sim, delega-se a requisição para essa instância; se não, carrega-se a
classe servlet na memória, cria-se uma instância dela e a inicializa por meio do
método init. Esse método recebe como parâmetro um objeto ServletConfig!

(I) Conforme vimos em aula, o contêiner verifica se há uma servlet específica para
responder a esse pedido.

Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a repassa para
16712855225

o Servlet Container. Já existe uma instância da servlet capaz de responder a essa


requisição? Se sim, delega-se a requisição para essa instância; se não, carrega-se a
classe servlet na memória, cria-se uma instância dela e a inicializa por meio do
método init. Esse método recebe como parâmetro um objeto ServletConfig!

(II) Conforme vimos em aula, esse método pode – e recebe – parâmetros de


inicialização.

Esse objeto contém informações de configuração e parâmetros de inicialização da


aplicação web. A partir do momento que a servlet é inicializada, o contêiner pode
utilizá-la para tratar requisições dos clientes. Chama-se então o método service com

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

dois parâmetros: ServletRequest, que contém a solicitação do cliente; e o


ServletResponse, que contém a resposta – ambos criados pelo contêiner.

(III) Na verdade, esse método é chamado a cada requisição, porque cada requisição
possui parâmetros diferentes.

Na prática, o método service determina qual Método HTTP (GET/POST) deve ser
chamado na servlet. Por fim, o contêiner chama o método destroy a fim de remover
a instância da servlet da memória e liberar os recursos e os dados. Tanto o método
init quanto o método destroy são executados apenas uma vez durante o ciclo de vida
da servlet. Professor, quem gerencia tudo nisso? O Servlet Container!

(IV) Conforme vimos em aula, não se chama método unload – o nome do método
é destroy!

Gabarito: B

(FCC – 6 – BACEN – Analista de Sistemas) Para ser um servlet, uma classe


deve estender a classe I e exceder as ações “doGet” ou “doPost” (ou ambas),
dependendo se os dados estão sendo enviados por uma ação GET ou por uma
ação POST. Estes métodos tomam dois argumentos: um II e um III em sua
execução. Preenchem correta e respectivamente I, II e III:

16712855225

Comentários:

Voltando ao nosso código: importamos os dois pacotes, estendemos essa classe


abstrata e passamos como parâmetro as duas interfaces. Se a Requisição HTTP foi
feita utilizando o Método GET, executaremos o método doGet; se foi com o Método
POST, executaremos o método doPost. Esses métodos recebem dois parâmetros: uma
requisição HttpServletRequest e uma resposta HttpServletResponse.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Para ser um servlet, uma classe deve estender a classe HttpServlet e exceder as
ações “doGet” ou “doPost” (ou ambas), dependendo se os dados estão sendo
enviados por uma ação GET ou por uma ação POST. Estes métodos tomam dois
argumentos: um HttpServletRequest e um HttpServletResponse em sua execução.

Gabarito: D

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação Em Java,


a passagem de dados de um formulário do cliente para o servlet pode ocorrer
por meio do uso do método:

a) import()
b) return()
c) catch()
d) getParameter()
e) nameComponent()

Comentários:

É importante entender também como funciona um dos métodos mais importantes


da interface HttpServletRequest: método getParameter! Bem, ele retorna o valor do
parâmetro de um requisito como uma String; Por que isso é importante? Porque ele
é útil na passagem de dados de um formulário do cliente, i.e., por meio dele, a servlet
pode capturar dados de formulários! Agora vamos ver o ciclo das servlets ;)

Conforme vimos em aula, trata-se do método getParameter().

Gabarito: D
16712855225

(FCC - 2012 - TRE- - Programador de computador A tecnologia Java Servlet


é baseada na construção de classes servlet que executam no servidor recebendo
dados de requisições do cliente, processando esses dados, opcionalmente
acessando recursos externos como bancos de dados, e respondendo ao cliente
com conteúdo no formato HTML.

Com relação ao tema, analise as asserções a seguir:

Embora as servlets sejam muito boas no que fazem, tornou-se difícil responder
ao cliente com conteúdo no formato HTML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

PORQUE

Geralmente quem trabalha com o conteúdo HTML é o web designer que


normalmente não é programador Java experiente. Ao misturar HTML dentro de
uma servlet, torna-se muito difícil separar as funções de web designer e
desenvolvedor Java. Além disso, é difícil fazer alterações no conteúdo HTML, pois
para cada mudança, uma recompilação da servlet tem que acontecer. Para
contornar as limitações da tecnologia Java Servlet a Sun Microsystems criou a
tecnologia JavaServer Pages (JSP).

Acerca dessas asserções, é correto afirmar:

a) Tanto a primeira quanto a segunda asserções são proposições falsas.

b) A primeira asserção é uma proposição verdadeira e a segunda uma


proposição falsa.

c) A primeira asserção é uma proposição falsa e a segunda uma proposição


verdadeira.

d) As duas asserções são proposições verdadeiras, mas a segunda não é a


justificativa correta da primeira.

e) As duas asserções são proposições verdadeiras e a segunda é a justificativa


correta da primeira.

Comentários:

Outra desvantagem importante é que o programador, além de ser bom em Java, tem
16712855225

que ser bom em Web Design! No entanto, quando ele está escrevendo o código Java,
ele não possui as ferramentas de Web Design! O JSP permite essa separação, i.e., os
Desenvolvedores Java criam as Servlets (Lógica de Negócio) e os Web Designers criam
as Páginas JSP (Lógica de Apresentação)! Bacana?

Roubei esse parágrafo da aula de JSP! Observem que ambas as assertivas estão
corretas e a segunda justifica a primeira.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FCC - 2013 - -RN - Analista Legislativo - Analista de Sistemas No Java EE 6


os métodos doPost e doGet podem ser sobrescritos em uma servlet criada na
aplicação para receberem as requisições vindas de páginas HTML. Quando
sobrescritos na servlet, eles substituem seus métodos ancestrais existentes na
classe abstrata:

a) GenericServlet.
b) HttpServlet.
c) HttpServletRequest.
d) HttpServletResponse.
e) HttpServletObject.

Comentários:

Ele se trata de um conjunto de classes e interfaces responsáveis pela comunicação


especificamente com o protocolo HTTP – lá se encontram as interfaces
HttpServletRequest e HttpServletResponse, e também uma classe abstrata chamada
HttpServlet. Essa classe define diversos métodos para lidar com Requisições HTTP:
doGet, doPost, doPut, doDelete, doHead, doTrace e doOptions, etc.

Conforme vimos em aula, essa classe abstrata é a HttpServlet.

Gabarito: B

10. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da
Informação Para ler os parâmetros de inicialização do contexto de um servlet
utiliza-se o método:

a) String getInitParameter(String).16712855225

b) Enumeration getInitParameterNames().
c) InputStream getResourceAsStream().
d) setAttribute(String nome, Object).
e) Object getAttribute(String nome).

Comentários:

É importante entender também como funciona um dos métodos mais importantes


da interface HttpServletRequest: método getParameter3! Bem, ele retorna o valor do
parâmetro de uma requisição como uma String; E por que é importante? Porque ele

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

é útil na passagem de dados de um formulário do cliente, i.e., por meio dele, a servlet
pode capturar dados de formulários! Agora vamos ver o ciclo das servlets ;)

Conforme vimos em aula, a nota de rodapé 3 afirma que o Método getInitParameter


retorna o valor do parâmetro de inicialização de uma servlet.

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FMP/RS – 2013 – MPE/AC – Analista de Sistemas No contexto da arquitetura


Java Enterprise Edition, __________________ são, em termos de estrutura, classes
Java especializadas que se assemelham muito à estrutura dos applets Java,
porém rodando em um servidor web e não no do cliente.

Assinale a única alternativa que completa corretamente a lacuna acima.

a) Java ME (Java Micro Edition)


b) portlets
c) Java Persistence API (JPA)
d) Enterprise JavaBeans (EJB)
e) servlets

Comentários:

A Oracle afirma: “A servlet can almost be thought of as an applet that runs on the
server side”. Portanto, no contexto da arquitetura Java Enterprise Edition, servlets
são, em termos de estrutura, classes Java especializadas que se assemelham muito
à estrutura dos applets Java, porém rodando em um servidor web e não no do
cliente.

16712855225
Gabarito: E

(VUNESP – 3 – FUNDUNESP – Analista de Sistemas) Na plataforma J2EE, a


classe ServletRequest define:

a) a estrutura do objeto principal do Servlet, permitindo que sejam feitas


requisições ao Servlet.
b) métodos que permitem que o Servlet faça requisições de forma assíncrona.
c) métodos que permitem que o Servlet faça requisições aos clientes.
d) propriedades que permitem que seja alterado o comportamento do Servlet.
e) um objeto que fornecerá informações sobre a requisição feita pelo cliente ao
Servlet.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Comentários:

Dado esse código, vamos ver alguns detalhes importantes: primeiro, foi importado o
pacote javax.servlet, que é um conjunto de classes e interfaces responsáveis pela
comunicação com diversos protocolos – lá se encontram, por exemplo, as interfaces
ServletRequest e ServletResponse. No entanto, observem abaixo que se importa
também o pacote javax.servlet.http – cuja estrutura é mostrada a seguir:

Conforme vimos em aula, ServletRequest é uma interface e, não, uma classe! Vacilou,
banca! Bem, essa interface funciona como a interface ServletHttpRequest, porém
não é específica para o Protocolo HTTP! Bem, ambas servem para manipular
informações de uma requisição feito pelo cliente ao servlet.

Gabarito: E

(CESGRANRI – 2006 – DECEA – Analista de Sistemas – A) Servlets e arquivos


JSP são executados no WEB Container.

Comentários:

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma
API independente de plataforma, escrita em Java, que roda no servidor (Container
Web) processando requisições de clientes e enviando respostas, e que pode ser
traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para
estender as funcionalidades de um servidor.

Conforme vimos em aula, são executados no Container Web.


16712855225

Gabarito: C

(CESGRANRIO – – DECEA – Analista de Sistemas – B) Applets e Servlets são


compilados e executados no servidor.

Comentários:

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma
API independente de plataforma, escrita em Java, que roda no servidor (Container
Web) processando requisições de clientes e enviando respostas, e que pode ser

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para
estender as funcionalidades de um servidor.

Conforme vimos em aula, servlets rodam no servidor, mas applets rodam no cliente.

Gabarito: E

(CESGRANRIO – 2009 – BNDES – Analista de Sistemas – A) Ao estudar as


especificações e frameworks Java EE, um Analista de Sistemas concluiu que o
container WEB do servidor de aplicações é o responsável por gerenciar o ciclo
de vida de servlets e de EJBs utilizados numa aplicação Java.

Comentários:

Na prática, o método service determina qual Método HTTP (GET/POST) deve ser
chamado na servlet. Por fim, o contêiner chamar o método destroy a fim de remover
a instância da servlet da memória e liberar os recursos e os dados. Tanto o método
init quanto o método destroy são executados apenas uma vez durante o ciclo de vida
da servlet. ofessor, quem gerencia tudo nisso? O Servlet Container

Conforme vimos em aula, o ciclo de vida das servlets é gerenciado pelo Servlet
Container (que se encontra dentro do Web Container). No entanto, o Web
Container não é responsável pelo ciclo de vida de EJBs (seria impossível!).

Gabarito: E

(CESGRANRIO – 2009 – BNDES – Analista de Sistemas – B) Ao estudar as


especificações e frameworks Java EE, um Analista de Sistemas concluiu que no
container WEB, uma página JSP transforma-se em um servlet, que é compilado,
16712855225

carregado e inicializado.

Comentários:

Isso é da aula de Páginas JSP, no entanto é sabido que Pásginas JSP se transformam
em Servlets!

Gabarito: C

(CESGRANRIO – 2012 – PETROBRÁS – Analista de Sistemas Seja o código a


seguir:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Sobre esse código, do qual foram omitidas as declarações de importação e o


método getServletInfo por concisão, considere as afirmativas a seguir.

I - Como o método service() não foi redefinido, o container não saberá qual método
chamar para cada tipo de pedido, gerando uma exceção.
II - Como o método init() não foi redefinido, o construtor padrão da classe mãe será
chamado.
III - Como o método destroy() não foi redefinido, o container gerará um erro
registrando-o no arquivo de logs ao terminar este aplicativo.

É correto APENAS o que se afirma em:

a) I 16712855225

b) II
c) III
d) I e III
e) II e III

Comentários:

(I) Na questão, estamos herdando de HttpServlet e, não, Servlet diretamente. Logo,


não precisamos sobrescrever o método service, basta utilizar doGet e doPost.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(II) Perfeito, quem geralmente chama o método init é o contêiner e, não, o


programador. Se ele não redefini-lo, será chamado o construtor da classe mãe
(super.init(config)).

(III) Galera, quem geralmente chama o método destroy é o contêiner e, não, o


programador. Logo, não é necessário redefini-lo.

Gabarito: B

(ESAF – – CGU – Analista de Sistemas – A) Servlets são classes de


programação Java que geram conteúdo dinâmico (normalmente para páginas
16712855225

HTML) e interagem com os clientes, utilizando o modelo challenge/request.


Normalmente utilizam o protocolo HTTP, apesar de não serem restritas a ele.

Comentários:

A documentação oficial afirma que se trata de uma classe java pura utilizada para
estender as capacidades dos servidores que hospedam aplicações acessadas por meio
um modelo de requisição-resposta. Em geral, elas funcionam para fornecer
conteúdo web dinâmicos (normalmente em HTML) às páginas web, processando
requisições/respostas, filtrando dados, acessando o banco de dados, etc.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Opa, utiliza-se um modelo Request/Response e, não, Challenge/Request.

Gabarito: E

(CIAAR - 2012 - CIAAR - Oficial Temporário - Análise de Sistemas O método


chamado para liberar quaisquer recursos mantidos pelo servlet, quando o
contëiner de servlets termina o servlet, denomina-se:

a) get.
b) post.
c) destroy.
d) prerender.

Comentários:

Na prática, o método service determina qual Método HTTP (GET/POST) deve ser
chamado na servlet. Por fim, o contêiner chamar o método destroy a fim de remover
a instância da servlet da memória e liberar os recursos e os dados. Tanto o método
init quanto o método destroy são executados apenas uma vez durante o ciclo de vida
da servlet. Professor, quem gerencia tudo nisso? O Servlet contêiner!

Conforme vimos em aula, trata-se do método Destroy!

Gabarito: C

10. (AOCP - 2012 - BRDE - Analista de Sistemas - Desenvolvimento de Sistemas -


(Prova TIPO 4) Sobre Servlets, analise as assertivas e assinale a alternativa que
aponta as corretas.
16712855225

I. Servlets são implementadas como arquivos de classe da Linguagem Java.

II. Servlets são independentes de plataforma, de modo que podem ser


executadas em diferentes servidores, em diferentes sistemas operacionais.

III. As Servlets podem acessar qualquer uma das APIs Java. Uma Servlet pode
usar a API JDBC para acessar e armazenar dados ou para acessar objetos
remotos.

IV. Ao criar uma Servlet, somos obrigados a reescrever nove métodos presentes
à interface que foi implementada.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

a) Apenas I e II.
b) Apenas I e III.
c) Apenas II e III.
d) Apenas I, II e III.
e) I, II, III e IV.

Comentários:

I. Galera, não sei o que a banca quis dizer com isso! Imagino que seja que Servlets
são Classes Java (diferente de JSP) – logo, o item está correto.

II. Não gosto de dizer que são independentes de plataforma, prefiro dizer que são
multiplataformas, mas está correto.

III. Conforme já foi dito, são classes Java! Logo, podem acessar APIs Java como
qualquer outra.

IV. Não, somos obrigados a implementar, se for Servlet HTTP, os métodos doGet ou
doPost.

Gabarito: D

11. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior Para criar um


Servlet que processará as requisições HTTP na plataforma J2EE, deve-se:

a) criar uma classe que implemente a interface Servlet.


b) criar uma classe que estenda a classe HttpServlet.
c) implementar o método processHttpHeader.
16712855225

d) instanciar a classe Servlet, passando para o parâmetro requestType o valor


Servlet.HTTP_REQUEST.
e) invocar o método Servlet.service(Servlet.HTTP_REQUEST) antes do
processamento da requisição.

Comentários:

Dado esse código, vamos ver alguns detalhes importantes: primeiro, foi importado o
pacote javax.servlet, que é um conjunto de classes e interfaces responsáveis pela
comunicação com diversos protocolos – lá se encontram, por exemplo, as interfaces

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

ServletRequest e ServletResponse. No entanto, observem abaixo que se importa


também o pacote javax.servlet.http – cuja estrutura é mostrada a seguir:

Ele se trata de um conjunto de classes e interfaces responsáveis pela comunicação


especificamente com o protocolo HTTP – lá se encontram as interfaces
HttpServletRequest e HttpServletResponse, e também uma classe abstrata chamada
HttpServlet2. Essa classe define diversos métodos para lidar com Requisições HTTP:
doGet, doPost, doPut, doDelete, doHead, doTrace e doOptions, etc.

Conforme vimos em aula, quando queremos criar uma Servlet que processará
especificamente requisições HTTP, devemos criar uma classe que estenda a classe
HttpServlet – como mostrado na imagem.

Gabarito: B

12. (FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil -


Analista de Informática) Assinale a alternativa que defne corretamente um
16712855225

Servlet.

a) É um método da JPA utilizado na persistência assíncrona de dados.


b) É um componente que roda do lado do cliente para tratar problemas de
comunicação.
c) É uma classe Java utilizada para estender as capacidades de um servidor.
d) É uma biblioteca JBOSS que emula servidores no lado do cliente.
e) É uma JSP que possibilita a execução de código no lado do cliente, mesmo
sem comunicação com um servidor.

Comentário

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma
API independente de plataforma, escrita em Java, que roda no servidor (Container
Web) processando requisições de clientes e enviando respostas, e que pode ser
traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para
estender as funcionalidades de um servidor.

Conforme vimos em aula, trata-se da terceira opção – todas as outras são absurdas!

Gabarito: C

13. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior) Considere o


Servlet a seguir:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ClasseServlet extends HttpServlet {

public void doGet(HttpServletRequest request,


HttpServletResponse response){
response write html
response write body
response write Servlet em operação
response write body
response write html
}
}

Sobre o código do Servlet, é possível afirmar que:

a) ao ser executado por um contêiner de Servlet, será exibida uma tela em branco
no navegador.
16712855225

b) ao ser executado por um contêiner de Servlet, será exibida a mensagem “Servlet


em operação!” na tela do navegador.

c) não pode ser compilado, pois a classe HttpServletResponse não possui o método
write.

d) não pode ser compilado, pois HttpServlet é uma interface e, portanto, não pode
ser estendida por uma classe.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

e) o conteúdo exibido na tela do navegador não será codificado corretamente, pois


a codificação da página não foi informada.

Comentários:

Vocês observarão um padrão muito comum em servlets. Qual, professor? Para


devolver a resposta ao cliente, devemos primeiro definir o tipo de saída. Para tal,
utilizamos a função setContentType do HttpServletResponse – nossa servlet definiu
como text/html, i.e., teremos uma saída em HTML! A seguir, utilizamos o método
getWriter para capturar os caracteres da resposta e inseri-los em um objeto out.

Conforme vimos em aula, nós utilizamos o método getWriter para capturar a


resposta e passar para um objeto PrintWriter. A HttpServletResponse não possui
qualquer método write.

Gabarito: C

14. (CESGRANRIO - - -RO - Analista Judiciário - Tecnologia da Informação


O método da interface javax.servlet.http.HttpSession, utilizado para finalizar uma
sessão de usuário em um container J2EE, é

a) cancel( )
b) delete( )
c) destroy( )
d) invalidate( )
e) release( )

Comentários:
16712855225

Galera, coloquei essa questão para que vocês saibam que nem sempre será possível
responder todas as questões de uma prova. A banca tem o poder de cobrar o que
ela quiser. E assim ela o faz, porque toda prova tem seus itens impossíveis. Não
fiquem tristes, porque um item como esse ninguém acerta (exceto no chute). É
inviável e não vale a pena estudar todos os métodos, parâmetros, objetos de uma
linguagem ou tecnologia. Bem, no caso dessa questão, a resposta era invalidate( ).

Gabarito: D

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

JAVA SERVER FACES (JSF)

Galera, vou contar uma historinha para vocês! Durante muito tempo, usuários se
acostumaram com Aplicações Desktop. O que é isso, professor? É aquele
programinha que você baixa e instala em seu computador local, acessando
diretamente bancos de dados ou gerenciadores de arquivos. Para criar essas
aplicações eram utilizadas as tecnologias Visual Basic, Delphi, Swing (Java), etc.

Pois é, esses programas em geral não necessitam de um navegador para rodar! Eles
são construídos como um conjunto de componentes oferecidos pela plataforma de
desenvolvimento para cada sistema operacional e estão associados a eventos, ações
ou procedimentos que executam lógicas de negócio. Muitas das vezes, são
componentes muito ricos.

No entanto, sabe-se que Aplicações Desktop sofrem com problemas de


manutenção e gerenciabilidade. Vejam que as regras de negócio rodam no cliente
– aliás, uma cópia integral da aplicação está no cliente! Logo, se deu pau em alguma
funcionalidade, eu tenho que propagar as alterações para todas as máquinas que
têm o programa, visto que as regras de negócio estão no cliente!

Para resolver esse tipo de problema, surgiram as Aplicações Web. Elas rodam em
um servidor central onde os usuários podem acessá-las por meio de um navegador
(Chrome, Firefox, etc) e um protocolo HTTP. Nesse caso, todas as regras de negócio
aplicação se encontram no Servidor, sendo muito mais fácil gerenciá-las e,
eventualmente, depurá-las.

Ora, deu pau em alguma funcionalidade, eu vou lá no servidor central e conserto –


16712855225

não preciso ir em todas as máquinas que têm a aplicação! Claro, nem tudo são
flores, é necessário conhecer diversas tecnologias, linguagens, scripts, entre outros
– além de seguir um modelo de requisição/resposta. Agora vejam que interessante,
eu posso combinar esses dois universos.

É possível unir as melhores características desses dois mundos, com componentes


ricos, abstraindo protocolos, etc. Vocês já ouviram falar da Arquitetura Model-View-
Controller (MVC)? Pois é, trata-se de uma arquitetura que divide os componentes
de uma aplicação em camadas independentes (Modelo, Visão e Controle)! O
Controle faz o meio campo entre a Visão e o Modelo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Bem, ela foi amplamente utilizada em Aplicações Desktop até que um dia alguém
pensou: Poxa, por que não utilizá-la na web? E resolveu assim fazê-lo! Como assim?
Alguém decidiu então combinar a Arquitetura MVC com o modelo tradicional de
desenvolvimento de páginas web dinâmicas! Qual seria esse modelo, professor?
Trata-se da utilização de Servlets e JSP!

O resultado foi a criação do framework Struts! Ele era uma implementação da


Arquitetura MVC para desenvolvimento de páginas web dinâmicas! Bacana? Esse
framework fez tanto sucesso que a Sun Microsystems junto com uma comunidade
de desenvolvedores resolveu criar uma especificação padronizada baseada nesse
framework, denominado Java Server Faces (JSF).

Cuidado com as questões de prova que afirmam que se trata apenas de uma
especificação – ele é tanto uma especificação quanto um framework . Cuidado
também com aquelas que afirmam que só trata de interfaces gráficas. Ele trata de
componentes de interface com usuário – as interfaces gráficas (GUI) são um tipo de
interface com o usuário (UI). Essa tecnologia consiste em dois aspectos:

Primeiro, uma API para representar componentes e gerenciar seus estados;


manipular eventos; realizar validação server-side; converter dados; definir
navegação de páginas; suportar internacionalização e acessibilidade; e prover
extensibilidade. Segundo, taglibs (bibliotecas de tags) para adicionar componentes
a páginas web e conectar componentes a objetos server-side.

Galera, ele provê um modelo de programação bem definido e robusto, além de


fornecer diversas taglibs – inclusive o desenvolver pode criar sua própria taglib. Essas
taglibs contêm manipuladores de tags que implementam os componentes de tags.
Essas características facilitam significativamente o peso da construção e manutenção
de Aplicações Web com interfaces de usuário server-side.
16712855225

O Modelo de Componentes JSF define três taglibs:

 HTML: possui componentes que representam diversos elementos HTML.


o Namespace: xmlns:h=”http://java.sun.com/jsf/html”
 CORE: responsável por internacionalização, validação, conversão e outros.
o Namespace: xmlns:f=”http://java.sun.com/jsf/core”
 FACELETS: fornece tags para criar templates para aplicações web.
o Namespace: xmlns: =”http://java.sun.com/jsf/facelets”

14
As implementações da especificação mais famosas são Oracle Mojarra e o Apache MyFaces.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 91 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Com o mínimo de esforço é possível criar uma página web; adicionar componentes
em uma página ao adicionar tags de componentes; vincular componentes de uma
página a dados server-side; conectar eventos gerados por componentes ao código
da aplicação; salvar e restaurar o estado da aplicação além da vida da requisição do
servidor; e reutilizar e estender componentes por meio de customização.

Podemos definir a Tecnologia JSF como uma tecnologia que nos permite criar
Aplicações Web utilizando componentes visuais pré-prontos, de forma que o
desenvolvedor não se procupe com Javascript ou HTML. funcionalidade fornecida
por uma Aplicação JSF é similar a qualquer outra Aplicação Web. Ela possui as
seguintes partes:

 Um conjunto de Páginas Web em que são colocados os componentes;


 Um conjunto de tags para adicionar componentes à página web;
 Um conjunto de Managed Beans (ou Beans Gerenciados);
 Um Descritor de Implantação Web (web.xml);
 Um ou mais arquivos de configuração (Ex: faces-config.xml);
 Um conjunto de objetos customizados (Ex: validadores, conversores, etc);
 Um conjunto de tags customizadas para representar objetos customizados;

Pessoal, o JSF oferece diversos validadores embutidos para validar seus


Componentes UI – essa validação ocorre no lado do servidor. Eles podem ser
invocados a partir de sua tag específica e podem validar o tamanho de um campo,
tipo de entrada, range de um valor numérico, expressão regular, entre outros. É
possível, inclusive, criar o seu próprio validador customizado.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 92 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Observem a imagem acima! Uma Página Web myfacelet.xhtml é construída utilizando


tags de Componentes JSF. Essas tags são usadas para adicionar componentes à
visão (myView), que é uma representação server-side da página. Além dos
componentes, uma página web pode referenciar objetos como listeners,
validadores, conversores, entre outros.

Em resposta a uma requisição do cliente, uma página web é renderizada por um


contêiner web que implementa a tecnologia JSF! Uma de suas grandes vantagens é
que ele oferece uma clara separação entre comportamento e apresentação. Ele
mapeia solicitações HTTP para o tratamento de eventos específicos dos
componentes e gerencia os componentes como objetos stateful no servidor.

Outro importante objetivo é aproveitar componentes e conceitos já familiares aos


programadores, sem limitá-los a uma tecnologia de script ou a uma linguagem de
marcação específicas. Isso possibilita a utilização de diferentes tecnologias de
apresentação, a criação de componentes próprios a partir das classes de
componentes, e a geração de saídas para diversos dispositivos (Ex: Celular, Tablet).

O JSF fornece uma maneira fácil e amigável para criar Aplicações Web por meio de,
basicamente, três atividades:

 Criar uma Página Web (usando tags de componentes);


 Desenvolver Managed Beans;
 E mapear a instância FacesServlet.

Aqui vamos fazer uma pequena pausa! Professor, o que é um Managed Bean? São
apenas POJOs com a annotation @ManagedBeans. Pensem no seguinte: meu sistema
precisa escrever “Olá, pessoal” no navegador. Bem, esse texto não precisa de
nenhuma informação, não acessa nada, é muito simples – basta colocá-lo
16712855225

diretamente na camada de visão e mostrá-lo!

E se eu tenho que dar um “Olá, X”, em que X é o nome da pessoa que acessou o
sistema? Em outras palavras, se eu acessei, deve mostrar “Olá, Diego”; se o Messi
acessou, deve mostrar “Olá, Messi”! Para tal, eu vou precisar acessar o banco de
dados, buscar informações do sistema, talvez saber o horário de acesso, i.e., vou
precisar interagir com o modelo, lógica de negócio ou componentes visuais.

Ora, nós prezamos pela separação de responsabilidades! Logo, esse código ficará
em uma classe de modelo e, jamais, na visão. Os Managed Beans são os objetos
que intermediam a comunicação entre a visão e o modelo. Eles são registrados no

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 93 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

descritor de implantação (ou por meio de annotations) e tem seu ciclo de vida
controlado e gerenciado pelo próprio JSF!

As principais tarefas de um Managed Bean (ou Backing Beans) é fornecer dados que
serão exibidos nas telas; receber dados enviados nas requisições; executar tarefas
de acordo com as ações dos usuários; validar dados. E o que seria a FacesServlet?
uma servlet que gerencia o ciclo de vida do processamento de requisições de
aplicações web que estão utilizando JSF para construir a interface com o usuário.

Elas são responsáveis por receber as requisições da View, redirecioná-las para os


Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de
implantação web.xml das aplicações web – ele faz a conexão entre Web Container e
Web Application. Após isso, devemos configurar também o arquivo de configuração
faces-config.xml, referente a uma aplicação específica que utiliza JSF.

Ele é responsável por descrever e configurar elementos e subelementos que


compõem o projeto, tais como conversores, managed beans validadores, fluxo da
comunicação, configurações de localização e o mapeamento da navegação –
ademais, ele faz a conexão entre View e Controller. Vamos resumir essa diferença
entre esses dois arquivos?

O faces-config.xml é mais específico, tratando de regras e mapeamento de navegação;


definição de managed beans; configuração de detalhes de internacionalização;
entre outros. Já o web.xml é mais genérico, tratando da especificação de detalhes de
segurança; configuração de páginas de erro; mapeamento e declaração de servlets
e filtros; configuração de parâmetros de inicialização; entre outros.

faces-config.xml têm sido rapidamente substituído por annotations – novidade do


JSF 2.0. Essa versão trouxe: suporte a facelets; utilização de templates para a
16712855225

aplicação; simplificação do desenvolvimento de componentes; suporte nativo a Ajax


(f:ajax); navegação implícita e condicional; suporte ao Método GET; adição de novos
escopos (Flash e View); composição de componentes customizados; etc.

O JSF1 tinha os escopos Request (Default), Session e Application. A partir do JSF2,


ganhamos o View, Flash, None e Custom. O @RequestScoped vive o tempo do ciclo
de uma Requisição/Resposta HTTP; o @ViewScoped vive enquanto houver
interação com a mesma view, i.e., enquanto persistir a mesma página; o
@ApplicationScoped persiste toda a duração da aplicação web.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 94 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

O @SessionScoped persiste o tempo que durar uma sessão, i.e., até invocar um
método inválido ou o tempo acabar (lembrar de um carrinho de compras); o
@FlashScoped dura um redirecionamento de página; o @NoneScoped indica que
o escopo não está definido para a aplicação; por fim, o @CustomScoped é um
escopo personalizado.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 95 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Agora eu queria falar uma curiosidade interessante! Existe um Padrão de Projeto


Java EE chamado Front Controller. Nesse padrão, todas as requisições do usuário
são recebidas pelo mesmo componente. Dessa forma, tarefas que devem ser
realizadas em todas as requisições podem ser implementadas por esse componente
– evitando repetição de código e facilitando a manutenção do sistema.

No JSF, esse componente é o FacesServlet! Como mostra a imagem da estrutura


geral de uma Aplicação JSF, o processamento de uma requisição enviada por um
navegador começa na FacesServlet. Observem que ela controla a execução das seis
etapas do ciclo de vida, interagindo com o Model (Entidades e repositórios) e com
as Views (Telas, Templates, etc).

Os Managed Beans estão à disposição da FacesServlet durante todo o


processamento da requisição. Nas etapas Render Response e Restore View, a ela
aciona os Managed Beans para recuperar os dados que devem ser usados na
construção ou reconstrução da árvore de componentes. Na etapa Update Model, a
FacesServlet armazena nos Managed Beans os dados já convertidos e validados.

Na etapa Invoke Application, a FacesServlet dispara um método em um Managed


Bean responsável pelo processamento da regra de negócio correspondente à
requisição atual. Todas as regras de negócio são implementadas no modelo, que
também administra os dados da aplicação. Os Managed Beans acionam o modelo
para executar regras de negócio, recuperar dados administrados pelo modelo, etc.

As telas da aplicação são definidas na camada de visão. A FacesServlet acessa essa


camada toda vez que necessita construir ou reconstruir a árvore de componentes
de uma determinada tela. Isso ocorre nas etapas Restore View e Render Response.
Aliás, vamos ver agora rapidamente – porque não cai muuuuito em provas – o ciclo
de vida do JSF! Ele é apresentado na imagem abaixo:
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 96 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Pelo fato do framework JSF ser talvez uma evolução da linguagem JSP, o ciclo de
vida do JSF é parecido com o do JSP. Por exemplo, quando o cliente faz uma
Requisição HTTP para a página, o servidor responde com a página traduzida para
HTML. Porém, ele é dividido em múltiplas fases, apresentando um modelo de
componentes de interface com usuário mais sofisticado.

 Restore View: restauram-se os objetos e estruturas de dados que representam


a visão. Claro, se essa for a primeira visita à página, deve-se criar a visão. Quando
o JSF cria e renderiza uma página JSF, ele cria objetos de interface com o usuário
para cada componente da visão. Os componentes são armazenados em uma
árvore de componentes e o estado da visão é salvo para requisições futuras.

 Apply Request Values: qualquer dado que for enviado como parte da requisição
é passado para os componentes apropriados. Essas visões atualizam seus
estados com os valores dos dados. Dados podem vir de formulários, cookies
enviados com a requisição ou por meio de cabeçalhos da requisição. Alguns
dados são validados e, se houver erro, são adicionados à FacesServlet.

 Process Validation: os dados que foram submetidos com o formulário são


validados (se já não o foram anteriormente). Assim como na fase anterior, isso
ainda não atualiza os objetos de negócio na aplicação. Isso ocorre porque, se a
Aplicação atualizar os objetos de negócio junto com a validação dos dados e
uma parte da validação falhar, o modelo será atualizado com um estado inválido.

 Update Model Values: após todas essas validações terminarem, os objetos de


negócio que criam a aplicação são atualizados com os dados validados da
requisição. Ademais, se qualquer um dos dados precisar ser convertido em um
formato diferente para atualizar o modelo (Ex: String para Data), a conversão
16712855225

ocorrerá nessa fase.

 Invoke Application: durante essa fase, os métodos de ação de qualquer botão


ou link que foi ativado serão chamados. Além disso, todos os eventos que foram
gerados durante as fases anteriores e que ainda não tenham sido manipulados
são passados para a Aplicação Web para que ela possa concluir qualquer outro
processamento da requisição que seja necessário.

 Render Response: os Componentes UI de resposta são renderizados e a resposta


é enviada para o cliente. O estado dos componentes é salvo de modo que a
árvore de componente possa ser restaurada quando o cliente enviar outra

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 97 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

requisição. Em suma, essa fase renderizará a página de resposta requisitada pelo


usuário.

Lembrando que FacesContext (javax.faces.context) é o objeto utilizado para


representar todas as informações de contexto associadas ao processamento da
requisição de entrada e à criação da resposta correspondente. Ela é criada pela
FacesServlet, que é executada antes do início do ciclo de vida de processamento de
requisições e é responsável por gerenciar a execução das etapas do ciclo de vida.

Vamos falar um pouquinho sobre Component Binding! O que é isso, professor? Cara,
essa é uma nova característica da tecnologia JSF que permite associar componentes
de uma view e controlar todos os aspectos desse componente. Como assim?
Algumas vezes, nós temos um componente visual que nos oferece alguma
informação (Ex: um mapa em que o usuário escolhe estado).

Bem, em geral, nós necessitamos apenas do valor, i.e., o usuário escolheu ‘DF’. O
Component Binding permite que nós tenhamos acesso ao componente como um
todo. Para que? Nós, eventualmente, podemos querer manipular o componente
dinamicamente, por exemplo. Assim, é possível acessar métodos do componente –
se você quiser, pode até mudar seu comportamento.

FACELETS

Pessoal, tem uma característica do JSF que é extremamente importante: Facelets!


Trata-se de uma linguagem de declaração de página poderosa, apesar de leve.
Antigamente, utiliza-se a tecnologia JSP como camada de visão do JSF, porém ele
não suporta todas as características disponíveis na Plataforma Java EE – sendo
considerada obsoleta para JSF!
16712855225

Facelets é uma parte da especificação JSF e também a tecnologia de apresentação


preferida para construir aplicações JSF – substituindo JSP. Ela suporta todos os
componentes de UI do JSF e constrói Árvores de Componentes; e Views (utilizando
Templates HTML). Um tipo especial de template são os Componentes Compostos,
que agem como um componente. Ademais, é bom destacar algumas características:

 Utilização de XHTML para criação de Páginas Web;


 Suporte a Facelets Tag Libraries (além do JSFTL e JSTL);
 Suporte a Linguagens de Expressão (Expression Languages);
 Suporte a templates para componentes e páginas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 98 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Em suma, a utilização de Facelets reduz o tempo e esforço gastos no


desenvolvimento e implantação. Em geral, Facelets Views são criadas com Páginas
HTML e XHTML (criadas em conformidade com Transation DTD). Além disso, elas
utilizam linguagens de expressão para referenciar propriedades e Managed Beans.
Para desenvolver uma Aplicação Facelets simples, é necessário:

 Desenvolver um Managed Bean;


 Criar páginas usando tags de componentes;
 Definir a navegação das páginas;
 Mapear a instância javax.faces.webapp.FacesServlet;
 Adicionar declarações de Managed Beans.

FILTROS

Em JSF, um Filtro (do inglês, Filter) é um objeto capaz de realizar tarefas de filtragem
tanto na requisição de um recurso (Servlet ou conteúdo estático), ou na resposta
desse recurso, ou ambos para tal, eles utilizam o método doFilter. Todo Filtro possui
acesso a um objeto FilterConfig, do qual ele pode obter seus parâmetros de
inicialização; e a uma ServletContext, do qual ele pode carregar recursos.

Os Filtros são configurados nos descritores de implantação de uma Aplicação Web.


Ele possibilita o gerenciamento de todas as Requisições HTTP do Servidor, capaz de
filtrar o endereço que está sendo acessado. Dessa forma, quando um usuário
acessar uma determinada URL proibida, pode-se imediatamente redirecioná-lo para
outro endereço, antes que a resposta seja dada ao cliente.

Para tal, deve-se implementar a interface javax.servlet.Filter! Existem dezenas de


aplicações para filtros, além da mostrada acima. Podemos ter filtros de autenticação;
filtros de log e auditoria; filtros de conversão de imagens; filtros de compressão de
16712855225

dados; filtros de criptografia; filtros de tokenização; filtros XSLT; filtros que acionam
eventos de acesso a recursos, entre outros.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 99 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação


O JSF é um framework web embasado em interface gráfica, capaz de renderizar
componentes e manipular eventos em aplicações web no padrão Java EE, no
qual os componentes JSF são orientados a eventos. O JSF fornece, ainda,
mecanismos para conversão, validação, execução de lógica de negócios e
controle de navegação.

Comentários:

Primeiro, uma API para representar componentes e gerenciar seus estados; manipular
eventos; realizar validação server-side; converter dados; definir navegação de
páginas; suportar internacionalização e acessibilidade; e prover extensibilidade.
Segundo, glibs (bibliotecas de tags) para adicionar componentes a páginas web e
conectar componentes a objetos server-side.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Entre os itens


que o padrão Java Server Faces (JSF) utiliza, estão os componentes, os eventos
e a navegabilidade.
16712855225

Comentários:

Primeiro, uma API para representar componentes e gerenciar seus estados; manipular
eventos; realizar validação server-side; converter dados; definir navegação de
páginas; suportar internacionalização e acessibilidade; e prover extensibilidade.
Segundo, taglibs (bibliotecas de tags) para adicionar componentes a páginas web e
conectar componentes a objetos server-side.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 100 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE - 2012 - ANAC - Analista Administrativo - Área 4 A validação de dados


de um componente pode ser uma das funções de um backing bean, em uma
aplicação JSF.

Comentários:

As principais tarefas de um Managed Bean (ou Backing Beans) é fornecer dados que
serão exibidos nas telas; receber dados enviados nas requisições; executar tarefas de
acordo com as ações dos usuários; validar dados. E o que seria a FacesServlet? É uma
servlet que gerencia o ciclo de vida do processamento de requisições de aplicações
web que estão utilizando JSF para construir a interface com o usuário.

Conforme vimos em aula, Backing Beans são Managed Beans, e essa pode ser uma
de suas funções.

Gabarito: C

(CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas O JSF provê


uma linguagem de expressão exclusiva para acesso a objetos armazenados em
bancos de dados.

Comentários:

Em suma, a utilização de Facelets reduz o tempo e esforço gastos no desenvolvimento


e implantação. Em geral, Facelets Views são criadas com Páginas HTML e XHTML
(criadas em conformidade com Transationl DTD). Além disso, elas utilizam linguagens
de expressão para referenciar propriedades e Managed Beans. Para desenvolver uma
Aplicação Facelets simples, é necessário:
16712855225

Conforme vimos em aula, ela serve para referenciar propriedades e Managed Beans.

Gabarito: E

(CESPE - 2010 – TCU – Analista de Sistemas) No desenvolvimento de conteúdos


para apresentação, o uso de facelets traz vantagens em relação ao uso de JSP.
Uma delas é a maior modularidade, com o uso de templates e componentes
compostos (composite).

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 101 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Facelets é uma parte da especificação JSF e também a tecnologia de apresentação


preferida para construir aplicações JSF – substituindo JSP. Ela suporta todos os
componentes de UI do JSF e constrói Árvores de Componentes; e Views (utilizando
Templates HTML). Um tipo especial de template são os Componentes Compostos,
que agem como um componente. Ademais, é bom destacar algumas características:

Conforme vimos em aula, ela faz uso de Templates e Componentes Compostos,


que aumentam a modularidade e a reusabilidade.

Gabarito: C

(CESPE - 2012 – TJ/AL – Analista de Sistemas – B) Em um aplicativo Facelets, a


tag f:ajax adiciona funcionalidades Ajax que necessitam de adicionais de
codificação e configuração para as componentes de interface do usuário.

Comentários:

faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF


2.0. Essa versão trouxe: suporte a facelets; utilização de templates para a aplicação;
simplificação do desenvolvimento de componentes; suporte nativo a Ajax (f:ajax);
navegação implícita e condicional; suporte ao Método GET; adição de novos escopos
(Flash e View); composição de componentes customizados; etc.

Conforme vimos em aula, o suporte é nativo. Logo, não é necessário codificação e


configuração adicionais:

“By using the f:ajax tag along with another standard component in a Facelets application. This method adds Ajax
functionality to any UI component without additional coding and configuration”.
16712855225

Gabarito: E

(CESPE - 2012 – TJ/RO – Analista de Sistemas – E) JNDI, parte do projeto de JSF,


utiliza XHTML como tecnologia de apresentação dos dados, possibilitando a
separação entre as camadas de negócio e de controle.

Comentários:

Em suma, a utilização de Facelets reduz o tempo e esforço gastos no desenvolvimento


e implantação. Em geral, Facelets Views são criadas com Páginas HTML e XHTML

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 102 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(criadas em conformidade com Transationl DTD). Além disso, elas utilizam linguagens
de expressão para referenciar propriedades e Managed Beans. Para desenvolver uma
Aplicação Facelets simples, é necessário:

Conforme vimos em aula, a questão trata – na verdade – das Facelets.

Gabarito: E

(CESPE - 2013 – CPRM – Analista de Sistemas) Facelets são utilizadas para


desenvolver visões (views) JavaServer Faces (JSF) com linguagem HTML e
XHTML, em conformidade com a transitional document type definition, sendo,
ainda, compatível com a biblioteca de tag JSF.

Comentários:

Em suma, a utilização de Facelets reduz o tempo e esforço gastos no desenvolvimento


e implantação. Em geral, Facelets Views são criadas com Páginas HTML e XHTML
(criadas em conformidade com Transationl DTD). Além disso, elas utilizam linguagens
de expressão para referenciar propriedades e Managed Beans. Para desenvolver uma
Aplicação Facelets simples, é necessário:

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE - 0 – TCU – Analista de Sistemas) Para suportar a construção de


aplicações com Ajax e JSF, recomenda-se aos desenvolvedores de páginas que
usem a tag <f:ajax>, relacionada ao processamento de pedidos http assíncronos.
16712855225

Comentários:

faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF


2.0. Essa versão trouxe: suporte a facelets; utilização de templates para a aplicação;
simplificação do desenvolvimento de componentes; suporte nativo a Ajax (f:ajax);
navegação implícita e condicional; suporte ao Método GET; adição de novos escopos
(Flash e View); composição de componentes customizados; etc.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 103 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

10. (CESPE - 0 – MPU – Analista de Sistemas) Uma aplicação web deve prover
mecanismos de validação de dados. O JSF fornece vários validadores de dados
padrões que podem ser utilizados no lado do cliente (client-side).

Comentários:

Pessoal, o JSF oferece diversos validadores embutidos para validar seus Componentes
UI – essa validação ocorre no lado do servidor. Eles podem ser invocados a partir de
sua tag específica e podem validar o tamanho de um campo, tipo de entrada, range
de um valor numérico, expressão regular, entre outros. É possível, inclusive, criar o
seu próprio validador customizado.

Conforme vimos em aula, ocorre do lado servidor!

Gabarito: E

11. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas Antes de uma
aplicação web desenvolvida nos moldes da JSF executar sua primeira página
web, uma instância FacesServlet é executada, a fim de gerenciar as requisições
dessa aplicação.

Comentários:

Lembrando que FacesContext (javax.faces.context) é o objeto utilizado para representar


todas as informações de contexto associadas ao processamento da requisição de
entrada e à criação da resposta correspondente. Ela é criada pela FacesServlet, que é
executada antes do início do ciclo de vida de processamento de requisições e é
responsável por gerenciar a execução das etapas do ciclo de vida.
16712855225

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

12. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas Em aplicações


web nos padrões da JSF, é possível utilizar recursos Ajax para criar páginas
dinâmicas, como, por exemplo, por meio da tag f:ajax, conforme apresentado
na sintaxe abaixo.

h inputText value bean message >


<f:ajax />

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 104 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04
</h:inputText>

Comentários:

faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF


2.0. Essa versão trouxe: suporte a facelets; utilização de templates para a aplicação;
simplificação do desenvolvimento de componentes; porte nativo a Ajax (f:ajax);
navegação implícita e condicional; suporte ao Método GET; adição de novos escopos
(Flash e View); composição de componentes customizados; etc.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

13. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas É possível utilizar
XHTML no desenvolvimento de facelets para criar páginas web compatíveis com
a JSF (JavaServer Faces) para apresentação dos dados. Na versão Java EE 7, essa
forma de apresentação é mais indicada que a JSP (JavaServer Pages), uma vez
que esta não suporta todos os novos recursos da versão Java EE 7.

Comentários:

Pessoal, tem uma característica do JSF que é extremamente importante: Facelets!


Trata-se de uma linguagem de declaração de página poderosa, apesar de leve.
Antigamente, utiliza-se a tecnologia JSP como camada de visão do JSF, porém ele
não suporta todas as características disponíveis na Plataforma Java EE – sendo
considerada obsoleta para JSF!

Conforme vimos em aula, a questão está perfeita!


16712855225

Gabarito: C

14. (CESPE - 5 – TCU - Analista de Sistemas A partir da interpretação do trecho


JSF (JavaServer Faces), versão 2, no código a seguir, verifica-se que uma
providência válida é configurar o managed-bean clientePage no arquivo faces-
config.xml.

<f:view>
<h:form id clienteForm >
<h:outputLabel for informeNome value Informe Nome />
<h:inputText id informeNome value {clientePage.nome} />
<h:commandButton value Nome do Cliente

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 105 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04
action {clientePage.cliente} />
</h:form>
</f:view>

Comentários:

O faces-config.xml é mais específico, tratando de regras e mapeamento de navegação;


definição de managed beans; configuração de detalhes de internacionalização; entre
outros. Já o web.xml é mais genérico, tratando da especificação de detalhes de
segurança; configuração de páginas de erro; mapeamento e declaração de servlets e
filtros; configuração de parâmetros de inicialização; entre outros.

Conforme vimos em aula, a questão está perfeita! É possível declarar managed


beans por meio de anotações ou por meio do arquivo de configuração faces-config.xml.

Gabarito: C

15. (CESPE - 3 – INPI - Analista Judiciário - Análise de Sistemas Quando


registrado em JSF 2 (Java Server Faces), um managed bean permanece no
escopo de session.

Comentários:

JSF1 tinha os escopos Request (Default), Session e Application. A partir do JSF2,


ganhamos o View, Flash, None e Custom. O @RequestScoped vive o tempo do ciclo
de uma Requisição/Resposta HTTP; o @ViewScoped vive enquanto houver interação
com a mesma view, i.e., enquanto persistir a mesma página; o @ApplicationScoped
persiste toda a duração da aplicação web.

No JSF2, o Escopo Request continua sendo o padrão (default)!


16712855225

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 106 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FCC – 2013 – TRT/12 – Analista de Sistemas) Considere as instruções abaixo


encontradas em um arquivo de uma aplicação que utiliza JSF:

<managed-bean>
<managed-bean-name>func</managed-bean-name>
<managed-bean-class>bean.Funcionario</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Essas instruções indicam a existência de um bean gerenciado (classe


Funcionario.java) no pacote bean que poderá ser referenciado nas páginas JSP
por meio da palavra func. O arquivo correto no qual essas instruções são
colocadas é o:

a) context.xml.
b) web-inf.xml.
c) web.xml.
d) faces-config.xml.
e) config-bean.xml.

Comentários:

Elas são responsáveis por receber as requisições da View, redirecioná-las para os


Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de
implantação web.xml das aplicações web – ele faz a conexão entre Web Container e
16712855225

Web Application. Após isso, devemos configurar também o arquivo de configuração


faces-config.xml, referente a uma aplicação específica que utiliza JSF.

Conforme vimos em aula, o responsável é o faces-config.xml.

Gabarito: D

(FCC - 2012 - -PE - Programador de computador Em uma aplicação que utiliza


JSF, para configurar o fluxo de comunicação presente na servlet de controle, é
utilizado um arquivo de configuração:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 107 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

a) webfaces.xml.
b) actionform.xml.
c) faces-config.xml.
d) webcontext.xml.
e) serverconfig.xml.

Comentários:

Elas são responsáveis por receber as requisições da View, redirecioná-las para os


Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de
implantação web.xml das aplicações web – ele faz a conexão entre Web Container e
Web Application. Após isso, devemos configurar também o arquivo de configuração
faces-config.xml, referente a uma aplicação específica que utiliza JSF.

Ele é responsável por descrever e configurar elementos e subelementos que compõem


o projeto, tais como conversores, managed beans, validadores, fluxo da comunicação,
configurações de localização e o mapeamento da navegação – ademais, ele faz a
conexão entre View e Controller. Vamos resumir essa diferença entre esses dois
arquivos?

Conforme vimos em aula, trata-se do faces-config.xml.

Gabarito: C

(FCC – 2013 – TRT/9 – Analista de Sistemas) Uma aplicação utilizando o


framework JSF e a IDE NetBeans gera automaticamente dois componentes
essenciais assim descritos:

I. É responsável por receber requisições dos componentes View do MVC,


16712855225

redirecioná-las para os beans gerenciados (managed beans) do componente


Model do MVC e responder a essas requisições.

II. É o arquivo principal de configuração de uma aplicação web que utiliza o


framework JSF. É responsável por descrever os elementos e sub-elementos que
compõem o projeto, tais como as regras de navegação, beans gerenciados,
configurações de localização etc.

As descrições I e II referem-se, respectivamente, aos componentes:

a) servlet Controller.java e ao arquivo faces_config.xml

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 108 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

b) FaceletServlet e ao arquivo web_config.xml.


c) FacesServlet e ao arquivo faces-config.xml.
d) servlet Controller e ao arquivo web-config.xml.
e) servlet Facelet e ao arquivo web.xml.

Comentários:

Elas são responsáveis por receber as requisições da View, redirecioná-las para os


Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de
implantação web.xml das aplicações web – ele faz a conexão entre Web Container e
Web Application. Após isso, devemos configurar também o arquivo de configuração
faces-config.xml, referente a uma aplicação específica que utiliza JSF.

Ele é responsável por descrever e configurar elementos e subelementos que compõem


o projeto, tais como conversores, managed beans, validadores, fluxo da comunicação,
configurações de localização e o mapeamento da navegação – ademais, ele faz a
conexão entre View e Controller. Vamos resumir essa diferença entre esses dois
arquivos?

Conforme vimos em aula, o primeiro é o FacesServlet e o segundo faces-config.xml.

Gabarito: C

(FCC – 2012 – TST – Analista de Sistemas) O framework JavaServer Faces (JSF) é


utilizado no desenvolvimento de aplicações web que utiliza o design pattern
MVC. O JSF:

a) disponibiliza controles pré-construídos e código para manipular eventos,


estimulando o uso de código Java convencional no componente View do MVC.
16712855225

b) recebe requisições dos componentes da View do MVC, através do servlet


FaveServerServlet.

c) armazena os mapeamentos das ações e regras de navegação em projetos JSF


nos arquivos WEB-INF.xml e FACES-CONFIG.xml.

d) possui bibliotecas que suportam Ajax (Asynchronous JavaScript And XML).

e) provê um conjunto de tags limitado para criar somente páginas HTML/XHTML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 109 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Comentários:

Ora, nós prezamos pela separação de responsabilidades! Logo, esse código ficará em
uma classe de modelo e, jamais, na visão. Os Managed Beans são os objetos que
intermediam a comunicação entre a visão e o modelo. Eles são registrados no
descritor de implantação (ou por meio de annotations) e tem seu ciclo de vida
controlado e gerenciado pelo próprio JSF!

(a) Conforme vimos em aula, está incorreto, i.e., é desestimulado colocar código
convencional (regras de negócio) na View, mas – sim – no Model.

Elas são responsáveis por receber as requisições da View, redirecioná-las para os


Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de
implantação web.xml das aplicações web – ele faz a conexão entre Web Container e
Web Application. Após isso, devemos configurar também o arquivo de configuração
faces-config.xml, referente a uma aplicação específica que utiliza JSF.

(b) Conforme vimos em aula, de fato recebe requisições dos componentes da View,
no entanto o nome da servlet é FacesServlet.

Elas são responsáveis por receber as requisições da View, redirecioná-las para os


Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de
implantação web.xml das aplicações web – ele faz a conexão entre Web Container e
Web Application. Após isso, devemos configurar também o arquivo de configuração
faces-config.xml, referente a uma aplicação específica que utiliza JSF.

Ele é responsável por descrever e configurar elementos e subelementos que compõem


o projeto, tais como conversores, managed beans, validadores, fluxo da comunicação,
configurações de localização e o mapeamento da navegação – ademais, ele faz a
16712855225

conexão entre View e Controller. Vamos resumir essa diferença entre esses dois
arquivos?

(c) Conforme vimos em aula, o mapeamento de ações e regras de navegação é


responsabilidade somente do faces-config.xml.

faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF


2.0. Essa versão trouxe: suporte a facelets; utilização de templates para a aplicação;
simplificação do desenvolvimento de componentes; suporte nativo a Ajax (f:ajax);
navegação implícita e condicional; suporte ao Método GET; adição de novos escopos
(Flash e View); composição de componentes customizados; etc.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 110 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(d) Conforme vimos em aula, a questão está perfeita! O Ajax não só é suportado,
esse suporte é nativo.

Galera, ele provê um modelo de programação bem definido e robusto, além de


fornecer diversas taglibs – inclusive o desenvolver pode criar sua própria taglib. Essas
taglibs contêm manipuladores de tags que implementam os componentes de tags.
Essas características facilitam significativamente o peso da construção e manutenção
de Aplicações Web com interfaces de usuário server-side.

(e) Conforme vimos em aula, não se trata de um conjunto limitado de tags. É possível
criar suas próprias tags!

Gabarito: D

(FCC – 2012 – TST – Analista de Sistemas) Para criar as páginas XHTML de uma
aplicação JSF é possível utilizar um conjunto de bibliotecas de tags JSF. Algumas
dessas bibliotecas são HTML, Core e Facelets. Considere os fragmentos de
códigos abaixo, que utilizam tags dessas bibliotecas:

16712855225

A correlação correta entre o fragmento de código e a biblioteca de tags utilizada


é:

a) I-Facelets, II-HTML e III-Core.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 111 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

b) I-Core, II-Facelets, e III-HTML.


c) I-HTML, II-Core, e III-Facelets.
d) I-HTML, II-Facelets, e III-HTML.
e) I-HTML, II-HTML, e III-Core.

Comentários:

O Modelo de Componentes JSF define três taglibs:

 HTML: possui componentes que representam diversos elementos HTML.


o Namespace: xmlns:h=”http://java.sun.com/jsf/html”
 CORE: responsável por internacionalização, validação, conversão e outros.
o Namespace: xmlns:f=”http://java.sun.com/jsf/core”
 FACELETS: fornece tags para criar templates para aplicações web.
o Namespace: xmlns: =”http://java.sun.com/jsf/facelets”

Conforme vimos em aula, temos que olhar os namespaces. Dessa forma, o primeiro
fragmento é referente a FACELETS; o segundo fragmento é referente a HTML; e o
terceiro referente a CORE.

Gabarito: A

(FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas No JSF, o


componente Controller do MVC é composto por uma classe servlet, por arquivos
de configuração e por um conjunto de manipuladores de ações e observadores
de eventos. Essa servlet é chamada de:

a) ControllerServlet.
b) Facelet. 16712855225

c) HttpServlet.
d) FacesConfig.
e) FacesServlet.

Comentários:

As principais tarefas de um Managed Bean (ou Backing Beans) é fornecer dados que
serão exibidos nas telas; receber dados enviados nas requisições; executar tarefas de
acordo com as ações dos usuários; validar dados. E o que seria a FacesServlet? É uma
servlet que gerencia o ciclo de vida do processamento de requisições de aplicações
web que estão utilizando JSF para construir a interface com o usuário.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 112 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, trata-se da FacesServlet.

Gabarito: E

(FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas No ciclo de vida


do Java Server Faces trata-se da fase na qual o componente deve primeiro ser
criado ou recuperado a partir do FacesContext, seguido por seus valores, que
são geralmente recuperados dos parâmetros de request e, eventualmente, dos
cabeçalhos ou cookies gerados. Trata-se da fase:

a) Restore View.
b) Apply Request Values.
c) Process Validation.
d) Update Model Values.
e) Invoke Application.

Comentários:

 Apply Request Values: qualquer dado que for enviado como parte da requisição é
passado para os componentes apropriados. Essas visões atualizam seus estados
com os valores dos dados. Dados podem vir de formulários, cookies enviados com
a requisição ou por meio de cabeçalhos da requisição. Alguns dados são validados
e, se houver erro, são adicionados à FacesServlet.

Conforme vimos em aula, trata-se da fase Apply Request Values.

Gabarito: B
16712855225

(FCC - 2012 - TRT - 11ª Região (AM) - Técnico Judiciário - Tecnologia da


Informação Sobre o framework JavaServer Faces é correto afirmar:

a) A grande limitação do JSF é a dificuldade de integração com outros


frameworks como Spring, JPA e EJB.

b) Expression Language (EL) é a linguagem utilizada para apresentação de


conteúdo em aplicações que utilizam JSF. Sua principal limitação é a
impossibilidade de acessar valores e métodos em beans gerenciados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 113 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

c) Facelets é uma parte da especificação JSF e também a tecnologia para


implementar as regras de negócio em aplicações que utilizam JSF.

d) Disponibiliza as bibliotecas de tags core e html para criar as páginas que


compõem a interface do usuário.

e) Define uma única forma para realizar a validação de dados em formulários


JSP, por meio da implementação de uma classe de validação que estende a
interface Validator.

Comentários:

(a) Na verdade, está na Camada Web, facilmente integrável com Spring, JPA e EJB;
(b) Na verdade, é facilmente possível;
(c) Na verdade, Facelets tratam da camada de visão e, não, de regras de negócio;
(d) Perfeito, basta utilizar várias taglibs prontas ou criá-las;
(e) Na verdade, existem diversas formas.

Gabarito: D

(FCC - 2011 - TRE-AP - Técnico Judiciário - Programação de Sistemas O JSF


extrai todos os valores digitados pelo usuário e guarda esse valor nos seus
respectivos componentes. Se o valor digitado não coincidir com o componente,
um erro vai ser adicionado na classe FacesContext e será mostrado na fase
Render Response Phase.

No ciclo de vida do JSF trata-se de um evento típico da fase:

a) Process Validations Phase. 16712855225

b) Restore View Phase.


c) Apply Request Values Phase.
d) Update Model Values Phase.
e) Invoke Application Phase.

Comentários:

 Apply Request Values: qualquer dado que for enviado como parte da requisição é
passado para os componentes apropriados. Essas visões atualizam seus estados
com os valores dos dados. Dados podem vir de formulários, cookies enviados com

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 114 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

a requisição ou por meio de cabeçalhos da requisição. Alguns dados são validados


e, se houver erro, são adicionados à FacesServlet.

Conforme vimos em aula, trata-se da fase Apply Request Values.

Gabarito: C

10. (FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas No ciclo


de vida do JSF copiar os parâmetros de requisição para valores submetidos pelos
componentes, é a tarefa típica da fase:

a) Restaurar Visão (Restore view).


b) Invocar aplicação (Invoke application).
c) Aplicar valores de requisição (Apply request values).
d) Processar validações (Process validation).
e) Atualizar valores do modelo (Update model values).

Comentários:

 Apply Request Values: qualquer dado que for enviado como parte da requisição é
passado para os componentes apropriados. Essas visões atualizam seus estados
com os valores dos dados. Dados podem vir de formulários, cookies enviados com
a requisição ou por meio de cabeçalhos da requisição. Alguns dados são validados
e, se houver erro, são adicionados à FacesServlet.

Conforme vimos em aula, trata-se da fase Apply Request Values.

Gabarito: C
16712855225

11. (FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da
Informação É um framework MVC utilizado no desenvolvimento de aplicações
para a internet de forma visual, que utiliza o recurso de arrastar e soltar os
componentes na tela para definir suas propriedades:

a) Enterprise JavaBeans.
b) JavaServer Faces.
c) Java 2 Enterprise Edition.
d) Servlets.
e) Java Server Pages.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 115 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

Comentários:

O resultado foi a criação do framework Struts! Ele era uma implementação da


Arquitetura MVC para desenvolvimento de páginas web dinâmicas! Bacana? Esse
framework fez tanto sucesso que a Sun Microsystems junto com uma comunidade de
desenvolvedores resolveu criar uma especificação padronizada baseada nesse
framework, denominado Java Server Faces (JSF).

Conforme vimos em aula, trata-se do JSF!

Gabarito: B

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 116 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FGV - 2013 – ALEMA - Analista de Sistemas Com relação à especificação Java


Server Faces (JSF), assinale V para a afirmativa verdadeira e F para a falsa.

( ) Visa substituir a especificação Java Server Pages.

( ) Java Server Faces são usadas como uma fachada para Servlets e Java Server
Pages.

( ) Define um framework MVC (Model View Controler) para aplicações Web.

As afirmativas são, respectivamente,

a) F, F e V.
b) F, V e V.
c) V, F e F.
d) V, V e F.
e) F, V e F.

Comentários:

Facelets é uma parte da especificação JSF e também a tecnologia de apresentação


preferida para construir aplicações JSF – substituindo JSP. Ela suporta todos os
16712855225

componentes de UI do JSF e constrói Árvores de Componentes; e Views (utilizando


Templates HTML). Um tipo especial de template são os Componentes Compostos,
que agem como um componente. Ademais, é bom destacar algumas características:

(F) Conforme vimos em aula, Facelets vieram para substituir JSP e, não, JSF!

Essa eu vou explicar melhor, porque sempre me perguntar: se eu afirmar que o


Facebook visava substituir o MSN, isso é certo ou errado? Errado, ele está em um
contexto muito maior; uma de suas funcionalidades (chat) veio de fato a substituir o
MSN! JSF é um framework imenso, com centenas de funcionalidades. Ora, eu não

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 117 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

posso afirmar que ele visa substituir JSP! Na verdade, uma de suas funcionalidades
vem substituindo JSP, mas não o JSF como um todo.

(F) Não, esse item não faz nenhum sentido.

O resultado foi a criação do framework Struts! Ele era uma implementação da


Arquitetura MVC para desenvolvimento de páginas web dinâmicas! Bacana? Esse
framework fez tanto sucesso que a Sun Microsystems junto com uma comunidade de
desenvolvedores resolveu criar uma especificação padronizada baseada nesse
framework, denominado Java Server Faces (JSF).

(V) Perfeito, implementa o padrão MVC!

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 118 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JAVA EE

(CESPE – – INMETRO – Analista de Sistemas) São exemplos de tipos de


componentes de software reusáveis desenvolvidos na plataforma JEE: JSP (Java
Server Page); biblioteca de tags; Servlet; EJB. O grau de reúso provido por esses
componentes, EJBs e JSPs, é usualmente superior a bibliotecas de TAG.

(CESPE – – SERPRO – Analista de Sistemas) A tecnologia Enterprise


JavaBeans (EJB) é uma arquitetura de componentes do tipo cliente que atua na
plataforma J2EE.

(CESPE - 2010 – TCU – Auditor Federal de Controle Externo) A web profile da


plataforma JEE apresenta, em relação ao perfil application server definido em
edições anteriores da plataforma Java, as seguintes vantagens: fornece suporte
para POJOs (Plain Old Java Objects) e Annotations; possui modelo de
empacotamento de componentes mais simples; a configuração dos seus
descritores XML (extensible markup language) é mais fácil; é aderente ao padrão
SOA.

(CESPE - 2010 – TRE/MT – Analista Judiciário – Tecnologia da Informação – A)


Clientes J2EE são necessariamente páginas web dinâmicas que normalmente não
fazem acessos a banco de dados, nem executam regras de negócio complexas.

(CESPE - 2010 – TRE/MT – Analista Judiciário – Tecnologia da Informação – D)


Um componente J2EE é uma unidade funcional de software autocontida, escrito
na linguagem de programação Java e executado exclusivamente em servidores.
16712855225

(CESPE - 2011 – PREVIC – Analista de Sistemas) Em uma aplicação multicamadas


na plataforma Java EE, servlets, JavaServer Faces e JSP consistem em tecnologias
utilizadas na camada web.

(ESAF – 2012 – CGU – Analista de Finanças e Controle) Os níveis da plataforma


J2EE são:

a) Patrocinador. Web. Negócios. Sistemas de Computação Corporativos.


b) Cliente. Web. Negócios. Sistemas de Informação Corporativos.
c) Cliente. Interno. Externo. Negócios.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 119 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

d) Fornecedor. Web. Político. Sistemas de Informação Camada.


e) Cliente. Stakeholders. Negócios. Background corporativo.

(CESGRANRIO – 2008 – BNDES – Analista de Sistemas) Uma aplicação


empresarial contendo componentes EJB e módulos web deverá ser publicada
em um servidor de aplicações compatível com J2EE. No contexto do
empacotamento dessa aplicação para publicação (deploy), é correto afirmar que:

a) não há como juntar componentes EJB e módulos web em uma mesma


aplicação, pois deverão ser publicados separadamente.

b) um arquivo EAR poderá conter arquivos WAR e JAR representativos dos


módulos web e EJB.

c) o tamanho do pacote, em bytes, sempre fica maior que o código original, em


virtude do algoritmo empregado no empacotamento da aplicação em um
arquivo EAR.

d) módulos web não devem ser empacotados, pois isso inviabiliza seu acesso
pela Internet.

e) arquivos JAR servem apenas para empacotar componentes EJB.

(FCC – 2011 – TRT/19 – Analista de Sistemas) A especificação Java EE define os


seguintes componentes:

I. Clientes da aplicação (Application Clients) e applets.


II. Java Servlet, JavaServer Faces e JavaServer Pages.
III. Enterprise Javabeans (EJB). 16712855225

Os componentes I, II e III rodam, respectivamente, em:

a) cliente, cliente, servidor.


b) servidor, cliente, servidor.
c) cliente, servidor, servidor.
d) servidor, cliente, cliente.
e) cliente, servidor, cliente.

10. (FCC - 2011 - TRT - 1ª REGIÃO (RJ) - Analista Judiciário - Tecnologia da


Informação) J2EE é uma plataforma de programação para servidores na

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 120 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

linguagem de programação Java, que integra uma série de especificações e


containers, cada uma com funcionalidades distintas. Nesse contexto, é correto
afirmar que são integrantes do J2EE:

a) Servlets, Jcompany e JSP.


b) JDBC, JSP, EJBs.
c) EJBs, Servlets e JBoss.
d) JDBC, Hibernate e JPA.
e) JSP, JSF e Eclipse.

11. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da
Informação) O Contêiner J2EE que fornece aos desenvolvedores o ambiente
para rodar Java Server Pages (JSPs) e servlets é:

a) Applet (Applet container).


b) Enterprise Java Beans (EJB).
c) Interface (Interface container).
d) do cliente do aplicativo (Application client container).
e) Web (Web container).

12. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web) São apenas tipos de componentes executados em servidores Web:

a) Beans, Servlets e J2EE.


b) JVM, Servlets e JSP.
c) Beans, Servlets e JSP.
d) Beans, Swing e JSP.
e) Beans, Swing e JVM.
16712855225

13. (FCC - 2014 – TRT/2 – Analista de Sistemas) Um contêiner Java EE pode oferecer
serviços como gestão de memória, ciclo de vida e estado de objetos, conexões,
transações, serviços de nomes, segurança, tolerância a falhas, integração,
clustering, alta disponibilidade, confiabilidade e web services. Um servidor Java
EE completo disponibiliza dois tipos principais de contêiner, que são:

a) Contêiner MVC e Contêiner EJB.


b) Applet Container e Web Container.
c) Contêiner Web e Contêiner EJB.
d) Servlet Container e JSP Container.
e) Application Client Container e Web Container.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 121 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

14. (FCC – 2012 – TJ/PE – Analista de Sistemas) Sobre a plataforma Java EE 6, é


correto afirmar:

a) Simplifica a implantação sem a necessidade de descritores de implantação,


com exceção do descritor de implantação exigido pela especificação servlet, o
arquivo web.xml.

b) Necessita do descritor de implantação ejb-jar.xml e entradas relacionadas aos


web services no arquivo web.xml.

c) Faz uso de anotações (annotations). Anotações são modificadores Java,


semelhantes aos públicos e privados, que devem ser especificados nos arquivos
de configuração XML.

d) A especificação EJB 3, que é um subconjunto da especificação Java EE, define


anotações apenas para o tipo bean.

e) Anotações são marcados com um caracter # (cerquilha).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 122 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


JSP
(CESPE – 2013 – CNJ – Analista de Sistemas Como forma de incluir dinamismo
em páginas JSP, é possível incluir blocos de código Java conhecidos como
scriptlets.

(CESPE – 2011 – PREVIC – Analista de Sistemas O container JSP provê uma lista
de objetos instanciados, chamados de objetos implícitos. É através do objeto
aplicação (application object) que são rastreadas as informações de um cliente
específico entre múltiplas requisições.

(CESPE – 2013 – TRT/10 – Analista de Sistemas Nas páginas JSP, combinam-se


modelos estáticos, incluindo fragmentos de HTML ou XML, com o código para
gerar conteúdo dinâmico e compilar páginas JSP dinamicamente em servlets,
quando solicitado.

(CESPE – 2013 – TRT/10 – Analista de Sistemas O JSP, cuja base é a linguagem


de programação Java, tem portabilidade de plataforma, o que o permite ser
executado em diversos sistemas operacionais, como o Windows e o Linux.

(CESPE – 2013 – TRT/10 – Analista de Sistemas Para usar o JSP com Java
embutido e algumas tags de marcação complexas, o programador tem de
conhecer a fundo as complexidades do desenvolvimento de aplicações.

(CESPE - 2013 - SERPRO - Analista - Suporte Técnico Um scriptlet na tecnologia


JSP (Java server pages) abrange todo o código entre "<#" e "#>".
16712855225

(CESPE - 2011 - CBM-DF - Oficial Bombeiro Militar Complementa - Informática


O uso de Javabeans, o controle de transferência entre as páginas e o suporte
independente de applets Java pelos browsers são possibilidades proporcionadas
pela action tag da JSP.

(CESPE - 2011 - PREVIC - Analista de Tecnologia da Informaç Em uma


aplicação multicamadas na plataforma Java EE, servlets, JavaServer Faces e JSP
consistem em tecnologias utilizadas na camada web.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 123 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


JSP
(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) As tags
utilizadas em uma página JSP para importar classes de um pacote, habilitar o
uso de bibliotecas de classes (por exemplo, JSTL) e incluir arquivos (por exemplo,
JSP Fragments) são conhecidas como tags:

a) diretivas.
b) de scriptlet.
c) de declaração.
d) de expressão.
e) standard action.

(FCC - - PGE- - Técnico Superior de Análise de Sistemas e Métodos)


Blocos ou trechos de operações em código Java podem ser incluídos em uma
página JSP por meio de:

a) diretiva page.
b) diretiva include.
c) comentário.
d) taglib.
e) scriptlet.

(FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da


Informação) Na diretiva page, do JSP, podemos utilizar o atributo import que
permite: 16712855225

a) configurar arquivos html.


b) importar figuras.
c) configurar pacotes.
d) importar arquivos htm
e) importar pacotes.

(FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da


Informação) Em JSP, a diretiva taglib define:

a) uma biblioteca de tags para serem usadas na página.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 124 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

b) um conjunto de classes importadas para serem usadas na página.


c) uma nova tag para ser usada na página.
d) uma biblioteca para ser inserida na página.
e) um módulo logicamente coesivo.

(FCC - 2008 - MPE-RS - Técnico em Informática - Área Sistemas) Para incluir


blocos de código Java em uma página JSP utiliza-se a categoria de tags
denominada:

a) diretivas.
b) expressões.
c) declarações.
d) scriptlets.
e) comentários.

(FCC - 2010 - METRÔ- - Analista - Tecnologia da Informação Na diretiva page,


do JSP, utiliza-se o atributo import, que permite:

a) configurar pacotes.
b) importar arquivos html.
c) importar pacotes.
d) configurar arquivos html.
e) importar figuras.

(FCC - 2012 - TRE-SP - Técnico Judiciário - Programação de Sistemas No


JavaServer Pages a tag <%=conteúdo %> é uma:

a) Declaration tag.
b) Directive tag. 16712855225

c) Scriplet tag.
d) Action tag.
e) Expression tag.

(FCC - 2011 – TRE/AP – Analista de Sistemas – A) Em JSP o conceito de classes e


objetos não leva em conta os princípios de proteção de dados tanto nas
propriedades quanto nos métodos.

(FCC - 2011 – TRE/AP – Analista de Sistemas – C) Em JSP pode-se chamar o


construtor do objeto pai em qualquer parte do código e não há tratamento de
exceções nos métodos nativos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 125 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

10. (FCC - 2010 – MPU – Analista de Sistemas O contêiner, que executa JSP,
transforma o programa JSP em Servlet, assim, a expressão “<%=
Math.Random()%>” se torna argumento para out.println().

11. (FCC - 2011 – TRE/AP – Analista de Sistemas – A) Para que métodos estáticos de
classes Java sejam executados a partir das funções da linguagem de expressão
em JSP, é necessário que o nome da função coincida com o nome do método
da classe Java.

12. (FCC - 2009 – TCE/SP – Analista de Sistemas – A) Quando se usa classes do tipo
bean, não é necessário instanciar explicitamente um objeto da classe para poder
acessar seus métodos. A instância do objeto é criada pelo elemento especial:

a) <jsp:useJavaBean/>
b) <jsp:useJava/>
c) <jsp:useBean.Java/>
d) <jsp:useJava.Bean/>
e) <jsp:useBean/>

13. (FCC - – TCE/ – Analista de Sistema Nas páginas dinâmicas escritas em


JSP, para declaração de atributos ou métodos, utilizam-se as tags:

a) <% %>
b) <%! %>
c) <%= %>
d) <%-- --%>
e) /* */
16712855225

14. (FCC – 2012 – TST – Analista de Sistemas Páginas JavaServer Pages são páginas
web:

a) que permitem combinar códigos Java, HTML estático, CSS, XML e JavaScript.
b) escritas em Java, sem código HTML.
c) Interpretadas e não compiladas.
d) Transformadas em bytecode e executadas no cliente.
e) Combinadas com servlets no desenvolvimento exclusivo de páginas estáticas.

15. (FCC – – TRT/3 – Analista de Sistemas) NÃO possui uma habilidade de


armazenar e recuperar valores de atributos arbitrários o objeto implícito de JSP:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 126 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

a) Session.
b) Request.
c) Exception.
d) Application.
e) pageContext.

16. (FCC – 2007 – TRF/4 – Analista de Sistemas Uma ferramenta usada


especificamente para gerar páginas dinâmicas de HTML, baseada em
programação Java, é:

a) o WSDL.
b) o DTD.
c) a JCP.
d) a XSL.
e) o JSP.

17. (FCC – 2013 – ALERN – Analista de Sistemas) Em uma aplicação web


desenvolvida utilizando a plataforma Java EE 6, há a seguinte classe Java:

package dados;

public class Cliente {


private String nome;
public Cliente() {
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
} 16712855225

Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe
pode-se utilizar a tag:

a) <jsp:setBean name="cliente" class="dados.Cliente"/>


b) <jsp:setBean id="cliente" class="dados.Cliente"/>
c) <jsp:useBean name="cliente" class="dados.Cliente"/>
d) <jsp:useBean id="cliente" class="dados.Cliente"/>
e) <jsp:newInstance id="cliente" class= "dados.Cliente"/>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 127 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

18. (FCC - 2012 - MPE-PE - Analista Ministerial - Informática Em uma aplicação web
Java que utiliza JSP, as linhas de código comuns a diversas páginas podem ser
criadas em um arquivo ..I.. , que pode ser incluído nas páginas utilizando-se a
diretiva ..II.. .

As lacunas I e II são preenchidas correta e respectivamente por

a) I. Javascript, <%@page
II. file="caminho/nome_do_arquivo"%>.
b) I. Java Servlet, <%@include
II. uri="caminho/nome_do_arquivo"%>.
c) I. JSTL, <%@taglib
II. uri="caminho/nome_do_arquivo"%>.
d) I. JSF, <%@page
II. import="caminho/nome_do_arquivo%>.
e) I. JSPF, <%@include
II. file="caminho/nome_do_arquivo"%>.

19. (FCC - 2012 - MPE-PE - Analista - Tecnologia da Informação) Em uma página


JSP, para importar uma classe de um pacote e para fazer referência a uma
biblioteca (como, por exemplo, JSTL) podem ser utilizadas, respectivamente, as
diretivas:

a) <%@page import=“pacote.Classe”%> e <%@taglib uri=“caminho/biblioteca”


prefix=“prefixo”%>.
b) <%@include import= “pacote.Classe”%> e <%@taglib
uri=“caminho/biblioteca”%>.
c) <%import= “pacote.Classe”%> e <%taglib uri=“caminho/biblioteca”%>.
d) <%@page include= “pacote.Classe”%>
16712855225

e <%@library
uri=“caminho/biblioteca”%>.
e) <%@import class= “pacote.Classe”%> e <%@taglib
urli=“caminho/biblioteca”%>.

(FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas <%@ page


atributo1="valor1" atributo2="valor2"... %> é a sintaxe típica da diretiva Page, em
JSP. Um de seus atributos, se definido para true, indica o processamento normal
do servlet quando múltiplas requisições podem ser acessadas simultaneamente
na mesma instância de servlet. Trata-se do atributo:

a) Extends.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 128 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

b) Import.
c) isThreadSafe.
d) Session.
e) AutoFlush.

21. (FCC - - MPE-RS - Técnico em Informática - Área Sistemas) Se uma super


classe de servlet deve ser gerada, será definida na diretiva page do JSP por meio
do atributo:

a) info.
b) extends.
c) session.
d) import.
e) autoFlush.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 129 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JSP

(FGV - – Senado Federal – Analista de Sistemas) No contexto do


Desenvolvimento WEB JAVA, analise as afirmativas a seguir, a respeito da
tecnologia JSP ("JavaServer Page"):

I. Disponibiliza uma tecnologia simples e rápida para criar páginas que exibem
conteúdo gerado dinamicamente, define a interação entre o servidor e a página
JSP, e descreve o formato e sintaxe da página.

II. Emprega servlets - programas escritos na linguagem Java e executados no


servidor, em oposição aos applets, executados no browser do cliente.

III. Utiliza páginas JSP, com extensão .jsp ou .jspx, criadas pelo desenvolvedor da
web e que incluem especificações JSP e tags customizadas, em combinação com
outras tags estáticas, HTML ou XML.

Assinale:

a) se somente a afirmativa I estiver correta.


b) se somente as afirmativas I e II estiverem corretas.
c) se somente as afirmativas I e III estiverem corretas.
d) se somente as afirmativas II e III estiverem corretas.
e) se todas as afirmativas estiverem corretas.

(CESGRANRIO – 2010 – BNDES – Analista de Sistemas É característica de um


16712855225

arquivo JSP a:

a) compilação em um servlet.
b) presença maciça de código Assembly.
c) impossibilidade de inclusão de comentários.
d) execução exclusiva em sistemas Windows.
e) execução exclusiva em sistemas Linux.

(NCE – – BNDES – Analista de Sistemas Considere as seguintes afirmativas


sobre JSP e Servlets:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 130 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

I. É possível usar uma página JSP para gerar um arquivo de imagem do tipo
JPEG, GIF ou PNG.
II. Um servlet é executado no servidor, ao passo que uma página JSP é
executada no browser do cliente.
III. Uma página gerada por um servlet não pode conter código Javascript.
IV. Uma página JSP é executada no servidor enquanto que um servlet é
executado no browser do cliente.

A quantidade de afirmativas corretas é:

a) 0;
b) 1;
c) 2;
d) 3;
e) 4.

(CESGRANRIO – 2012 – CEF – Analista de Sistemas) Um objeto implícito é


utilizado dentro de páginas JSP sem que haja necessidade de declará-lo. Que
objeto é esse?

a) Integer.
b) queryString.
c) getParameter.
d) String.
e) Request.

(FMP-RS - 2013 - MPE-AC - Analist - Tecnologia da Informação) No contexto


de arquitetura Java Enterprise Edition, ___________________ é uma tecnologia que
simplifica o processo de gerar páginas dinamicamente, pois permite embutir Java
16712855225

diretamente em uma página HTML ou XML.

Assinale a única alternativa que completa corretamente a lacuna acima:

a) Java Virtual Machine (JVM)


b) JavaServer Pages (JSP)
c) Java ME (Java Micro Edition)
d) Enterprise JavaBeans (EJB)
e) Java Persistence API (JPA)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 131 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESGRANRIO - 2011 - FINEP - Analista - senvolvimento de Sistemas Qual


ação padrão do JSP interrompe o processamento das requisições pela página
corrente e as direciona para outro componente Web?

a) <jsp:invoke>
b) <jsp:include>
c) <jsp:forward>
d) <jsp:plugin>
e) <jsp:call>

(ESAF - - - Analista Administrativo - Tecnologia da Informação -


Desenvolvimento O mecanismo de inclusão, que permite o conteúdo dinâmico
ser incluído em uma JSP em tempo de solicitação, é denominado:

a) Ação <jsp:plugin>.
b) Ação <jsp:include>.
c) Diretiva include.
d) Diretiva Page.
e) Diretiva taglib.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 132 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


SERVLETS
(CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Técnico Judiciário - Tecnologia da
Informação) No ciclo de vida de um servlet, o servidor recebe uma requisição e
a repassa para o container, que a delega a um servlet. O container carrega a
classe na memória, cria uma instância da classe do servlet e inicia a instância
chamando o método init( ).

(CESPE – 2013 – DPE/SP – Analista de Sistemas) No ciclo de vida de um servlet,


o servidor recebe uma requisição e a repassa para o container, que a delega a
um servlet. O container carrega a classe na memória, cria uma instância da classe
do servlet e inicia a instância chamando o método init().

import java.io.*; import javax.servlet.*; import javax.servlet.http.*;


public class BookStoreServlet extends HttpServlet {
public void service (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Get the dispatcher; it gets the main page to the user
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(
"/bookstore/bookstore.html");
if (dispatcher == null) {
System.out.println("There was no dispatcher");
//No dispatcher means the html file could not be found.
response.sendError(response.SC_NO_CONTENT);
} else {
System.out.println("There is a dispatcher");
// Get or start a new session for this user
HttpSession session = request.getSession();
// Send the user the bookstore's opening page
dispatcher.forward(request,response);
}
16712855225

}
public String getServletInfo() {
return "The BookStore servlet returns the main web page " +
"for Duke's Bookstore.";
}
}

(CESPE – – MPE/RR – Analista de Sistemas) O nome completo da classe da


qual herda a classe acima declarada é javax.servlet.HttpServlet. A classe indicada
também herda, indiretamente, da classe java.lang.Object. Portanto, é correto
afirmar que classes em Java podem ter herança múltipla.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 133 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESPE – – MPE/RR – Analista de Sistemas) Para a recuperação dos


parâmetros que o browser envia para essa servlet, deve-se fazer acesso ao
objeto apontado pela variável request, declarada na linha 3.

(CESPE – – MPE/RR – Analista de Sistemas) Se, durante o processamento


de um pedido por essa servlet, quando da execução da linha de código 10, o
valor da variável dispatcher for null (nulo), então, a mensagem There was no
dispatcher será apresentada na interface do usuário.

(CESPE – – MPE/RR – Analista de Sistemas) Durante o funcionamento de


uma aplicação web na qual esteja em uso a servlet acima declarada, cada pedido
http enviado pelo browser e direcionado à servlet BookStoreServlet implicará a
criação de uma nova instância da classe BookStoreServlet, bem como a criação
de uma thread que invoca o método service(HttpServletRequest,
HttpServletResponse), declarado no código apresentado.

(CESPE – – TRT/5 – Analista de Sistemas) Java Servlets são componentes


Java executados somente do lado do servidor.

(CESPE – 1 – /ES – Analista de Sistemas) Servlet pode ser considerado um


applet que é executado no lado servidor.

(CESPE – 2011 – TRE/ES – Analista de Sistemas) Um servlet é uma classe Java


utilizada para ampliar a capacidade de acesso dos servidores a aplicações por
meio do modelo requisição-resposta. Embora os servlets possam responder a
um tipo específico de requisição hospedada em servidores web, os servlets não
respondem a requisições genéricas.
16712855225

10. (CESPE – 2013 – CNJ – Analista de Sistemas) Apesar de serem independentes de


plataforma, os servlets, para funcionarem, precisam utilizar o protocolo HTTP.

11. (CESPE – 2013 – TRE/MS – Analista de Sistemas – O servlet é uma classe de


programa em Java utilizada para estender a capacidade dos servidores em
aplicações web que trabalham com a filosofia requisição e resposta.

12. (CESPE - - STJ - Analista Judiciário - Tecnologia da Informação Na


plataforma J2EE, uma aplicação web para a Internet pode ser composta por
servlets, Java Server Pages (JSP) e páginas HTML. Nessas aplicações, a
apresentação dos dados pode ser separada da lógica do negócio, adotando-se

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 134 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

o estilo de arquitetura model view controller (MVC). Nesse caso, pode-se usar
servlets operando como controladoras que recebem as solicitações dos usuários
e providenciam o processamento das mesmas. Em uma mesma aplicação,
entretanto, só pode existir um servlet operando como controladora.

13. (CESPE - 2010 - T -BA - Analista Judiciário - Análise de Sistemas Todo servlet
pode interagir com o contexto no qual ele está inserido por meio dos métodos
especificados na interface ServletContext.

14. (CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas - Produção


Entre outras aplicações, os servlets são utilizados para escrever aplicativos web
J2EE dinâmicos em servidores web. Um servlet pode utilizar seus recursos para
realizar ações como, por exemplo, usar os registros (logging) para permitir que
o servidor possa autenticar usuários.

15. (CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação


No desenvolvimento de uma aplicação web que siga o padrão JEE, a tecnologia
JSP (Java Server Pages) permite criar páginas web com componentes estáticos e
dinâmicos; o AJAX permite a troca e manipulação de dados XML com
comunicação assíncrona, utilizando XMLHttpRequest; e o servlet é exemplo de
servidor de aplicações que contém diretórios como o bin e o webapps e é
responsável por gerenciar requisições recebidas de clientes.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 135 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


SERVLETS
(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Quando
um servlet é carregado pela primeira vez para a máquina virtual Java do servidor:

a) ocorre um destroy() no processo cliente.


b) o seu método init() é invocado.
c) o método service() é definido.
d) ocorre a execução do método getOutputStream().
e) o seu método stream() é invocado.

(FCC – 2011 – TRT - 1ª REGIÃO – Analista de Sistemas Em relação às tecnologias


Java, é INCORRETO afirmar que as Servlets:

a) deixam para a API utilizada na sua escrita a responsabilidade com o ambiente


em que elas serão carregadas e com o protocolo usado no envio e recebimento
de informações.

b) fornecem um mecanismo simples e consistente para estender a


funcionalidade de um servidor Web.

c) podem ser incorporadas em vários servidores Web diferentes.

d) podem rodar em qualquer plataforma sem a necessidade de serem reescritas


ou compiladas novamente.
16712855225

e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera
uma nova thread.

(FCC – 2010 – DPE/SP – Analista de Sistemas) Servlets são projetadas para


fornecer aos desenvolvedores uma solução JAVA para criar aplicações web. Para
criar Servlets é necessário importar as classes padrão de extensão dos pacotes:

a) javax.servlet e javax.servlet.http.
b) javax.servlet e javax.http.servlet.
c) javax.servlet.html e javax.servlet.http.
d) servlet.javax e servlet.javax.http.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 136 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

e) javax.servlet.smtp e javax.servlet.html.

(FCC – 2 – TRE/CE – Analista de Sistemas) No contexto do ciclo de vida de


um servlet, considere:

I. Quando o servidor recebe uma requisição, ela é repassada para o container


que, por sua vez, carrega a classe na memória e cria uma instância da classe do
servlet.

II. Quando um servlet é carregado pela primeira vez para a máquina virtual Java
do servidor, o método init() é invocado, para preparar recursos para a execução
do serviço ou para estabelecer conexão com outros serviços.

III. Estando o servlet pronto para atender as requisições dos clientes, o container
cria um objeto de requisição (ServletRequest) e de resposta (ServletResponse) e
depois chama o método service(), passando os objetos como parâmetros.

IV. O método destroy() permite liberar os recursos que foram utilizados, sendo
invocado quando o servidor estiver concluindo sua atividade.

Está correto o que se afirma em:

a) I, II e III, apenas.
b) I, II e IV, apenas.
c) I, III e IV, apenas.
d) II, III e IV, apenas.
e) I, II, III e IV.

(FCC – 3 – DPE/SP – Analista de Sistemas) Um Servlet Contêiner controla o


16712855225

ciclo de vida de uma servlet onde são invocados três métodos essenciais: um
para inicializar a instância da servlet, um para processar a requisição e outro para
descarregar a servlet da memória. Os itens a seguir representam, nessa ordem,
o que ocorre quando um usuário envia uma requisição HTTP ao servidor:

I. A requisição HTTP recebida pelo servidor é encaminhada ao Servlet Contêiner


que mapeia esse pedido para uma servlet específica.

II. O Servlet Contêiner invoca o método init da servlet. Esse método é chamado
em toda requisição do usuário à servlet não sendo possível passar parâmetros
de inicialização.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 137 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

III. O Servlet Contêiner invoca o método service da servlet para processar a


requisição HTTP, passando os objetos request e response. O método service não
é chamado a cada requisição, mas apenas uma vez, na primeira requisição do
usuário à servlet.

IV. Para descarregar a servlet da memória, o Servlet Contêiner chama o método


unload, que faz com que o garbage collector retire a instância da servlet da
memória.

Está correto o que se afirma em:

a) I, II, III e IV.


b) I, apenas.
c) I e IV, apenas.
d) II, III e IV, apenas.
e) II e III, apenas.

(FCC – 6 – BACEN – Analista de Sistemas) Para ser um servlet, uma classe


deve estender a classe I e exceder as ações “doGet” ou “doPost” (ou ambas),
dependendo se os dados estão sendo enviados por uma ação GET ou por uma
ação POST. Estes métodos tomam dois argumentos: um II e um III em sua
execução. Preenchem correta e respectivamente I, II e III:

16712855225

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação Em Java,


a passagem de dados de um formulário do cliente para o servlet pode ocorrer
por meio do uso do método:

a) import()
b) return()
c) catch()
d) getParameter()
e) nameComponent()

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 138 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(FCC - 2012 - TRE- - Programador de computador A tecnologia Java Servlet


é baseada na construção de classes servlet que executam no servidor recebendo
dados de requisições do cliente, processando esses dados, opcionalmente
acessando recursos externos como bancos de dados, e respondendo ao cliente
com conteúdo no formato HTML.

Com relação ao tema, analise as asserções a seguir:

Embora as servlets sejam muito boas no que fazem, tornou-se difícil responder
ao cliente com conteúdo no formato HTML.

PORQUE

Geralmente quem trabalha com o conteúdo HTML é o web designer que


normalmente não é programador Java experiente. Ao misturar HTML dentro de
uma servlet, torna-se muito difícil separar as funções de web designer e
desenvolvedor Java. Além disso, é difícil fazer alterações no conteúdo HTML, pois
para cada mudança, uma recompilação da servlet tem que acontecer. Para
contornar as limitações da tecnologia Java Servlet a Sun Microsystems criou a
tecnologia JavaServer Pages (JSP).

Acerca dessas asserções, é correto afirmar:

a) Tanto a primeira quanto a segunda asserções são proposições falsas.

b) A primeira asserção é uma proposição verdadeira e a segunda uma


proposição falsa.
16712855225

c) A primeira asserção é uma proposição falsa e a segunda uma proposição


verdadeira.

d) As duas asserções são proposições verdadeiras, mas a segunda não é a


justificativa correta da primeira.

e) As duas asserções são proposições verdadeiras e a segunda é a justificativa


correta da primeira.

(FCC - 2013 - -RN - Analista Legislativo - Analista de Sistemas No Java EE 6


os métodos doPost e doGet podem ser sobrescritos em uma servlet criada na

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 139 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

aplicação para receberem as requisições vindas de páginas HTML. Quando


sobrescritos na servlet, eles substituem seus métodos ancestrais existentes na
classe abstrata:

a) GenericServlet.
b) HttpServlet.
c) HttpServletRequest.
d) HttpServletResponse.
e) HttpServletObject.

10. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da
Informação Para ler os parâmetros de inicialização do contexto de um servlet
utiliza-se o método:

a) String getInitParameter(String).
b) Enumeration getInitParameterNames().
c) InputStream getResourceAsStream().
d) setAttribute(String nome, Object).
e) Object getAttribute(String nome).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 140 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SERVLETS
(FMP/RS – 2013 – MPE/AC – Analista de Sistemas No contexto da arquitetura
Java Enterprise Edition, __________________ são, em termos de estrutura, classes
Java especializadas que se assemelham muito à estrutura dos applets Java,
porém rodando em um servidor web e não no do cliente.

Assinale a única alternativa que completa corretamente a lacuna acima.

a) Java ME (Java Micro Edition)


b) portlets
c) Java Persistence API (JPA)
d) Enterprise JavaBeans (EJB)
e) servlets

(VUNESP – 3 – FUNDUNESP – Analista de Sistemas) Na plataforma J2EE, a


classe ServletRequest define:

a) a estrutura do objeto principal do Servlet, permitindo que sejam feitas


requisições ao Servlet.
b) métodos que permitem que o Servlet faça requisições de forma assíncrona.
c) métodos que permitem que o Servlet faça requisições aos clientes.
d) propriedades que permitem que seja alterado o comportamento do Servlet.
e) um objeto que fornecerá informações sobre a requisição feita pelo cliente ao
Servlet.

(CESGRANRIO – 2006 – DECEA – Analista de Sistemas – A) Servlets e arquivos


16712855225

JSP são executados no WEB Container.

(CESGRANRIO – – DECEA – Analista de Sistemas – B) Applets e Servlets são


compilados e executados no servidor.

(CESGRANRIO – 2009 – BNDES – Analista de Sistemas – A) Ao estudar as


especificações e frameworks Java EE, um Analista de Sistemas concluiu que o
container WEB do servidor de aplicações é o responsável por gerenciar o ciclo
de vida de servlets e de EJBs utilizados numa aplicação Java.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 141 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(CESGRANRIO – 2009 – BNDES – Analista de Sistemas – B) Ao estudar as


especificações e frameworks Java EE, um Analista de Sistemas concluiu que no
container WEB, uma página JSP transforma-se em um servlet, que é compilado,
carregado e inicializado.

(CESGRANRIO – 2012 – PETROBRÁS – Analista de Sistemas Seja o código a


seguir:

Sobre esse código, do qual foram omitidas as declarações de importação e o


método getServletInfo por concisão, considere as afirmativas a seguir.

I - Como o método service() não foi redefinido, o container não saberá qual método
chamar para cada tipo de pedido, gerando uma exceção.
II - Como o método init() não foi redefinido, o construtor padrão da classe mãe será
16712855225

chamado.
III - Como o método destroy() não foi redefinido, o container gerará um erro
registrando-o no arquivo de logs ao terminar este aplicativo.

É correto APENAS o que se afirma em:

a) I
b) II
c) III
d) I e III
e) II e III

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 142 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

(ESAF – – CGU – Analista de Sistemas – A) Servlets são classes de


programação Java que geram conteúdo dinâmico (normalmente para páginas
HTML) e interagem com os clientes, utilizando o modelo challenge/request.
Normalmente utilizam o protocolo HTTP, apesar de não serem restritas a ele.

(CIAAR - 2012 - CIAAR - Oficial Temporário - Análise de Sistemas O método


chamado para liberar quaisquer recursos mantidos pelo servlet, quando o
contëiner de servlets termina o servlet, denomina-se:

a) get.
b) post.
16712855225

c) destroy.
d) prerender.

10. (AOCP - 2012 - BRDE - Analista de Sistemas - Desenvolvimento de Sistemas -


(Prova TIPO 4) Sobre Servlets, analise as assertivas e assinale a alternativa que
aponta as corretas.

I. Servlets são implementadas como arquivos de classe da Linguagem Java.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 143 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

II. Servlets são independentes de plataforma, de modo que podem ser


executadas em diferentes servidores, em diferentes sistemas operacionais.

III. As Servlets podem acessar qualquer uma das APIs Java. Uma Servlet pode
usar a API JDBC para acessar e armazenar dados ou para acessar objetos
remotos.

IV. Ao criar uma Servlet, somos obrigados a reescrever nove métodos presentes
à interface que foi implementada.

a) Apenas I e II.
b) Apenas I e III.
c) Apenas II e III.
d) Apenas I, II e III.
e) I, II, III e IV.

11. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior Para criar um


Servlet que processará as requisições HTTP na plataforma J2EE, deve-se:

a) criar uma classe que implemente a interface Servlet.


b) criar uma classe que estenda a classe HttpServlet.
c) implementar o método processHttpHeader.
d) instanciar a classe Servlet, passando para o parâmetro requestType o valor
Servlet.HTTP_REQUEST.
e) invocar o método Servlet.service(Servlet.HTTP_REQUEST) antes do
processamento da requisição.

12. (FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil -


Analista de Informática) Assinale a alternativa que defne corretamente um
16712855225

Servlet.

a) É um método da JPA utilizado na persistência assíncrona de dados.


b) É um componente que roda do lado do cliente para tratar problemas de
comunicação.
c) É uma classe Java utilizada para estender as capacidades de um servidor.
d) É uma biblioteca JBOSS que emula servidores no lado do cliente.
e) É uma JSP que possibilita a execução de código no lado do cliente, mesmo
sem comunicação com um servidor.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 144 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

13. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior) Considere o


Servlet a seguir:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ClasseServlet extends HttpServlet {

public void doGet(HttpServletRequest request,


HttpServletResponse response){
response write html
response write body
response write Servlet em operação
response write body
response write html
}
}

Sobre o código do Servlet, é possível afirmar que:

a) ao ser executado por um contêiner de Servlet, será exibida uma tela em branco
no navegador.

b) ao ser executado por um contêiner de Servlet, será exibida a mensagem “Servlet


em operação!” na tela do navegador.

c) não pode ser compilado, pois a classe HttpServletResponse não possui o método
write.

d) não pode ser compilado, pois HttpServlet é uma interface e, portanto, não pode
ser estendida por uma classe.

e) o conteúdo exibido na tela do navegador não será codificado corretamente, pois


16712855225

a codificação da página não foi informada.

14. (CESGRANRIO - - -RO - Analista Judiciário - Tecnologia da Informação


O método da interface javax.servlet.http.HttpSession, utilizado para finalizar uma
sessão de usuário em um container J2EE, é

a) cancel( )
b) delete( )
c) destroy( )
d) invalidate( )
e) release( )

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 145 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


JSF

(CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação


O JSF é um framework web embasado em interface gráfica, capaz de renderizar
componentes e manipular eventos em aplicações web no padrão Java EE, no
qual os componentes JSF são orientados a eventos. O JSF fornece, ainda,
mecanismos para conversão, validação, execução de lógica de negócios e
controle de navegação.

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Entre os itens


que o padrão Java Server Faces (JSF) utiliza, estão os componentes, os eventos
e a navegabilidade.

(CESPE - 2012 - ANAC - Analista Administrativo - Área 4 A validação de dados


de um componente pode ser uma das funções de um backing bean, em uma
aplicação JSF.

(CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas O JSF provê


uma linguagem de expressão exclusiva para acesso a objetos armazenados em
bancos de dados.

(CESPE - 2010 – TCU – Analista de Sistemas) No desenvolvimento de conteúdos


para apresentação, o uso de facelets traz vantagens em relação ao uso de JSP.
Uma delas é a maior modularidade, com o uso de templates e componentes
compostos (composite).

(CESPE - 2012 – TJ/AL – Analista de Sistemas – B) Em um aplicativo Facelets, a


16712855225

tag f:ajax adiciona funcionalidades Ajax que necessitam de adicionais de


codificação e configuração para as componentes de interface do usuário.

(CESPE - 2012 – TJ/RO – Analista de Sistemas – E) JNDI, parte do projeto de JSF,


utiliza XHTML como tecnologia de apresentação dos dados, possibilitando a
separação entre as camadas de negócio e de controle.

(CESPE - 2013 – CPRM – Analista de Sistemas) Facelets são utilizadas para


desenvolver visões (views) JavaServer Faces (JSF) com linguagem HTML e

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 146 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

XHTML, em conformidade com a transitional document type definition, sendo,


ainda, compatível com a biblioteca de tag JSF.

(CESPE - 0 – TCU – Analista de Sistemas) Para suportar a construção de


aplicações com Ajax e JSF, recomenda-se aos desenvolvedores de páginas que
usem a tag <f:ajax>, relacionada ao processamento de pedidos http assíncronos.

10. (CESPE - 0 – MPU – Analista de Sistemas) Uma aplicação web deve prover
mecanismos de validação de dados. O JSF fornece vários validadores de dados
padrões que podem ser utilizados no lado do cliente (client-side).

11. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas Antes de uma
aplicação web desenvolvida nos moldes da JSF executar sua primeira página
web, uma instância FacesServlet é executada, a fim de gerenciar as requisições
dessa aplicação.

12. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas Em aplicações


web nos padrões da JSF, é possível utilizar recursos Ajax para criar páginas
dinâmicas, como, por exemplo, por meio da tag f:ajax, conforme apresentado
na sintaxe abaixo.

h inputText value bean message >


<f:ajax />
</h:inputText>

13. (CESPE - - -SE - Analista Judiciário - Análise de Sistemas) É possível utilizar


XHTML no desenvolvimento de facelets para criar páginas web compatíveis com
a JSF (JavaServer Faces) para apresentação dos dados. Na versão Java EE 7, essa
forma de apresentação é mais indicada que a JSP (JavaServer Pages), uma vez
que esta não suporta todos os novos recursos da versão Java EE 7.
16712855225

14. (CESPE - 2015 – TCU - Analista de Sistemas) A partir da interpretação do trecho


JSF (JavaServer Faces), versão 2, no código a seguir, verifica-se que uma
providência válida é configurar o managed-bean clientePage no arquivo faces-
config.xml.

15. (CESPE - 2013 – INPI - Analista Judiciário - Análise de Sistemas) Quando


registrado em JSF 2 (Java Server Faces), um managed bean permanece no
escopo de session.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 147 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


JSF

(FCC – 2013 – TRT/12 – Analista de Sistemas) Considere as instruções abaixo


encontradas em um arquivo de uma aplicação que utiliza JSF:

<managed-bean>
<managed-bean-name>func</managed-bean-name>
<managed-bean-class>bean.Funcionario</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Essas instruções indicam a existência de um bean gerenciado (classe


Funcionario.java) no pacote bean que poderá ser referenciado nas páginas JSP
por meio da palavra func. O arquivo correto no qual essas instruções são
colocadas é o:

a) context.xml.
b) web-inf.xml.
c) web.xml.
d) faces-config.xml.
e) config-bean.xml.

(FCC - 2012 - -PE - Programador de computador Em uma aplicação que utiliza


JSF, para configurar o fluxo de comunicação presente na servlet de controle, é
utilizado um arquivo de configuração:

a) webfaces.xml.
b) actionform.xml. 16712855225

c) faces-config.xml.
d) webcontext.xml.
e) serverconfig.xml.

(FCC – 2013 – TRT/9 – Analista de Sistemas) Uma aplicação utilizando o


framework JSF e a IDE NetBeans gera automaticamente dois componentes
essenciais assim descritos:

I. É responsável por receber requisições dos componentes View do MVC,


redirecioná-las para os beans gerenciados (managed beans) do componente
Model do MVC e responder a essas requisições.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 148 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

II. É o arquivo principal de configuração de uma aplicação web que utiliza o


framework JSF. É responsável por descrever os elementos e sub-elementos que
compõem o projeto, tais como as regras de navegação, beans gerenciados,
configurações de localização etc.

As descrições I e II referem-se, respectivamente, aos componentes:

a) servlet Controller.java e ao arquivo faces_config.xml


b) FaceletServlet e ao arquivo web_config.xml.
c) FacesServlet e ao arquivo faces-config.xml.
d) servlet Controller e ao arquivo web-config.xml.
e) servlet Facelet e ao arquivo web.xml.

(FCC – 2012 – TST – Analista de Sistemas) O framework JavaServer Faces (JSF) é


utilizado no desenvolvimento de aplicações web que utiliza o design pattern
MVC. O JSF:

a) disponibiliza controles pré-construídos e código para manipular eventos,


estimulando o uso de código Java convencional no componente View do MVC.

b) recebe requisições dos componentes da View do MVC, através do servlet


FaveServerServlet.

c) armazena os mapeamentos das ações e regras de navegação em projetos JSF


nos arquivos WEB-INF.xml e FACES-CONFIG.xml.

d) possui bibliotecas que suportam Ajax (Asynchronous JavaScript And XML).


16712855225

e) provê um conjunto de tags limitado para criar somente páginas HTML/XHTML.

(FCC – 2012 – TST – Analista de Sistemas) Para criar as páginas XHTML de uma
aplicação JSF é possível utilizar um conjunto de bibliotecas de tags JSF. Algumas
dessas bibliotecas são HTML, Core e Facelets. Considere os fragmentos de
códigos abaixo, que utilizam tags dessas bibliotecas:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 149 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

A correlação correta entre o fragmento de código e a biblioteca de tags utilizada


é:

a) I-Facelets, II-HTML e III-Core.


b) I-Core, II-Facelets, e III-HTML.
c) I-HTML, II-Core, e III-Facelets.
d) I-HTML, II-Facelets, e III-HTML.
e) I-HTML, II-HTML, e III-Core.

(FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas No JSF, o


componente Controller do MVC é composto por uma classe servlet, por arquivos
de configuração e por um conjunto de manipuladores de ações e observadores
de eventos. Essa servlet é chamada de:16712855225

a) ControllerServlet.
b) Facelet.
c) HttpServlet.
d) FacesConfig.
e) FacesServlet.

(FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas No ciclo de vida


do Java Server Faces trata-se da fase na qual o componente deve primeiro ser
criado ou recuperado a partir do FacesContext, seguido por seus valores, que

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 150 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

são geralmente recuperados dos parâmetros de request e, eventualmente, dos


cabeçalhos ou cookies gerados. Trata-se da fase:

a) Restore View.
b) Apply Request Values.
c) Process Validation.
d) Update Model Values.
e) Invoke Application.

(FCC - 2012 - TRT - 11ª Região (AM) - Técnico Judiciário - Tecnologia da


Informação Sobre o framework JavaServer Faces é correto afirmar:

a) A grande limitação do JSF é a dificuldade de integração com outros


frameworks como Spring, JPA e EJB.

b) Expression Language (EL) é a linguagem utilizada para apresentação de


conteúdo em aplicações que utilizam JSF. Sua principal limitação é a
impossibilidade de acessar valores e métodos em beans gerenciados.

c) Facelets é uma parte da especificação JSF e também a tecnologia para


implementar as regras de negócio em aplicações que utilizam JSF.

d) Disponibiliza as bibliotecas de tags core e html para criar as páginas que


compõem a interface do usuário.

e) Define uma única forma para realizar a validação de dados em formulários


JSP, por meio da implementação de uma classe de validação que estende a
interface Validator.
16712855225

(FCC - 2011 - TRE-AP - Técnico Judiciário - Programação de Sistemas O JSF


extrai todos os valores digitados pelo usuário e guarda esse valor nos seus
respectivos componentes. Se o valor digitado não coincidir com o componente,
um erro vai ser adicionado na classe FacesContext e será mostrado na fase
Render Response Phase.

No ciclo de vida do JSF trata-se de um evento típico da fase:

a) Process Validations Phase.


b) Restore View Phase.
c) Apply Request Values Phase.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 151 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

d) Update Model Values Phase.


e) Invoke Application Phase.

10. (FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas No ciclo


de vida do JSF copiar os parâmetros de requisição para valores submetidos pelos
componentes, é a tarefa típica da fase:

a) Restaurar Visão (Restore view).


b) Invocar aplicação (Invoke application).
c) Aplicar valores de requisição (Apply request values).
d) Processar validações (Process validation).
e) Atualizar valores do modelo (Update model values).

11. (FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da
Informação É um framework MVC utilizado no desenvolvimento de aplicações
para a internet de forma visual, que utiliza o recurso de arrastar e soltar os
componentes na tela para definir suas propriedades:

a) Enterprise JavaBeans.
b) JavaServer Faces.
c) Java 2 Enterprise Edition.
d) Servlets.
e) Java Server Pages.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 152 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JSF

(FGV - 2013 – ALEMA - Analista de Sistemas Com relação à especificação Java


Server Faces (JSF), assinale V para a afirmativa verdadeira e F para a falsa.

( ) Visa substituir a especificação Java Server Pages.

( ) Java Server Faces são usadas como uma fachada para Servlets e Java Server
Pages.

( ) Define um framework MVC (Model View Controler) para aplicações Web.

As afirmativas são, respectivamente,

a) F, F e V.
b) F, V e V.
c) V, F e F.
d) V, V e F.
e) F, V e F.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 153 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JAVA EE

1 2 3 4 5 6 7 8 9 10
E E E E E C B B C B
11 12 13 14 15 16 17 18 19 20
E C C A

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


JSP
1 2 3 4 5 6 7 8 9 10
C E C C E E C C

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


JSP
1 2 3 4 5 6 7 8 9 10
A E E A D C E E E C
11 12 13 14 15 16 17 18 19 20
E E A A C E D E A C
21 22 23 24 25 26 27 28 29 30
B 16712855225

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JSP

1 2 3 4 5 6 7 8 9 10
D A B E B C B

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 154 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

SERVLETS

1 2 3 4 5 6 7 8 9 10
C C E C E E C C E E
11 12 13 14 15 16 17 18 19 20
C E C C E

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


SERVLETS
1 2 3 4 5 6 7 8 9 10
B A A E B D D E B A

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SERVLETS

1 2 3 4 5 6 7 8 9 10
E E C E E C B E C D
11 12 13 14 15 16 17 18 19 20
B C C D

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


JSF
16712855225

1 2 3 4 5 6 7 8 9 10
C C C E C E E C C E
11 12 13 14 15 16 17 18 19 20
C C C C E

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


JSF

1 2 3 4 5 6 7 8 9 10

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 155 de 156


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 04

D C C D A E B D C C
11 12 13 14 15 16 17 18 19 20
D

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JSF

1 2 3 4 5 6 7 8 9 10
A

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 156 de 156


Aula 05

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

AULA 05

SUMÁRIO PÁGINA
Apresentação 01
- Java Persistence API (JPA) 02
- Hibernate 25
- Java Database Conectivity (JDBC) 55
- Java Virtual Machine (JVM) 65
Lista de Exercícios Comentados 64
Gabarito 90

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

JAVA PERSISTENCE API (JPA)

Galera, Java começou a ficar extremamente popular em ambientes corporativos,


mas havia um problema que estava incomodando os desenvolvedores:
produtividade estava prejudicada porque eles estavam perdendo muito tempo nas
codificações de Queries SQL e em seu respectivo código JDBC. E quando era
necessário mudar o banco de dados por um de outro fabricante? O que fazer?

Além disso, Java ajudou a popularizar o Paradigma Orientado a Objetos, em que


informações eram representadas por meio de classes, atributos, herança,
polimorfismo, encapsulamento, etc. Isso gerava conflito com o Paradigma
Relacional dos bancos de dados, em que as informações eram representadas por
meio de tabelas, colunas, linhas, chaves primárias, chaves estrangeiras, etc.

Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma
tabela e vice-versa. Logo, começaram a surgir algumas ferramentas que auxiliavam
essa tarefa – são as famosas ORM – Object-Relational Mapping (ou Mapeamento
Objeto-Relacional). As mais conhecidas eram Hibernate1 e TopLink – a primeira,
open-source, tornou-se uma referência mundial.

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de Descritores de
Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e
atualizações de dados. O desenvolvedor define como os objetos são mapeados e
o framework faz o resto – acessa o Banco de Dados, gera Comandos SQL, etc.

A utilização desses frameworks de mapeamento objeto-relacional permitiu


16712855225

preservar as vantagens do Paradigma Relacional (Robustez, Maturidade, Facilidade


de Pesquisa, etc) para a Camada de Persistência; e preservar as vantagens do
Paradigma Orientado a Objetos (Reúso, Modularidade, Herança, Polimorfismo, etc)
para a Camada de Negócios.

Antes de continuar, preciso que vocês entendam o conceito de POJO (Plain Old
Java Object). Trata-se de objetos simples e comuns que não deveriam ter que:

 Estender interfaces pré-especificadas:

1
Possui até uma versão para .NET chama-se NHibernate.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
public class Foo extends javax.servlet.http.HttpServlet { ...

 Implementar classes pré-especificadas:

public class Bar implements javax.ejb.EntityBean { ...

 Conter anotações pré-especificadas:

@javax.persistence.Entity public class Baz { ...

Galera, esse conceito é teórico! Na prática, por dificuldades técnicas (entre outras
razões), consideram-se POJO também as classes que contenham anotações pré-
especificadas. Qual a vantagem de se utilizar POJO? Como ele não estende nada
nem implementa interfaces, ele não possui dependências por frameworks
corporativos e pode se focar somente na lógica de negócio.

Ele também é importante para desacoplar o código da aplicação dos frameworks


de infraestrutura. Mudou o framework? O POJO continuará funcionando – inclusive,
a mudança será fácil e conterá menos riscos! Até a Especificação EJB 2.0,
persistência de dados era parte da Plataforma EJB e era realizada por meio de Entity
Beans – que eram uma espécie de POJO.

Rapidamente: algumas pessoas me perguntam qual a diferença entre um POJO e


um JavaBean! do JavaBean é um POJO, mas nem todo POJO um JavaBean.
Eles são muito parecidos, mas o JavaBean segue diversas convenções de
programação, tais como: nomenclatura dos métodos, construtor público padrão e
sem parâmetros, entre outros. Para o JPA, o POJO é a unidade básica!

Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado
possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao
16712855225

líder do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar


os frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores
ideias do Hibernate, TopLink, JDO, etc e condensou em uma especificação.

FAQ: JPA

Q: Why didn't you adopt Hibernate or JDO as the persistence API?

A: We chose to combine the best ideas from many sources in the new persistence API
and create a practical, easy to use API to meet the needs of a majority of Java EE and

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Java SE community members. The Java Persistence API is not based on any single
existing persistence framework but incorporates- and improves upon - ideas
contributed by many popular frameworks, including Hibernate, TopLink, JDO, and
others.

E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a
especificação surgiu após as implementações! Como uma das vantagens, pode-se
trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de
modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser
independente deste), permitindo sua utilização Ambientes Java SE e Java EE.

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para
gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele
simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo
Container Web ou pelo Application Client.

É interessante notar um pouco da evolução do Java Persistence API (JPA) e como


ele evolui harmonicamente com o Ambiente Java EE. Ele apareceu pela primeira vez
no Java EE 5 (JSR220). Depois ele se transformou em JPA 2.0 no Java EE 6 (JSR 317)
e, atualmente, temos o JPA 2.1 – no Java EE 7 (JSR 338). De todo modo, ele consiste
em quatro partes:

 Java Persistence API (JPA): define um mapeamento objeto/relacional para


gerenciamento de dados relacionais;

 Java Persistence Query Language (JPQL): define queries, em geral, estáticas


para entidades e seus estados persistentes;
16712855225

 Java Persistence Criteria API (JPCA): define queries, em geral, dinâmicas para
entidades e seus estados persistentes;

 Mapeamento de Metadados O/R: define um mapeamento por meio de


Descritores de Implantação (XML) ou Anotações (Annotations).

Há duas formas de mapear classes de negócio em entidades de um banco de dados:


Descritores de Implantação (XML) ou Anotações (Annotations)! O XML foi
praticamente engolido pelas anotações, tanto que hoje em dia é muito raro utilizá-
lo para certas tarefas. Por que, professor? Porque as anotações evitam a criação de
complexos arquivos de configuração em XML. Vejamos algumas anotações:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

ANOTAÇÃO DESCRIÇÃO

@Entity Indica que uma classe é uma entidade que deve ser persistida como tabela.
@Table Indica o nome de uma tabela para qual a entidade é mapeada.
@Column Indica que um atributo de uma classe é uma coluna de uma tabela.
@Id Indica que um atributo é a chave primária de uma entidade.
@namedQuery Define uma consulta.
@namedQueries Define várias consultas.
@UniqueConstraint Indica que uma propriedade não pode conter valores duplicados.
@Transient Indica que uma propriedade não deve ser persistida no banco de dados.
@Inheritance Define um relacionamento de herança à entidade.
@ManyToOne Mapeamento muitos para um (N:1).
@OneToMany Mapeamento um para muitos (1:N).
@OneToOne Mapeamento um para um (1:1).

Galera, vocês sabem o que é um EntityManager? Trata-se de uma interface que


funciona como serviço centralizado para todas as ações de persistência – mapeando
um conjunto de classes para um banco de dados particular. Em outras palavras, ele
é responsável por realizar operações de sincronismo com o Banco de Dados (Inserir,
Remover, Atualizar e Consultar), além de gerenciar o ciclo de vida das entidades.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 EntityManager.persist(Object): persiste o objeto Object;


 EntityManager.remove(Object): remove o objeto Object;
 EntityManager.find(Object): busca o objeto Object;
 EntityManager.refresh(Object): atualiza o objeto Object;
 EntityManager.createQuery(String): realiza uma consulta String;

Sabe quando você deseja realizar uma inserção no banco de dados? Pois é, o objeto
do EntityManager irá realizar essa tarefa! Esse gerenciador de entidades interage
com um Persistence Context, que é um local em que ficam armazenados os objetos
(entidades) que estão sendo manipulados pelo EntityManager corrente. Ele funciona
como um contêiner que guarda as entidades gerenciadas pelo EntityManager.

Um artigo do DevMedia faz uma excelente comparação entre Persistence Context


e a Memória Cache de um Processador (aquela mais rápida):

Imagine o Persistence Context como um container capaz de armazenar todas as


entidades que serão manipuladas pelo EntityManager. No início da nossa aplicação,
não temos Persistence Context ou EntityManager, pois não realizamos nenhuma
operação com o banco. Então, você decide buscar o usuário “Mario” no BD e, neste
momento, são criados 1 EntityManager + 1 PersistenceContext (ligados diretamente).

O EntityManager vai até o Persistence Context e checa se o usuário “Mario” já está


lá, e como não está, ele irá ao banco de dados realizar a consulta desejada retornando
o objeto Mario preenchido e populado. Depois de retornar o usuário “Mario” do BD,
o EntityManager grava esse objeto no Persistence Context (Nosso Cache). Assim, da
próxima vez que precisar deste objeto, não precisará ir ao banco de dados.

Então como você pode perceber no cenário acima, o EntityManager sempre consulta
o Persistence Context, checando se o objeto já está lá e, caso não esteja, aí sim ele irá
16712855225

até o banco de dados. Quando o EntityManager é destruído (no fim de uma


requisição) o Persistence Context também será destruído, impossibilitando de usá-los
em outros EntityManager com outros PersistenceContext.

Lá em cima, eu afirmei que um EntityManager mapeava um conjunto de classes


para um banco de dados particular. Esse conjunto de classes é denominado
Persistence Unit2. Antes mesmo de pensar em criar entidades ou consultá-las por
meio do EntityManager, é necessário empacotar esse conjunto de classes em um
Persistence Unit, que é definido no Descritor de Implantação (persistence.xml).

2
Ele especifica qual implementação será utilizada (Hibernate, Toplink, JDO, etc); conexão com banco, etc.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

O EntityManager pode ser criado ou pode ser obtido de um EntityManagerFactory


– que seria uma espécie de fábrica de EntityManager. No Java SE, deve-se utilizar o
EntityManagerFactory para obter o EntityManager, o que não é necessariamente
exigido no Java EE. Para obter um EntityManager, devemos primeiro criar o
EntityManagerFactory e, só depois, criar o EntityManager:

EntityManagerFactory emf Persistence createEntityManagerFactory Exemplo );


em = emf.createEntityManager();

É importante notar que a classe javax.persistence.Persistence procura o Descritor de


Implantação persistence.xml dentro de seu classpath. Ele procurará o Persistence
Unit com o mesmo nome do parâmetro da função createEntityManagerFactory, i.e.,
xemplo”. Obtido o EntityManagerFactory, basta chamar a função
createEntityManager.

16712855225

O ciclo de vida dos objetos de entidade consiste em quatro estados: Novo (New),
Gerenciado (Managed), Removido (Removed) e Destacado (Detached Quando um
objeto é criado inicialmente seu estado é Novo. Nesse estado, o objeto ainda não
está associado a um EntityManager e não possui qualquer representação no banco
de dados. Bacana?

Um objeto se torna Gerenciado quando é persistido no banco de dados por meio


do método de persistência do EntityManager, que deve ser invocado dentro de uma
transação ativa. Quando se dá um Commit na transação, o objeto é persistido no

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

banco de dados. Objetos recuperados do banco de dados por um EntityManager


também estão no estado Gerenciado.

Se um objeto Gerenciado é modificado dentro de uma transação ativa, a mudança


é detectada pelo EntityManager e a atualização é propagada no banco de dados
após o Commit. Um objeto Gerenciado também pode ser recuperado do banco de
dados e marcado para remoção, utilizando o método remove do EntityManager
dentro de uma transação ativa.

O objeto modifica seu estado de Gerenciado para Removido, e é fisicamente


deletado do banco de dados após o Commit. O último estado, Destacado,
representa um objeto que foi desconectado do EntityManager Quando um objeto
é Destacado, mudanças sucessivas não irão mais ser rastreadas e nenhuma
sincronização automática do banco de dados será realizada.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC - – TRE/MS - Analista de Sistemas – A API de Persistência Java


pode ser utilizada no container Web e/ou no container EJB e disponibiliza
recursos de mapeamento objeto-relacional as aplicações Java EE.

Comentários:

Java Persistence API (JPA) é um padrão para persistência de dados que fornece aos
desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados
relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de
dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo
Application Client.

Conforme vimos em aula, a questão está completamente perfeita!

Gabarito: C

(CESPE - 2014 - -SE - Analista Judiciário - Banco de Dados) A JPA, que foi
criada como alternativa para o Hibernate para conexão com os sistemas
gerenciadores de banco de dados, está nativa no Java SE a partir da versão 1.3.

Comentários:
16712855225

Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado
possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder
do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os
frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias
do Hibernate, TopLink, JDO, etc e condensou em uma especificação.

Conforme vimos em aula, JPA não é uma alternativa ao Hibernate! JPA é a


especificação e Hibernate é a implementação dessa especificação (assim como
TopLink, OpenJPA, JDO, etc).

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC - 2014 - TRT - 13ª Região (PB) - Técnico Judiciário - Tecnologia da


Informação Java Persistence API (JPA) é uma API padrão da linguagem Java para
persistência de dados em bancos de dados relacionais. Em uma aplicação que
utiliza JPA:

a) pode ser utilizada, como provedor de persistência, as bibliotecas EclipseLink,


Hibernate, OracleTopLink, JBossSeam e JDBCProvider.

b) as classes de entidade do banco de dados permitem o mapeamento entre


objetos da classe e tabelas do banco de dados, utilizando anotações como
@Table, @Entity, @PrimaryKey, @Column, @Constraint, @Foreignkey e @EJB.

c) todas as operações realizadas nas tabelas do banco de dados, como inserção


de dados, alteração, consultas e exclusão, são realizadas sem o uso de instruções
SQL, ou seja, o desenvolvedor não precisa conhecer SQL para programar.

d) as configurações de acesso a banco de dados normalmente ficam no arquivo


persistence.xml, ligado à aplicação, de forma que se for alterado o servidor de
banco de dados não seja necessário alterar o código-fonte Java da aplicação.

e) as relações existentes entre as tabelas do banco de dados não são refletidas


nas classes de entidade criadas na aplicação, o que torna a execução mais rápida.
O mapeamento de relações é feito em tempo de execução pelas bibliotecas do
provedor de persistência.

Comentários:

(a) Provedor de Persistência é o framework que fornece meios de se fazer o


16712855225

mapeamento objeto/relacional – em geral, implementam a Especificação JPA.


Dentro os listados, JBoss Seam e JDBCProvider não realizam esse trabalho; (b) @EJB
não auxilia no mapeamento entre objetos da classe e tabelas do banco de dados.
(c) Vejam que ele citou as quatro operações básicas, mas existem outras e é possível
que se necessite saber SQL para programar; (d) Perfeito, as configurações de acesso
ao banco ficam no persistence.xml, permitindo mudanças de servidor de banco de
dados sem a necessidade de alterar o código. (e) Claro que as relações devem ser
refletidas nas classes de entidade (@OneToOne, @ManyToOne, etc).

Gabarito: D

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2010 – MPU – Analista de Sistemas A versão 3.0 da API de Persistência


Java utiliza descritores de implantação, não permitindo uso de anotações.

Comentários:

É interessante notar um pouco da evolução do Java Persistence API (JPA) e como ele
evolui harmonicamente com o Ambiente Java EE. Ele apareceu pela primeira vez no
Java EE 5 (JSR220). Depois ele se transformou em JPA 2.0 no Java EE 6 (JSR 317) e,
atualmente, temos o JPA 2.1 – no Java EE 7 (JSR 338). De todo modo, ele consiste em
quatro partes:

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de Descritores de
Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e
atualizações de dados. O desenvolvedor define como os objetos são mapeados e o
framework faz o resto – acessa o banco, gera os comandos SQL, etc.

Conforme vimos em aula, não existe JPA 3.0 – vocês acham que a banca anulou?
De todo modo, a versão atual permite – sim – a utilização de Descritores de
Implantação e Anotações.

Gabarito: E

(CESPE - 2010 – MPU – Analista de Sistemas A versão 3.0 da API de Persistência


Java provê uma linguagem de consulta de persistência Java que é uma forma
melhorada da linguagem de consulta do EJB.

Comentários:
16712855225

É interessante notar um pouco da evolução do Java Persistence API (JPA) e como ele
evolui harmonicamente com o Ambiente Java EE. Ele apareceu pela primeira vez no
Java EE 5 (JSR220). Depois ele se transformou em JPA 2.0 no Java EE 6 (JSR 317) e,
atualmente, temos o JPA 2.1 – no Java EE 7 (JSR 338). De todo modo, ele consiste em
quatro partes:

 Java Persistence API (JPA): define um mapeamento objeto/relacional para


gerenciamento de dados relacionais;
 Java Persistence Query Language (JPQL): define queries estáticas, em geral, para
entidades e seus estados persistentes;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 Java Persistence Criteria API (JPCA): define queries dinâmicas, em geral, para
entidades e seus estados persistentes;
 Mapeamento de Metadados O/R: define um mapeamento por meio de
Descritores de Implantação (XML) ou Anotações (Annotations).

Conforme vimos em aula, não existe JPA 3.0 – vocês acham que a banca anulou?
De todo modo, ele fornece – sim – uma linguagem de consulta de persistência:
JPQL. De fato, ela é melhor que a EJB-QL, que existia anteriormente – vejamos o
que diz o FAQ:

Q: What are some of the main features of the Java Persistence API?

A: The Java Persistence API is a POJO persistence API for object/relational mapping.
It contains a full object/relational mapping specification supporting the use of Java
language metadata annotations and/or XML descriptors to define the mapping
between Java objects and a relational database. It supports a rich, SQL-like query
language (which is a significant extension upon EJB QL) for both static and dynamic
queries. It also supports the use of pluggable persistence providers.

Gabarito: C

(CESPE - 2010 – MPU – Analista de Sistemas A API de Persistência Java é


embasada em ideias contidas em frameworks líderes de mercado, como
Hibernate, Oracle TopLink e Objetos de Dados Java.

Comentários:

Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado
possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder
16712855225

do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os


frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias
do Hibernate, TopLink, JDO, etc e condensou em uma especificação.

Conforme vimos em aula, JPA pegou as melhores ideias dos frameworks líderes de
mercado e condensou em uma especificação.

Gabarito: C

(CESPE - 2013 – TRE/MS – Analista de Sistemas Assinale a opção correspondente


ao elemento que, além de ser utilizado para definir um meio de mapeamento

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

objeto-relacional para objetos Java simples e comuns (POJOs), denominados


beans de entidade, também é utilizado para gerenciar o desenvolvimento de
entidades do modelo relacional em plataforma nativa Java SE e Java EE.

a) JSF
b) SVN
c) JPA
d) spring
e) struts

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Rapidamente: algumas pessoas me perguntam qual a diferença entre um POJO e


um JavaBean! Todo JavaBean é um POJO, mas nem todo POJO é um JavaBean. Eles
são muito parecidos, mas o JavaBean segue diversas convenções de programação,
tais como: nomenclatura dos métodos, construtor público padrão e sem parâmetros,
entre outros. Para o JPA, o POJO é a unidade básica!

E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a
especificação surgiu após as implementações! Como uma das vantagens, pode-se
trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de
modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser
independente deste), permitindo sua utilização em Ambientes Java SE e Java EE.
16712855225

Ele também é importante para desacoplar o código da aplicação dos frameworks de


infraestrutura. Mudou o framework? O POJO continuará funcionando – inclusive, a
mudança será fácil e conterá menos riscos! Até a Especificação EJB 2.0, a persistência
de dados era parte da Plataforma EJB e era realizada por meio de Entity Beans – que
eram uma espécie de POJO.

Conforme vimos em aula, JPA é utilizado para realizar o mapeamento


objeto/relacional, utilizando POJOs, em ambientes Java SE e Java EE.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas Quando se utiliza


JPA, um EntityManager mapeia um conjunto de classes a um banco de dados
particular. Este conjunto de classes, definido em um arquivo chamado
persistence.xml, é denominado:

a) persistence context.
b) persistence unit.
c) entity manager factory.
d) entity transaction.
e) persistence provider.

Comentários:

Lá em cima, eu afirmei que um EntityManager mapeava um conjunto de classes para


um banco de dados particular. Esse conjunto de classes é denominado Persistence
Unit. Antes mesmo de pensar em criar entidades ou consultá-las por meio do
EntityManager, é necessário empacotar esse conjunto de classes em um Persistence
Unit, que é definido no Descritor de Implantação (persistence.xml).

Conforme vimos em aula, trata-se do Persistence Unit.

Gabarito: B

(CESPE - 2013 - CNJ - Técnico Judiciário - Programação de Sistemas Os objetos


mapeados na linguagem Java que devem ser persistidos como objetos precisam
utilizar JPA (Java Persistence API), pois o JPA permite realizar o mapeamento
objeto/relacional automatizado e transparente e sua persistência em um banco
de dados relacional. 16712855225

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Pessoal, olhem que questão maluca! Você precisa necessariamente do JPA? Não, eu
posso usar frameworks que não implementam o JPA. Discordo do gabarito!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Gabarito: C

10. (FGV - 2009 – MEC – Analista de Sistemas – C) JPA é uma tecnologia utilizada
no desenvolvimento de aplicações para Web, similar às tecnologias Active Server
Pages (ASP) da Microsoft ou PHP.

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, essa definição não faz sentido algum para JPA! No
entanto, substituindo JPA por JSP, a definição seria perfeita!

Gabarito: E

11. (CESPE - 2010 - TRE-BA - Programador de computador As tecnologias JPA e


EJB permitem, com o uso da linguagem Java, a manipulação de dados que estão
em um banco de dados.

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
16712855225

persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, está perfeito – lembrando que JPA faz parte da
Especificação do EJB 3.0.

Gabarito: C

12. (CESPE - 2013 - CPRM - Analista em Geociências - Sistemas) Java Persistence API
(JPA) é uma solução para persistência de dados, utilizada, inclusive, quando há
mapeamento do modelo orientado a objeto para bancos de dados relacionais.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, está perfeito – praticamente idêntica à definição!

Gabarito: C

13. (CESPE - 2013 – TRE/MS - Analista de Sistemas – C JPA é um framework MVC


de aplicações web que se destina a simplificar o desenvolvimento de interfaces
de usuário embasadas em web.

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, essa definição não faz sentido algum para JPA! No
entanto, substituindo JPA por JSF, a definição seria perfeita!

16712855225

Gabarito: E

14. (CESPE - 2010 – TRE/MT - Analista de Sistemas – E) JPA lida com a forma como
dados relacionais são mapeados para objetos Java e com a forma como esses
objetos são armazenados em um banco de dados relacional.

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

15. (CESGRANRIO - 2011 – PETROBRÁS - Analista de Sistemas – II) JPA é parte


integrante da especificação EJB e serve para definir as interfaces de acesso local
e/ou remoto de um componente EJB.

Comentários:

E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a
especificação surgiu após as implementações! Como uma das vantagens, pode-se
trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de
modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser
independente dessa), permitindo sua utilização em Ambientes Java SE e Java EE.

Conforme vimos em aula, é parte integrante da Especificação EJB, mas é uma


especificação de persistência para mapeamento objeto-relacional.

Gabarito: E

16. (CESPE - 2012 - -RO - Analista Judiciário - Análise de Sistemas –


Desenvolvimento – A JPA, um framework utilizado na camada de persistência,
define uma forma para mapear POJO (Plain Old Java Objects) para um banco
de dados.
16712855225

Comentários:

Rapidamente: algumas pessoas me perguntam qual a diferença entre um POJO e


um JavaBean! Todo JavaBean é um POJO, mas nem todo POJO é um JavaBean. Eles
são muito parecidos, mas o JavaBean segue diversas convenções de programação,
tais como: nomenclatura dos métodos, construtor público padrão e sem parâmetros,
entre outros. Para o JPA, o POJO é a unidade básica!

Conforme vimos em aula, a questão já começa errada! JPA é uma especificação e,


não, um framework. Como ela não foi anulada, vamos continuar nossa avaliação da
questão. Antigamente, nós usávamos Entity Beans. Após o EJB 3.0 e o surgimento

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

da Especificação JPA, passamos a utilizar POJO – que são fracamente acoplados,


simples e portáteis. Se ignorarmos o início, a questão está correta.

Gabarito: C

17. (FCC - 2013 – MPE/MA - Analista de Sistemas) Considere a classe Java a seguir
em uma aplicação que utiliza JPA, uma API que permite fazer o mapeamento de
persistência objeto/relacional:

package dao;
import javax.persistence.*;
public class ClienteDao {
private EntityManagerFactory emf;
private EntityManager em;
private EntityTransaction et;
private void iniciarTransacao()
{
emf = Persistence.createEntityManagerFactory("Exemplo");
em = emf.createEntityManager();
et = em.getTransaction();
et.begin();
}
}

O parâmetro “Exemplo”, passado para o método createEntityManagerFactory da


classe Persistence refere-se ao nome:

a) da unidade de persistência definido na tag persistence-unit contida no arquivo


persistence.xml.
b) do arquivo de persistência Exemplo.xml que contém as tags com os parâmetros
de conexão com o banco de dados.
c) do banco de dados relacional ao qual a aplicação deseja se conectar.
d) da tabela do banco de dados na qual os dados da aplicação serão persistidos.
e) da classe que faz a conexão com o banco de dados relacional ao qual a aplicação
16712855225

deseja se conectar.

Comentários:

É importante notar que a classe javax.persistence.Persistence procura o Descritor de


Implantação persistence.xml dentro de seu classpath. Ele procurará o Persistence Unit
com o mesmo nome do parâmetro da função createEntityManagerFactory, i.e.,
“Exemplo”. Obtido o EntityManagerFactory, basta chamar a função
createEntityManager.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Conforme vimos em aula (e esse é um exemplo padrão, logo a questão veio com
os mesmos nomes), o parâmetro é o Persistence Unit definido no Descritor de
Implantação (persistence.xml).

Gabarito: A

18. (FCC - 2012 - -PE - Programador de computador Em uma classe de entidade


de uma aplicação que utiliza JPA, a anotação que define um atributo que não
será salvo no banco de dados é a:

a) @Optional.
b) @Transient.
c) @Stateless.
d) @Stateful.
e) @Local.

Comentários:

ANOTAÇÃO DESCRIÇÃO

@Entity Indica que uma classe é uma entidade que deve ser persistida como tabela.
@Table Indica o nome de uma tabela para qual a entidade é mapeada.
@Column Indica que um atributo de uma classe é uma coluna de uma tabela.
@Id Indica que um atributo é a chave primária de uma entidade.
@namedQuery Define uma consulta.
@namedQueries Define várias consultas.
@UniqueConstraint Indica que uma propriedade não pode conter valores duplicados.
@Transient Indica que uma propriedade não deve ser persistida no banco de dados.
@Inheritance Define um relacionamento de herança à entidade.
16712855225

@ManyToOne Mapeamento muitos para um (N:1).


@OneToMany Mapeamento um para muitos (1:N).
@OneToOne Mapeamento um para um (1:1).

Conforme vimos em aula, trata-se da anotação @Transient.

Gabarito: B

19. (FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da
Informação Os estados do ciclo de vida de uma instância de uma entidade,
definidos na JPA 2.0, são:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

a) novo (new), gerenciado (managed), destacado (detached) e removido


(removed).

b) ativo (active), inativo (inactive) e removido (removed).

c) novo (new), temporário (temporary), permanente (permanent) e destacado


(detached).

d) novo (new), temporário (temporary) e destacado (detached)

e) gerenciado (managed), temporário (temporary), permanente (permanent) e


destacado (detached).

Comentários:

O ciclo de vida dos objetos de entidade consiste em quatro estados: Novo (New),
Gerenciado (Managed), Removido (Removed) e Destacado (Detached). Quando um
objeto é criado inicialmente seu estado é Novo. Nesse estado, o objeto ainda não está
associado a um EntityManager e não possui qualquer representação no banco de
dados. Bacana?

Conforme vimos em aula, trata-se da primeira opção!

Gabarito: A

(FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil -


Analista de Informáti Em relação à JPA e Hibernate, considere as seguintes
afirmativas. 16712855225

1. JPA especifica uma JSR.

2. Hibernate especifica uma JSR.

3. Hibernate cuida da camada de persistência enquanto JPA da camada de


transação.

4. Hibernate é uma implementação de JSR.

5. JPA é uma implementação de JSR.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Assinale a alternativa que indica todas as afirmativas corretas.

a) São corretas apenas as afirmativas 1 e 4.


b) São corretas apenas as afirmativas 2 e 3.
c) São corretas apenas as afirmativas 3 e 4.
d) São corretas apenas as afirmativas 1, 2 e 3.
e) São corretas apenas as afirmativas 3, 4 e 5

Comentários:

Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado
possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder
do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os
frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias
do Hibernate, TopLink, JDO, etc e condensou em uma especificação.

(1) Quando se cria uma especificação, dá-se um Número de JSR (Ex: JPA é JSR 338;
JTA é JSR 907; JMS é JSR 914; JSF é JSR 314, etc), portanto JPA especifica, sim, uma
JSR; (2) Não, Hibernate implementa uma JSR; (3) Não, JPA também cuida da Camada
de Persistência; (4) Perfeito, é uma implementação de JSR; (4) Não, JPA é uma
especificação de JSR.

Gabarito: A

21. (FCC - 2011 – TCE/PR – Analista de Sistemas A JPA:

a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em
aplicações Java SE. 16712855225

b) utiliza persistência gerenciada por contêiner (CMP), ou seja, as classes de


entidade e persistência necessitam de um contêiner presente em um servidor de
aplicações para serem executadas.

c) utiliza descritores XML para especificar informações do mapeamento


relacional de objeto, mas não oferece suporte a anotações.

d) suporta consultas dinâmicas nomeadas nas classes de entidade que são


acessadas apenas por instruções SQL nativas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

e) possui uma interface EntityBeans que padroniza operações Create Read


Update Delete (CRUD) que envolvem tabelas.

Comentários:

E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a
especificação surgiu após as implementações! Como uma das vantagens, pode-se
trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de
modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser
independente dessa), permitindo sua utilização em Ambientes Java SE e Java EE.

(a) Conforme vimos em aula, pode ser usada independente do EJB 3.0, inclusive em
Ambiente Java SE.

(b) Esse item é obsoleto atualmente. Não vale a pena discuti-lo, vai confundir a
cabeça de vocês. Está errado!

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de Descritores de
Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e
atualizações de dados. O desenvolvedor define como os objetos são mapeados e o
framework faz o resto – acessa o banco, gera os comandos SQL, etc.

(c) Conforme vimos em aula, pode-se utilizar Descritores de Implantação (XML) e


Anotações (Annotations).

 Java Persistence API (JPA): define um mapeamento objeto/relacional para


gerenciamento de dados relacionais;
16712855225

 Java Persistence Query Language (JPQL): define queries, em geral, estáticas, para
entidades e seus estados persistentes;

 Java Persistence Criteria API (JPCA): define queries, em geral, dinâmicas para
entidades e seus estados persistentes;

 Mapeamento de Metadados O/R: define um mapeamento por meio de Descritores


de Implantação (XML) ou Anotações (Annotations).

(d) Conforme vimos em aula, pode-se utilizar JPQL e JPCA, com acesso feito por
SQL ou Java.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Galera, vocês sabem o que é um EntityManager? Trata-se de uma interface que


funciona como serviço centralizado para todas as ações de persistência – mapeando
um conjunto de classes para um banco de dados particular. Em outras palavras, ele
é responsável por realizar operações de sincronismo com o Banco de Dados (Inserir,
Remover, Atualizar e Consultar), além de gerenciar o ciclo de vida das entidades.

(e) Conforme vimos em aula, o responsável por isso é a interface EntityManager.

Gabarito: A

(FCC - 2011 - TRT - 23ª REGIÃO (MT) - Técnico Judiciário - Tecnologia da


Informação) Em relação à JPA (Java Persistence API) é INCORRETO afirmar que:

a) @NamedQuery é aplicada para definir várias consultas.

b) @Entity define que haverá correspondência da classe com uma tabela do


banco de dados.

c) @Id define que o atributo que está mapeado com tal anotação corresponderá
à chave primária da tabela. 16712855225

d) @Column(name = "id", nullable = false) define que o atributo da classe


mapeado com tal anotação deve estar associado à coluna cujo nome é "id", além
de definir que tal campo não pode ser nulo.

e) @OneToMany indica que o atributo contém um conjunto de entidades que a


referenciam.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

ANOTAÇÃO DESCRIÇÃO

@Entity Indica que uma classe é uma entidade que deve ser persistida como tabela.
@Table Indica o nome de uma tabela para qual a entidade é mapeada.
@Column Indica que um atributo de uma classe é uma coluna de uma tabela.
@Id Indica que um atributo é a chave primária de uma entidade.
@namedQuery Define uma consulta.
@namedQueries Define várias consultas.
@UniqueConstraint Indica que uma propriedade não pode conter valores duplicados.
@Transient Indica que uma propriedade não deve ser persistida no banco de dados.
@Inheritance Define um relacionamento de herança à entidade.
@ManyToOne Mapeamento muitos para um (N:1).
@OneToMany Mapeamento um para muitos (1:N).
@OneToOne Mapeamento um para um (1:1).

Conforme vimos em aula, namedQuery define apenas uma consulta! A Anotação


namedQueries é quem define diversas consultas!

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

HIBERNATE

Galera, Java começou a ficar extremamente popular em ambientes corporativos,


mas havia um problema que estava incomodando os desenvolvedores:
produtividade estava prejudicada porque eles estavam perdendo muito tempo nas
codificações de Queries SQL e em códigos JDBC. E quando era necessário mudar o
banco de dados por um de outro fabricante? O que fazer?

Além disso, Java ajudou a divulgar o Paradigma Orientado a Objetos, em que


informações eram representadas por meio de classes, atributos, herança,
polimorfismo, encapsulamento, etc. Isso gerava conflito com o Paradigma
Relacional dos bancos de dados, em que as informações eram representadas por
meio de tabelas, colunas, linhas, chaves primárias, chaves estrangeiras, etc.

Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma
tabela e vice-versa. Logo, começaram a surgir alguns frameworks que auxiliavam
essa tarefa – são as famosas Ferramentas de ORM – Object-Relational Mapping (ou
Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate e TopLink – a
primeira, livre, open-source, tornou-se uma referência mundial3.

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de mapeamentos,
16712855225

como Descritores de Implantação (XML) ou Anotações (Annotations) –


principalmente para consultas e atualizações de dados. O desenvolvedor define
como os objetos são mapeados e o framework faz o resto.

O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas


do banco de dados e o Hibernate faz todo o acesso ao banco, gerando inclusive o
código SQL necessário – não é necessário fazer SELECT, UPDATE, INSERT, DELETE, etc!

3
Hibernate tornou-se um framework tão popular que acabou por ser utilizado como referência para construção
da Especificação de Persistência Java (JPA). Apesar disso, ele também é oferecido para executar a mesma função
na plataforma .NET é o famoso NHibernate.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Permite fazer uma persistência automática entre classes e tabelas, propriedades e


colunas, associações e chaves estrangeiras, tipos Java e tipos SQL, entre outros.

OBSERVAÇÕES

O Mapeamento Objeto-Relacional (ORM) funciona com a transformação dos dados de um


objeto em uma tupla (linha) de uma tabela de um banco de dados, ou de forma inversa, com
a transformação de uma tupla (linha) da tabela em um objeto da aplicação – é um
relacionamento bidirecional.
Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a
oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Lembrando que o HQL é uma linguagem muito parecida com o SQL. No entanto,
comparado a este último, o HQL é totalmente orientado a objetos, e compreende
noções de herança, polimorfismo e associações. Dessa forma, ele se aproxima mais
das regras de negócio das aplicações, visto que essas também são escritas em geral
em um paradigma orientado a objetos.

Vocês percebem a diferença entre essas duas linguagens de consulta? SQL é uma
linguagem relacional e HQL é uma linguagem orientada a objetos. A sintaxe é
bastante parecida, inclusive existem várias cláusulas em comum, mas elas operam
sobre objetos persistentes e suas propriedades em vez de tabelas e colunas.
Bacana? Nice! ;-)

Christian Bauer afirma que o Hibernate é uma ferramenta que transforma os dados
16712855225

da estrutura lógica de um banco de dados em objetos definidos pel


desenvolvedor. Usando o Hibernate, não há a necessidade de escrever muito do
código de manipulação de banco de dados, pois ele utiliza HQL, acelerando a
velocidade do seu desenvolvimento de uma forma fantástica.

Ele continua por dizer que se pode mudar a qualquer momento o SGDB utilizado.
O framework não é uma boa ferramenta para aplicações que fazem uso extensivo
de stored procedures, triggers ou que implementam a maior parte da lógica da
aplicação no banco de dados, contando com um modelo de objetos simples - não
vai se beneficiar com o uso do Hibernate.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Vocês sacaram? Ele é mais indicado para sistemas que contam com um modelo mais
rico, em que a maior parte da lógica de negócios fica na própria aplicação,
dependendo pouco de funções específicas do banco de dados. Ora, se a lógica de
negócio estiver no banco de dados, não faz muito sentido utilizar o Hibernate,
porque ele continuará manipulando o banco de dados diretamente.

OBSERVAÇÕES

Quando da utilização de Hibernate, não é proibitiva a utilização de SQL! Galera... vejam só: é
muito difícil trabalhar com dois paradigmas conceituais diferentes. Antigamente, perdia-se
muito tempo criando instruções SQL para transformar objetos em tuplas do banco de dados
- esse era um processo exaustivo e cheio de falhas. O Mapeamento Objeto-Relacional propõe
a transformação de classes e objetos em tabelas e tuplas de maneira fácil e reutilizável.

Em vez de o desenvolvedor criar todas as instruções SQL, ele pode utilizar um framework
sem sair do paradigma de orientação a objetos e de maneira transparente. Assim, todo
aquele trabalho árduo de codificação e testes se resume a algumas configurações e um
mínimo de código, sem manter um contato direto com o banco de dados. O Hibernate fornece
o papel de persistência, de forma praticamente transparente para o programador, i.e., ele
praticamente só usa anotações e interfaces!

Além do oferecer Mecanismos de ORM, o framework também pode trabalhar com


um sistema de cache das informações do banco de dados, aumentando ainda mais
a performance das aplicações. O esquema de cache é complexo e extensível,
existindo diversas implementações possíveis. Um recurso interessante é o Query
Cache, que permite fazer um cache das queries executadas diversas vezes.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

HIBERNATE: ARQUITETURA

A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de


arquitetura em que o Hibernate funciona como uma Camada de Persistência que
conecta os objetos da aplicação a uma base de dados relacional. As classes,
interfaces e outros componentes são definidos no pacote org.hibernate. Além disso,
existem três arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml.

Qual a diferença entre eles, professor? O primeiro e o segundo executam a mesma


função, i.e., configurar um serviço hibernate. Se ambos estiverem configurados, o
primeiro sobrescreve o segundo. Ele contém informações sobre o local em que se
encontra o banco de dados; conexões, usuário, senha, propriedades; tipo de cache
utilizado; local onde se encontram os caminhos para os arquivos hbm.xml; etc:

<?xml version="1.0" encoding="UTF-8"?>


http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/banco_dados</property>
<property name="hibernate.connection.username">usuario</property>
<property name="hibernate.connection.password"/>senha</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
16712855225

<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.generate_statistics">true</property>
<mapping resource="classePOJO.hbm.xml"/>
</session-factory>
</hibernate-configuration>

Observem também que ele configura a SessionFactory, que é a classe utilizada pelo
Hibernate para interagir com o banco de dados por meio de sessões. Por fim, o
arquivo hbm.xml é responsável por mapear o banco de dados, informando o nome
da tabela, tipo de dados, identificadores, entre outros – como pode ser visto
representado no código abaixo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
<?xml version="1.0" encoding="UTF-8"?>
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="aplicacao.exemplo" table="tabela_exemplo">
<id column="id" name="id" type="java.lang.Long">
<generator class="native"></generator>
</id>
<property column="nome" name="nome" length="50" type="java.lang.String"/>
<property column="email" name="email" length="50" type="java.lang.String"/>
<property column="data_nascimento" name="data_nascimento"
type="java.util.Date"/>
</class>
</hibernate-mapping>

Em outras palavras, o primeiro arquivo trata principalmente da interação com o


banco de dados. Já o segundo trata do mapeamento de classe do modelo de
domínio orientado a objetos para uma base de dados relacional. É uma boa prática
de programação criar um arquivo de mapeamento hbm.xml individuais para cada
classe de persistência4 e, então, referenciá-la e mapeá-la no cfg.xml.

Prosseguindo... há ainda uma forma de representar a arquitetura de maneira mais


ampla, conforme é apresentado na imagem acima! Observem que entre a Aplicação
e o Banco de Dados, temos uma camada de persistência do Hibernate (com seus
componentes – alguns opcionais) e temos uma camada de APIs (JNDI, JDBC e JTA).
16712855225

Vamos ver alguns desses componentes responsáveis por controlar transações:

 Session (org.hibernate.Session): trata-se de um objeto leve, single-threaded, de vida


curta que representa uma comunicação entre a aplicação e os objetos
persistentes, através de uma conexão JDBC. É criada por uma SessionFactory e é
instanciada cada vez que uma interação com o banco de dados for necessária.
É por meio dela que objetos persistentes são salvos e recuperados.

4
Classes Persistentes não precisam implementar interfaces ou herdar de uma classe-base especial!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 SessionFactory (org.hibernate.SessionFactory): trata-se de um objeto pesado, thread-safe


e imutável de coleções de mapeamentos objeto-relacional para um único banco
de dados – deve existir apenas uma instância na aplicação. É uma fábrica de
sessões e é necessário um SessionFactory por banco de dados utilizando um
arquivo de configuração separado – semelhante ao EntityManagerFactory do JPA.

 Transaction (org.hibernate.Transaction): trata-se de um objeto single-threaded de vida


curta utilizado por uma aplicação para especificar unidades indivisíveis e
atômicas de uma operação de manipulação de dados. Ele abstrai os detalhes de
transações de camadas inferiores, sendo opcional – o desenvolvedor escolhe se
o utiliza ou se gerencia transações em seu próprio código de aplicação.

 Configuration (org.hibernate.Configuration): trata-se de um objeto utilizado para realizar as


configurações de inicialização do Hibernate. Por meio dele, definem-se diversas
configurações (driver de banco, dialeto, etc) e, a partir de uma instância desse
objeto, indica-se como os mapeamentos entre classes e tabelas de banco de
dados devem ser realizados.

OBSERVAÇÕES

Classes Persistentes são aquelas que implementam as entidades de domínio de negócio! O


Hibernate trabalha associando cada tabela do banco de dados a um POJO (Plain Old Java
Object) – que nada mais é que um objeto simples que possui um construtor padrão sem
argumentos.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

HIBERNATE: CICLO DE VIDA DA PERSISTÊNCIA

Agora vamos falar um pouco sobre os estados de um objeto no Hibernate! Nas


diversas aplicações existentes, sempre que for necessário propagar o estado de um
objeto que está em memória para o banco de dados ou vice-versa, há a necessidade
de que a aplicação interaja com uma camada de persistência. Isto é feito, invocando
o gerenciador de persistência e as interfaces de consultas do Hibernate.

Quando interagindo com o mecanismo de persistência, é necessário ter


16712855225

conhecimento sobre os estados do ciclo de vida. Em aplicações orientadas a objetos,


a persistência permite que um objeto continue a existir mesmo após a destruição
do processo que o criou. Na verdade, o que continua a existir é seu estado, já que
pode ser armazenado em disco e então ser recriado em um novo objeto.

Galera, um objeto de classes persistentes pode estar em um dos três diferentes


estados: Transiente (Transient), Persistente (Persistent) ou Desanexado (Detached), como
nós podemos ver representado na imagem acima! Bem, vamos falar agora um
pouquinho sobre cada um desses estados – eu recomendo que vocês entendam
bem o funcionamento:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 Transiente: a instância não esteve nem está associada a um contexto persistente,


isto é, não há uma representação no banco de dados, nem um valor
identificador. Ela é instanciada, utilizada, destruída e não pode ser reconstruída
de forma automática.

 Persistente: a instância está atualmente associada a um contexto persistente, isto


é, há uma representação no banco de dados e um valor identificador. Qualquer
mudança em um objeto nesse estado é detectada e sincronizada com a base de
dados.

 Desanexado: a instância foi associada a um contexto persistente5, no entanto


não está mais associada por alguma razão (Ex: Fim de sessão). Ainda existe uma
referência, o objeto ainda pode ser modificado e essas modificações podem
futuramente ser persistidas – trata-se de um estado intermediário.

O processo funciona assim: cria-se, inicialmente, o objeto POJO! Ele estará em


estado transiente, i.e., não foi persistido, não representa uma linha no banco de
dados e não está associado a uma sessão. Quando o objeto é salvo ou atualizado,
ele finalmente é persistido, i.e., representa uma linha no banco de dados e está
associado a uma única sessão.

Caso o objeto seja despejado, fechado ou o cache seja limpado, ele se torna
desanexado, i.e., ele tem uma entrada no banco de dados, porém não está
conectado a nenhuma sessão. Caso ele seja atualizado, salvo, atualizado ou
trancado, ele volta para o estado persistente. E se, depois disso, ele for deletado,
volta para o estado transiente.

16712855225

5
Contexto Persistente é outro nome para o objeto Session do Hibernate.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

HIBERNATE: ANOTAÇÕES E TIPOS DE MAPEAMENTO

Para finalizar, vamos falar um pouco sobre anotações! As anotações podem ser
definidas como metadados que aparecem no código fonte e são ignorados pelo
compilador. Qualquer símbolo em um código Java que comece com uma @ (arroba)
é uma anotação. Este recurso foi introduzido na linguagem Java a partir da versão
Java SE 5.0. As anotações mais comuns são:

ANOTAÇÃO DESCRIÇÃO

Utilizada para especificar detalhes da tabela que serão utilizados para persistir
entidades na base de dados. Caso essa anotação seja omitida, não resultará em
@Table erro, porém será utilizado o nome da classe como valor default. Dessa forma,
apenas definimos a anotação se quisermos sobrescrever o nome da classe.
Possui os atributos: name, catalog, schema.
Utilizada para especificar qual propriedade da tabela será a identificadora, isto
é, será a chave primária. Pode ser um campo único ou a combinação de múltiplos
@Id campos dependendo da estrutura da tabela.

Utilizada para especificar detalhes da coluna para o qual um campo ou


propriedade será mapeado. Pode-se utilizar essa anotação com os atributos:
@Column name, length, nullable e unique.

Utilizada para marcar uma classe como uma Entidade ou POJO. Deve conter um
construtor sem argumentos que seja visível com o menor escopo de proteção.
16712855225

@Entity

Em outras palavras, as anotações marcam partes de objetos de forma que tenham


algum significado especial. Quanto ao mapeamento, devemos ter alguns cuidados
especiais com seus tipos! Como assim, professor? Quando preparamos um
documento de mapeamento de tipos, nós mapeamos tipos de dados Java para tipos
de dados usados em bases de dados relacionais.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Os tipos declarados e utilizados nos arquivos de mapeamento não são tipos de


dados Java nem tipos de dados SQL – eles são denominados Tipos Hibernate e
podem traduzir do Java para SQL e vice-versa. Entenderam bem? Eles podem até
ter nomes parecidos, mas não são iguais (Hibernate: float; Java: Float; SQL: FLOAT).
Vejamos a tabela abaixo com os tipos primitivos:

Tipo de Mapeamento Tipo Java Tipo SQL


integer int or java.lang.Integer INTEGER
long long or java.lang.Long BIGINT
short short or java.lang.Short SMALLINT
float float or java.lang.Float FLOAT
double double or java.lang.Double DOUBLE
big_decimal java.math.BigDecimal NUMERIC
character java.lang.String CHAR(1)
string java.lang.String VARCHAR
byte byte or java.lang.Byte TINYINT
boolean boolean or java.lang.Boolean BIT
yes/no boolean or java.lang.Boolean CHAR(1) ('Y' or 'N')
true/false boolean or java.lang.Boolean CHAR(1) ('T' or 'F')

Vamos ver um exemplo de uma Tabela EMPREGADO:

create table EMPREGADO (


id INT NOT NULL auto_increment,
primeiro_nome VARCHAR(20) default NULL,
ultimo_nome VARCHAR(20) default NULL,
salario INT default NULL,
PRIMARY KEY (id)
);

Abaixo podemos ver o mapeamento da Classe Empregado com anotações para


16712855225

mapear objetos definidos na tabela EMPREGADO:

import javax.persistence.*;

@Entity
@Table(name = "EMPREGADO")
public class Empregado {
@Id @GeneratedValue
@Column(name = "id")
private int id;

@Column(name = "primeiro_nome")
private String primeiroNome;

@Column(name = "ultimo_nome")
private String ultimoNome;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

@Column(name = "salario")
private int salario;

public Empregado() {}
public int getId() {
return id;
}
public void setId( int id ) {
this.id = id;
}
public String getPrimeiroNome() {
return primeitoNome;
}
public void setPrimeiroNome( String primeiro_nome) {
this.primeiroNome= primeiro_nome;
}
public String getUlitmoNome() {
return ultimoNome;
}
public void setUltimoNome( String ultimo_nome) {
this.ultimoNome = ultimo_nome;
}
public int getSalario() {
return salario;
}
public void setSalario( int salario) {
this.salario = salario;
}
}

Agora vamos analisar as anotações! O Hibernate detecta a anotação @Id em um


campo, assume que ele deve ser uma chave primária e deverá acessar as
propriedades de um objeto diretamente através desse campo em tempo de
execução. Se colocássemos essa anotação no método getId( ), permitiríamos o acesso
às propriedades através de métodos getters e setters.

Da mesma forma, todas as outras anotações também são colocadas em campos ou


métodos, dependendo da estratégia adotada. A anotação @Entity marca a classe
como um POJO, já a anotação @Table especifica detalhes da tabela que será
persistida, isto é, seu nome será “EMPREGADO”. A anotação @GeneratedValue
16712855225

determina a chave primária mais apropriada em termos de portabilidade.

Galera, vamos falar agora rapidamente também sobre as associações! O termo


associação é utilizado para se referir aos relacionamentos entre as entidades. Os
relacionamentos 1-para-1 (um-para-um), 1-para-n (um-para-muitos) e n-para-n
(muitos-para-muitos) são os mais comuns entre as entidades de um banco de
dados. Bacana?

O relacionamento um-para- -1) é bem simples de entender. Basta verificar


relação noivo e noiva. Ora, um noivo só possui uma noiva e uma noiva só possui

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

um noivo. Outro exemplo: um número de identidade só se refere a uma pessoa e


uma pessoa só tem um número de identidade. Tranquilo de entender, não é? A
anotação utilizada para esse mapeamento é @OneToOne.

O relacionamento um-para-muitos (1-n) é bem simples de entender. Basta verificar


a relação entre time de futebol e jogador . Ora, um time de futebol tem vários
jogadores, mas um jogador só joga em um time de futebol. Outro exemplo: um
órgão tem vários servidores, mas um servidor pertence a um único órgão. Tranquilo
de entender, não é? A anotação utilizada para esse mapeamento é @OneToMany.

O relacionamento muitos-para-muitos (n-n) é também bem fácil de entender. Basta


verificar a relação entre times de futebol e campeonatos de futebol. Ora, um time
de futebol joga vários campeonatos e um campeonato contém vários times de
futebol. Tranquilo de entender, não é? A anotação utilizada para esse mapeamento
é @ManyToMany. Certinho?

Galera, a operação simples de acessar uma base de dados é uma operação muito
custosa, mesmo quando se trata de uma simples consulta. Aliás, uma simples
consulta, por exemplo, envolve uma requisição para o servidor, o banco de dados
deve compilar essa consulta, rodar e retornar um resultado que por sua vez será
retornado ao cliente.

A maioria das bases de dados utilizam caches para os resultados de uma consulta,
caso essas consultas são executadas inúmeras vezes. Dessa forma, elimina-se o
overhear de I/O do disco e tempo de compilação da consulta. No entanto, isso terá
pouco valor caso exista um grande número de clientes fazendo diferentes
solicitações.

Além disso, mesmo quando temos um cache para os resultados, isso não elimina o
16712855225

tempo que levamos para transmitir a informação na rede, que é considerada a parte
mais relevante do atraso. Algumas aplicações são capazes de tirar vantagens de
aplicações contidas na própria base de dados, mas isso é uma exceção e tais bases
de dados possuem suas limitações.

Em vez disso, o mais apropriado é termos uma cache no cliente final que faz a
conexão com a base de dados. Isto não é provido ou suportado diretamente pela
API JDBC, mas o Hibernate provê uma cache de nível um, também chamado de L1
ou simplesmente de cache, através da qual todas as requisições devem passar. Uma
cache de segundo nível é opcional e configurável.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

A cache de nível um (L1) garante que dentro de uma session, requisições para um
dado objeto da base de dados retornará sempre a mesma instância do objeto,
prevenindo assim que um mesmo objeto seja carregado múltiplas vezes pelo
Hibernate ou que a informação entre em conflito. Sobre esse assunto, é isso que
vocês precisam saber.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas No Hibernate,


apenas a linguagem de consulta HQL (Hibernate Query Language) pode ser
utilizada. A HQL executa os pedidos SQL sobre as classes de persistência do Java
em vez de tabelas no banco de dados, o que diminui a distância entre o
desenvolvimento das regras de negócio e o banco de dados.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Lembrando que o HQL é uma linguagem muito parecida com o SQL. No entanto,
comparado a este último, o HQL é totalmente orientado a objetos, e compreende
noções de herança, polimorfismo e associações. Dessa forma, ele se aproxima mais
das regras de negócio das aplicações, visto que essas também são escritas em geral
em um paradigma orientado a objetos.

Conforme vimos em aula, pode-se utilizar SQL e Criteria Query API. A segunda parte
afirma que o HQL atua sobre o modelo orientado a objetos em vez do modelo
relacional, logo ele diminui a distância entre o desenvolvimento de regras de
16712855225

negócio e o banco de dados, porque – em geral – as regras de negócio são escritas


seguindo o paradigma orientado a objetos.

Gabarito: E

(CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação


O Hibernate, um framework de mapeamento objeto relacional (ORM), cria uma
camada persistência na solução desenvolvida, o que permite ligar os objetos aos
bancos de dados relacionais. Entre seus serviços, o Hibernate provê um meio de
se controlar transações, por meio de métodos de suas interfaces session e

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

transaction, tendo ainda suporte a herança e polimorfismo. É distribuído sob a


licença LGPL, o que permite seu uso em projetos comerciais ou open source.

Comentários:

A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de


arquitetura em que o Hibernate funciona como uma camada de persistência que
conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces
e outros componentes são definidos no pacote org.hibernate. Além disso, existem três
arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml.

Prosseguindo... há ainda uma forma de representar a arquitetura de maneira mais


ampla, conforme é apresentado na imagem acima! Observem que entre a Aplicação
e o Banco de Dados, temos uma camada de persistência do Hibernate (com seus
componentes – alguns opcionais) e temos uma camada de APIs (JNDI, JDBC e JTA).
Vamos ver alguns desses componentes responsáveis por controlar transações:

Conforme vimos em aula, cria-se de fato uma camada de persistência, que contém
componentes que controlam as transações com o banco de dados.

Gabarito: C

(CESPE - 2010 - TCU - Auditor Federal de Controle Externo - Tecnologia da


Informação - Parte II

Uma equipe de desenvolvimento de software recebeu a incumbência de desenvolver um sistema com as


características apresentadas a seguir.

 O sistema deverá ser integrado, interoperável, portável e seguro.


16712855225

 O sistema deverá apoiar tanto o processamento online, quanto o suporte a decisão e gestão de
conteúdos.
 O sistema deverá ser embasado na plataforma JEE (Java enterprise edition) v.6, envolvendo servlets,
JSP (Java server pages), Ajax, JSF (Java server faces) 2.0, Hibernate 3.5, SOA e web services.

O líder da equipe iniciou, então, um extenso processo de coleta de dados com o objetivo de identificar as
condições limitantes da solução a ser desenvolvida e tomar decisões arquiteturais e tecnológicas que
impactarão várias características funcionais e não funcionais do sistema, ao longo de seu ciclo de vida. A
partir dessa coleta, o líder deverá apresentar à equipe um conjunto de informações e de decisões.

A tecnologia Hibernate 3.5 é apropriada para o sistema a ser desenvolvido: entre as


características que a credenciam, está o fato de ela possibilitar a recuperação de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

objetos por meio da formulação de queries em linguagens HQL (hibernate query


language) e SQL (structured query language), bem como pelo uso de APIs
(application programming interfaces) de busca por critério, entre outras.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Conforme vimos em aula, está perfeito! Vocês já notaram que isso cai bastante, né?!

Gabarito: C

( SPE - - CEHAP- - Programador de computador No framework


Hibernate, é comum que uma instância de uma classe persistente tenha três
estados específicos. Assinale a opção que contém esses três estados.

a) plugged, disconnected, timewait


b) connected, disconnected, detached
c) transient, persistent, detached
d) transient, connected, timewait

Comentários:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Conforme vimos em aula, trata-se do Transient, Persistent e Detached.

Gabarito: C

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas O Hibernate, framework


utilizado no desenvolvimento de consultas e atualização de dados em um banco
relacional, foi criado para facilitar a integração entre programas em Java,
funcionando também em ambientes .Net (NHibernate).

Comentários:

Nota de Rodapé: Hibernate tornou-se um framework tão popular que acabou por
ser utilizado como referência para construção da Especificação de Persistência Java
(JPA). Apesar disso, ele também é oferecido para executar a mesma função na
plataforma .NET – é o famoso NHibernate.

Conforme vimos em aula, está perfeito (com uma ressalva)! Ele não foi criado com
o intuito de facilitar a integração entre Aplicações Java – não faz sentido! Ele foi
criado com o intuito de facilitar a integração entre Aplicações Java e Bancos de
Dados Relacionais, fazendo o mapeamento entre ambos os paradigmas. Bacana?

Gabarito: C

(CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas -


Desenvolvimento de Sistemas No Hibernate, o recurso Query Cache possibilita
fazer o cache de queries que são executadas várias vezes.

Comentários: 16712855225

Além do oferecer Mecanismos de ORM, o framework também pode trabalhar com


um sistema de cache das informações do banco de dados, aumentando ainda mais
a performance das aplicações. O esquema de cache é complexo e extensível, existindo
diversas implementações possíveis. Um recurso interessante é o Query Cache, que
permite fazer um cache das queries executadas diversas vezes.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas No Hibernate, caso o nome da classe seja diferente
do nome da tabela mapeada, é necessário informar, na anotação @Table, o
nome da tabela, por meio do atributo name.

Comentários:

ANOTAÇÃO DESCRIÇÃO
Utilizada para especificar detalhes da tabela que serão utilizados para persistir entidades na
base de dados. Caso essa anotação seja omitida, não resultará em erro, porém será utilizado
@Table
o nome da classe como valor default. Dessa forma, apenas definimos a anotação se quisermos
sobrescrever o nome da classe. Possui os atributos: name, catalog, schema.

Conforme vimos em aula, é exatamente isso! Sobrescreve-se o nome da tabela por


meio do atributo name.

Gabarito: C

(CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas Em


Hibernate, a configuração de conexões de banco de dados deve ser feita
somente por meio do uso de arquivo de propriedade.

Comentários:

A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de


arquitetura em que o Hibernate funciona como uma camada de persistência que
conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces
e outros componentes são definidos no pacote org.hibernate. Além disso, existem três
arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml.
16712855225

Qual a diferença entre eles, professor? O primeiro e o segundo executam a mesma


função, i.e., configurar um serviço hibernate. Se ambos estiverem configurados, o
primeiro sobrescreve o segundo. Ele contém informações sobre o local em que se
encontra o banco de dados; conexões, usuário, senha, propriedades; tipo de cache
utilizado; local onde se encontram os caminhos para os arquivos hbm.xml; etc:

Conforme vimos em aula, pode ser feito por meio do arquivo de propriedades
(hibernate.properties) ou arquivo de configuração (hibernate.cfg.xml).

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2014 - SUFRAMA - Analista de Sistemas) De acordo com o mapeamento


mostrado abaixo, no Hibernate, a coluna Evento_ID manterá a chave primária da
tabela Eventos.

<hibernate-mappingpackage=
"org.hibernate.tutorial.domain">
<class name="Evento" table="Eventos">
<id name="id" column="Evento_ID">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>

Comentários:

ANOTAÇÃO DESCRIÇÃO

Utilizada para especificar detalhes da tabela que serão utilizados para persistir entidades na
base de dados. Caso essa anotação seja omitida, não resultará em erro, porém será utilizado
@Table
o nome da classe como valor default. Dessa forma, apenas definimos a anotação se quisermos
sobrescrever o nome da classe. Possui os atributos: name, catalog, schema.
Utilizada para especificar qual propriedade da tabela será a identificadora, isto é, será a chave
primária. Pode ser um campo único ou a combinação de múltiplos campos dependendo da
@Id
estrutura da tabela.

Utilizada para especificar detalhes da coluna para o qual um campo ou propriedade será
mapeado. Pode-se utilizar essa anotação com os atributos: name, length, nullable e unique.
@Column

Utilizada para marcar uma classe como uma Entidade ou POJO. Deve conter um construtor
sem argumentos que seja visível com o menor escopo de proteção.
@Entity 16712855225

Conforme vimos em aula, houve o mapeamento da classe Evento para a Tabela


Eventos, cujo atributo identificador “id” será a coluna “Evento_ID”.

Gabarito: C

10. (CESPE - 2010 - TRE-BA - Programador de computador O Hibernate, um


framework para o mapeamento objeto-relacional, é escrito na linguagem Java e,
por isso, somente pode ser executado no ambiente Java.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Comentários:

Nota de Rodapé: Hibernate tornou-se um framework tão popular que acabou por
ser utilizado como referência para construção da Especificação de Persistência Java
(JPA). Apesar disso, ele também é oferecido para executar a mesma função na
plataforma .NET – é o famoso NHibernate.

Conforme vimos em aula, ele também pode ser executado em ambiente .NET.

Gabarito: E

11. (CESPE - 2013 - MPOG - Técnico de Nível Superior - - Categoria Profissional


7 Quando se desenvolve um mapeamento com Hibernate, uma classe
persistente criada não precisa implementar ou herdar qualquer classe especial
do framework Hibernate.

Comentários:

Nota de Rodapé: Classes Persistentes não precisam implementar interfaces ou herdar


de uma classe-base especial!

Conforme vimos em aula, classes persistentes não precisam implementar interfaces


ou herdar uma classe-base especial.

Gabarito: C

12. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) O objeto Session Factory do Hibernate mantém o
mapeamento objeto relacional na sessão.16712855225

Comentários:

 SessionFactory (org.hibernate.SessionFactory): trata-se de um objeto pesado, thread-safe e


imutável de coleções de mapeamentos objeto-relacional para um único banco de
dados – deve existir apenas uma instância na aplicação. É uma fábrica de sessões
e é necessário um SessionFactory por banco de dados utilizando um arquivo de
configuração separado – semelhante ao EntityManagerFactory do JPA.

Conforme vimos em aula, é na sessão que se mantém o mapeamento objeto-


relacional.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Gabarito: C

13. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) A Interface Criteria do Hibernate é utilizada para
realizar consultas ao banco de dados.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Conforme vimos em aula, Criteria Query API é – sim – utilizada para consultas em
bancos de dados.

Gabarito: C

14. (CESPE - 2014 - SUFRAMA - Analista de Sistemas) Os tipos de mapeamento do


Hibernate são considerados tipos de dados SQL e precisam de conversão para
dados Java nas respectivas classes Java.

Comentários:

Os tipos declarados e utilizados nos arquivos de mapeamento não são tipos de dados
Java nem tipos de dados SQL – eles são denominados Tipos Hibernate e podem
traduzir do Java para SQL e vice-versa. Entenderam bem? Eles podem até ter nomes
16712855225

parecidos, mas não são iguais (Hibernate: date; Java: Date; SQL: DATE). Vejamos a tabela
abaixo:

Conforme vimos em aula, os tipos de mapeamento não são tipos SQL, muito menos
Java – são Tipos Hibernate!

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da


Informação Linguagem de queries, fornecida pelo Hibernate, que é similar em
aparência ao SQL e que, no entanto, é orientada a objeto e compreende noções
como herança, polimorfismo e associação. Trata-se de:

a) HiBD-QL.
b) OOQL.
c) ORM-QL.
d) HQL.
e) JEEQL.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Conforme vimos em aula, trata-se do HQL!

Gabarito: D
16712855225

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação Os três estados de objeto definidos pelo framework Hibernate são:

a) Temporário (Temporary), Permanente (Permanent) e Resiliente (Resilient).


b) Transiente (Transient), Persistente (Persistent) e Resiliente (Resilient).
c) Temporário (Temporary), Persistente (Persistent) e Destacado (Detached).
d) Transiente (Transient), Persistente (Persistent) e Destacado (Detached).
e) Transiente (Transient), Permanente (Permanent) e Resiliente (Resilient).

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Conforme vimos em aula, trata-se do Transiente, Persistente e Destacado.

Gabarito: D

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) Com


relação ao framework Hibernate é correto afirmar:

a) Permite fazer a persistência automatizada dos objetos em uma aplicação Java


para as tabelas de um banco de dados relacional, utilizando metadados
(descrição dos dados) que descrevem o mapeamento entre os objetos e o banco
de dados.

b) É uma boa opção apenas para sistemas que fazem muito uso de stored
procedures, triggers ou que implementam a maior parte da lógica da aplicação
16712855225

no banco de dados vai se beneficiar mais com o uso do Hibernate.

c) Permite enviar unidirecionalmente uma representação de dados de um banco


de dados relacional para um modelo de objeto utilizando um esquema baseado
exclusivamente em Hibernate Query Language (HQL).

d) A Java Persistence API (JPA) implementa o Hibernate, que é parte do


Enterprise JavaBeans 4.0.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

e) Em uma aplicação criada com Hibernate, para cada classe de persistência é


necessário criar um arquivo de mapeamento XML que deve ser salvo
obrigatoriamente com o nome da classe seguido pelo sufixo .map.xml.

Comentários:

O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas do


banco de dados e o Hibernate faz todo o acesso ao banco, gerando inclusive os
comandos SQL necessários – não é necessário fazer SELECT, UPDATE, INSERT, DELETE, etc!
Permite fazer uma persistência automática entre classes e tabelas, propriedades e
colunas, associações e chaves estrangeiras, tipos Java e tipos SQL, entre outros.

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de mapeamentos,
como Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente
para consultas e atualizações de dados. O desenvolvedor define como os objetos são
mapeados e o framework faz o resto!

(a) Conforme vimos em aula, tudo está perfeito!

Ele continua por dizer que vale lembrar que se pode mudar a qualquer momento o
SGDB utilizado. O framework não é uma boa ferramenta para aplicações que fazem
uso extensivo de stored procedures, triggers ou que implementam a maior parte da
lógica da aplicação no banco de dados, contando com um modelo de objetos simples
- não vai se beneficiar com o uso do Hibernate.

(b) Conforme vimos em aula, esses não irão se beneficiar!

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


16712855225

oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate


Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

(c) Conforme vimos em aula, não é exclusivamente HQL – há ainda HQL e Criteria.
Ademais, é uma relação bidirecional!

Nota de Rodapé: Hibernate tornou-se um framework tão popular que acabou por
ser utilizado como referência para construção da Especificação de Persistência Java

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(JPA). Apesar disso, ele também é oferecido para executar a mesma função na
plataforma .NET – é o famoso NHibernate.

(d) Conforme vimos em aula, Hibernate implementa JPA (e, não, o contrário)!

Em outras palavras, o primeiro arquivo trata principalmente da interação com o


banco de dados. Já o segundo trata do mapeamento de classe do modelo de domínio
orientado a objetos para uma base de dados relacional. É uma boa prática de
programação criar um arquivo de mapeamento hbm.xml individuais para cada classe
de persistência e, então, referenciá-la e mapeá-la no cfg.xml.

(e) Conforme vimos em aula, pode-se usar annotations. Ademais, o sufixo seria
hbm.xml.

Gabarito: A

(FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da


Informação) Hibernate é um framework:

a) que separa as funções que envolvem a construção de aplicações Web, através


da associação dos eventos do lado cliente com os manipuladores dos eventos
do lado do servidor.

b) pelo qual o programador utiliza a infraestrutura do servidor de aplicação


voltada para o desenvolvimento de aplicações de missão crítica e de aplicações
empresariais em geral.

c) no qual as questões de infraestrutura, segurança, disponibilidade e


escalabilidade são responsabilidade do servidor de aplicações, permitindo que o
16712855225

programador se concentre, apenas, nas necessidades do negócio do cliente.

d) que permite ao desenvolvedor de páginas para internet produzir aplicações


que acessem o banco de dados, manipulem arquivos no formato texto e
capturem informações a partir de formulários.

e) cujo objetivo é diminuir a complexidade entre os programas Java que


precisam trabalhar com um banco de dados do modelo relacional.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas do


banco de dados e o Hibernate faz todo o acesso ao banco, gerando inclusive os
comandos SQL necessários – não é necessário fazer SELECT, UPDATE, INSERT, DELETE, etc!
Permite fazer uma persistência automática entre classes e tabelas, propriedades e
colunas, associações e chaves estrangeiras, tipos Java e tipos SQL, entre outros.

(e) Conforme vimos em aula, seu objetivo é fazer um mapeamento para persistência
automática – reduzindo a complexidade entre programas que precisam trabalhar
com o modelo relacional.

Gabarito: E

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Sendo


um grupo de classes e componentes responsáveis pelo armazenamento e
recuperação de dados, esta camada inclui necessariamente um modelo das
entidades do domínio de negócios (mesmo que seja somente um modelo de
metadados). No âmbito do mapeamento objeto-relacional (hibernate) esta é a
camada de:

a) negócio.
b) restrição.
c) apresentação.
d) consistência.
e) persistência.

Comentários:

A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de


arquitetura em que o Hibernate funciona como uma Camada de Persistência que
16712855225

conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces


e outros componentes são definidos no pacote org.hibernate. Além disso, existem três
arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml.

Conforme vimos em aula, a camada responsável pelo armazenamento e


recuperação de dados é a Camada de Persistência.

Gabarito: E

(FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas)


Objetos que têm uma representação no banco de dados, mas não fazem mais

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

parte de uma sessão do Hibernate, o que significa que o seu estado pode não
estar mais sincronizado com o banco de dados, são do tipo:

a) transient.
b) detached.
c) attached.
d) persistent.
e) consistent.

Comentários:

Galera, um objeto de classes persistentes pode estar em um dos três diferentes


estados: Transiente (Transient), Persistente (Persistent) ou Desanexado (Detached), como
nós podemos ver representado na imagem acima! Bem, vamos falar agora um
pouquinho sobre cada um desses estados – eu recomendo que vocês entendam bem
o funcionamento:

 Transiente: a instância não esteve nem está associada a um contexto persistente,


isto é, não há uma representação no banco de dados, nem um valor identificador.
Ela é instanciada, utilizada, destruída e não pode ser reconstruída de forma
automática.

 Persistente: a instância está atualmente associada a um contexto persistente, isto


é, há uma representação no banco de dados e um valor identificador. Qualquer
mudança em um objeto nesse estado é detectada e sincronizada com a base de
dados.

 Desanexado: a instância foi associada a um contexto persistente, no entanto não


está mais associada por alguma razão (Ex: Fim de sessão). Ainda existe uma
16712855225

referência, o objeto ainda pode ser modificado e essas modificações podem


futuramente ser persistidas – trata-se de um estado intermediário.

Conforme vimos em aula, trata-se do Tipo Detached (Desanexado)!

Gabarito: B

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação) Em sua essência, o Hibernate é um framework para:

a) mapeamento objeto-relacional (ORM).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

b) desenvolvimento de aplicações de Internet rica (Rich Internet Application -


RIA).

c) implementação da camada Controller do padrão MVC (Model - View -


Controller).

d) construção de aplicações utilizando-se inversão de controle (IoC).

e) injeção de dependência (dependency injection) em aplicativos.

Comentários:

Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma
tabela e vice-versa. Logo, começaram a surgir alguns frameworks que auxiliavam
essa tarefa – são as famosas Ferramentas de ORM – Object-Relational Mapping (ou
Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate e TopLink – a
primeira, livre, open-source, tornou-se uma referência mundial.

Conforme vimos em aula, trata-se de um framework para mapeamento objeto-


relacional.

Gabarito: A

(FCC - 2012 - TRF - REGIÃO - Técnico Judiciário - Informática) Quando se cria


uma aplicação Java utilizando um recurso de Mapeamento Objeto-Relacional
como o Hibernate, o mapeamento entre classes e tabelas, propriedades e
colunas, associações e chaves estrangeiras, tipos do Java e tipos do SQL, é feito
através de metadados. Esses metadados normalmente podem ser colocados em
16712855225

arquivos XML ou diretamente nas classes, próximos da informação que eles


descrevem. Quando são colocados nas classes, esses metadados são conhecidos
como:

a) mappings.
b) annotations.
c) descriptions.
d) patterns.
e) actions.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de mapeamentos,
como Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente
para consultas e atualizações de dados. O desenvolvedor define como os objetos são
mapeados e o framework faz o resto.

Conforme vimos em aula, trata-se de Annotations!

Gabarito: B

(FCC - 2008 – TRF5 - Analista de Sistemas) Usando o Hibernate, as pesquisas


podem ser realizadas em bancos de dados por meio de:

a) HQL, apenas.
b) Criteria Query API, apenas.
c) Criteria Query API e HQL, apenas.
d) Criteria Query API e SQL, apenas.
e) Criteria Query API, HQL e SQL.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Conforme vimos em aula, trata-se do Criteria Query API, HQL e SQL.


16712855225

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CONSULPLAN - 2012 - TSE - Analista Judiciário - Análise de Sistemas) Por suas


características, Hibernate 3.5 constitui uma ferramenta com a finalidade de
realizar o seguinte tipo de mapeamento:

a) objeto/relacional para Java.


b) gerencial/operacional para sites interativos textuais.
c) entidade/relacionamento para modelagem de dados.
d) lógico/físico para desenvolvimento por meio da prototipação.

Comentários:

Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma
tabela e vice-versa. Logo, começaram a surgir alguns frameworks que auxiliavam
essa tarefa – são as famosas Ferramentas de ORM – Object-Relational Mapping (ou
Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate e TopLink – a
primeira, livre, open-source, tornou-se uma referência mundial.

Conforme vimos em aula, trata-se de um mapeamento objeto-relacional em Java.

Gabarito: A

ACERTEI 16712855225
ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

JAVA DATABASE CONECTIVITY (JDBC)

De acordo com a documentação oficial: trata-se de uma API que fornece acesso
universal a dados a partir da linguagem de programação Java. É possível acessar
praticamente qualquer fonte de dados, desde bancos de dados relacionais a
planilhas ou arquivos simples. O JDBC também fornece uma base comum sobre a
quais ferramentas e interfaces alternativas podem ser construídas.

Ele estabelece conexões com um banco de dados, envia comandos SQL e processa
os resultados. Aliás, com a utilização de JDBC, torna-se fácil enviar um comando
SQL para diferentes bancos de dados relacionais. Em outras palavras, não é
necessário escrever um programa para acessar um banco de dados Oracle, outro
para acessar um banco de dados SQL Server, e assim por diante.

Essa tecnologia permite invocar comandos SQL a partir de métodos em classes Java.
Ela fornece uma API do tipo call-level para acesso a bancos de dados baseado em
SQL. Os componentes dessa API estão localizados nos pacotes java.sql e javax.sql. Para
conseguir acesso a diversos bancos de dados diferentes de maneira uniforme e
padronizada, utilizam-se Drivers.

Como assim, professor? O Driver faz a interface entre a Aplicação Web e o SGBD!
Para eu me conectar a um banco de dados individual, eu preciso ter os drivers para
aquele banco de dados específico. O JDBC permite a conexão com praticamente
qualquer SGBD (Oracle, DB2, SQL Server, MySQL, PostgreSQL, etc). Existem,
atualmente, quatro tipos de Drivers:

 JDBC-ODBC Bridge: É o tipo mais simples. Utiliza ODBC para conectar-se com o
16712855225

banco de dados, convertendo métodos JDBC em chamadas às funções do


ODBC. Esta ponte é normalmente usada quando não há um driver puro-Java
para determinado banco de dados, pois seu uso é desencorajado devido à
dependência de plataforma.

 Native API: converte chamadas JDBC na API do cliente em chamadas para o


SGBD Oracle, Sybase, Informix, etc. São escritos parcialmente em Java e
parcialmente em código nativo. Requer que algum código binário específico do
SO seja carregado em cada máquina cliente e usa uma biblioteca nativa
específica no cliente para a fonte de dados para que eles se conectem.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 Network Protocol: traduz chamadas JDBC em um protocolo de rede


independente do SGBD, que é então convertido para um protocolo específico
do SGBD por um middleware. Em geral, esta é a alternativa JDBC mais flexível de
todas, em que fornecedores disponibilizam produtos adequados para uso na
internet.

 Database Protocol: permite chamada direta da máquina do cliente para o


Servidor SGBD. Converte as chamadas JDBC diretamente no protocolo do banco
de dados. Implementado em Java, normalmente é independente de plataforma
e escrito pelos próprios desenvolvedores. É o tipo mais recomendado para ser
usado.

Open Database Connectivity (ODBC) é um padrão aberto desenvolvido para que


linguagens de programação ou sistemas operacionais se comuniquem com bancos
de dados de maneira independente de plataforma. O JDBC utiliza um driver
específico para banco de dados; o ODBC utiliza sempre o mesmo Driver e depois
configuram-se as propriedades do sistema para acessar determinado banco.

Dado que foi utilizado o driver adequado para acesso ao banco de dados, pode-se
utilizar a classe Connection para estabelecer a conexão, de fato, com o banco. Essa
classe se encontra no pacote java.sql – que contém uma biblioteca para acesso e
processamento de dados em uma fonte de dados. As classes, métodos e interfaces
dele mais importantes são:

 Driver: interface pública abstrata que todo driver deve implementar para
executar instruções SQL.

 DriverManager: classe que contém o registro de cada driver, oferecendo


métodos estáticos para gerenciá-los.
16712855225

 Connection: interface que representa uma conexão com o banco de dados –


possui diversos métodos importantes.

 Statement: interface pública abstrata que é utilizada para executar instruções


SQL estáticas e obter os resultados de sua execução.

 ResultSet: essa interface é uma tabela de dados que representa o resultado


de uma instrução SQL em um banco de dados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 PreparedStatement: interface pública abstrata utilizada para estender a


interface Statement e criar um objeto que represente uma instrução SQL.

 CallableStatement: interface que permite executar funções ou procedimentos


armazenados no banco.

try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInstance();

Connection con =
DriverManager.getConnection("jdbc:odbc:meusCdsDb","conta","senha");
}
catch(SQLException e)
{ // Se o carregador não localizar o driver do banco para conexão, lança a
// exceção java.lang.ClassNotFoundExeption
e.printStackTrace();
}

Para acessar um banco de dados, o primeiro passo é estabelecer uma conexão! É


possível fazer isso em duas etapas: primeiro, carrega-se o driver do banco de dados.
Uma vez carregado, o driver se registra para o DriverManager e está disponível para
a aplicação. Então usa-se o DriverManager para abrir uma conexão com o banco
de dados. A interface Connection designa um objeto con para receber a conexão.

Statement stm = con.createStatement();


String SQL = "Select coluna1, coluna2, coluna3 from TabelaX";

Estabelecida a conexão, podemos executar comandos SQL no banco de dados. Para


realizar uma operação, podemos usar três interfaces. A primeira delas é a interface
Statement, que permite a execução dos comandos fundamentais de SQL (SELECT,
INSERT, UPDATE ou DELETE). A interface PreparedStatement nos permite usufruir
de SQL armazenado ou pré-compilado no banco.
16712855225

ResultSet rs = stm.executeQuery(SQL);

A terceira interface é CallableStatement, e permite executar procedimentos e


funções armazenados no banco (quando o banco suportar este recurso). A interface
ResultSet permite colher os resultados da execução de nossa query no banco de
dados. Esta interface apresenta uma série de métodos para prover o acesso aos
dados. Depois é só encerrar o acesso, liberando recursos.

finally
{
try
{

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
con.close();
}
catch(SQLException onConClose)
{
System.out.println("ERRO NO FECHAMENTO DA CONEXÃO");
onConClose.printStackTrace();
}
}

Podemos fazer isso fechando o Statement, que libera os recursos associados à


execução desta consulta, mas deixa a conexão aberta para a execução de uma
próxima consulta; ou fechando diretamente a conexão, que encerra a comunicação
com o banco de dados. Para termos certeza de que vamos encerrar esta conexão
mesmo que uma exceção ocorra, reservamos o fechamento para a cláusula finally().

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC – – BACEN – Analista de Sistemas) O estabelecimento de conexão


entre um aplicativo Java e um banco de dados, para processar instruções SQL
de consulta e atualização, é possibilitado por meio do padrão aberto,
desenvolvido pela Microsoft, denominado:

a) API.
b) ODBC.
c) SGDB.
d) JDBC.
e) OLE.

Comentários:

Open Database Connectivity (ODBC) é um padrão aberto desenvolvido para que


linguagens de programação ou sistemas operacionais se comuniquem com bancos
de dados de maneira independente de plataforma. O JDBC utiliza um driver específico
para banco de dados; o ODBC utiliza sempre o mesmo Driver e depois configuram-
se as propriedades do sistema para acessar determinado banco.

Conforme vimos em aula, trata-se do ODBC.

16712855225
Gabarito: B

(CESPE – – IPEA – Analista de Sistemas) O JDBC é usado, entre outras


coisas, para acesso a bancos de dados sem SQL, por meio de Java.

Comentários:

De acordo com a documentação oficial: trata-se de uma API que fornece acesso
universal a dados a partir da linguagem de programação Java. É possível acessar
praticamente qualquer fonte de dados, desde bancos de dados relacionais a planilhas
ou arquivos simples. O JDBC também fornece uma base comum sobre a quais
ferramentas e interfaces alternativas podem ser construídas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Conforme vimos em aula, ele pode acessar praticamente qualquer coisa.

Gabarito: C

(FCC - - TRT - 2ª REGIÃO (SP) - Analista Judiciário - Tecnologia da


Informação A utilização de JDBC, em um programa Java, inicia com a indicação
do pacote que contém a JDBC API pela declaração:

a) import java.awt.*;
b) import java.util.*;
c) import java.sql.*;
d) import java.swing.*;
e) import java.jdbc.*;

Comentários:

Essa tecnologia permite invocar comandos SQL a partir de métodos em classes Java.
Ela fornece uma API do tipo call-level para acesso a bancos de dados baseado em
SQL. Os componentes dessa API estão localizados no pacote java.sql e javax.sql. Para
conseguir acesso a diversos bancos de dados diferentes de maneira uniforme
padronizada, utilizam-se Drivers.

Conforme vimos em aula, trata-se do java.sql.

Gabarito: C

(ESAF - - ANA - Analista Administrativo - Tecnologia da Informação -


Desenvolvimento Em uma aplicação Java, se o carregador de classes não
16712855225

conseguir localizar a classe do driver de banco de dados para uma conexão


JDBC, é lançada a exceção

a) java.lang.ClassNotFoundException.
b) java.io.FileNotFoundException.
c) java.lang.SecurityException.
d) java.io.IOException.
e) java.util.InputMismatchException.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInstance();

Connection con =
DriverManager.getConnection("jdbc:odbc:meusCdsDb","conta","senha");
}
catch(SQLException e)
{ // Se o carregador não localizar o driver do banco para conexão, lança a
// exceção java.lang.ClassNotFoundExeption
e.printStackTrace();
}

Conforme vimos em aula, trata-se do java.lang.ClassNotFoundException.

Gabarito: A

(FGV - 2009 - MEC - Analista de Sistemas - Especialista) Observe o código abaixo,


que se refere á implementação de Java no acesso a Banco de Dados em JDBC.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Analise a instrução a seguir: con = DriverManager.getConnection("jdbc:odbc:meusCdsDb", " conta


", " senha "); Assinale a alternativa que indique corretamente o significado da
instrução acima.

a) Abrir as tabelas do Banco de Dados.


b) Fechar a conexão com o Banco de Dados.
c) Liberar a conexão com o Banco de Dados.
d) Estabelecer a conexão com o Banco de Dados.
e) Criar uma variável para logon do Banco de Dados.

Comentários:

Para acessar um banco de dados, o primeiro passo é estabelecer uma conexão! É


possível fazer isso em duas etapas: primeiro, carrega-se o driver do banco de dados.
Uma vez carregado, o driver se registra para o DriverManager e está disponível para
a aplicação. Então usa-se o DriverManager para abrir uma conexão com o banco de
dados. A interface Connection designa um objeto con para receber a conexão.

Conforme vimos em aula, trata-se do estabelecimento de uma conexão.

Gabarito: D

(FCC - 2012 - MPE-AP - Técnico Ministerial - Informática Analise as linhas a


seguir presentes em um programa Java que não apresenta erros.

a = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver


(*.mdb)};DBQ=E:\\bd.mdb", "", "");

b = a.createStatement( ); 16712855225

c = b.executeQuery("select * from cliente where id = "+ valor +"");

Considere que os objetos a, b e c são de interfaces contidas no pacote java.sql.


Pode-se concluir que esses objetos são, respectivamente, das interfaces

a) Connection, SessionStatement e Result.


b) DriverManager, PreparedStatement e RecordSet.
c) ConnectionStatement, PreparedStatement e RecordSet.
d) Connection, Statement e ResultSet.
e) DaoConnection, Statement e ResultSet.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Comentários:

Conforme vimos em aula: a = Connection; b = Statement; c = ResultSet.

Gabarito: D

(CESPE - 2012 - -RO - Analista Judiciário - Análise de Sistemas –


Desenvolvimento – B JDBC, uma biblioteca vinculada a API da arquitetura JEE,
define como um cliente pode acessar bancos de dados OO exclusivamente.

Comentários:

De acordo com a documentação oficial: trata-se de uma API que fornece acesso
universal a dados a partir da linguagem de programação Java. É possível acessar
praticamente qualquer fonte de dados, desde bancos de dados relacionais a planilhas
ou arquivos simples. O JDBC também fornece uma base comum sobre a quais
ferramentas e interfaces alternativas podem ser construídas.

Conforme vimos em aula, ele pode acessar bancos de dados de quaisquer


paradigmas (OO, Relacional, etc).

Gabarito: E

(COPEVE-UFAL - 2012 - ALGÁS - Analista de Tecnologia da Informação – I Na


arquitetura do JDBC, a diferença entre os tipos Statement e PreparedStatement
é o fato do PreparedStatement manter os dados criptografados durante o
tráfego entre o cliente e o servidor do SGBD.
16712855225

Comentários:

Não existe isso! De fato, o PreparedStatement é mais seguro, visto que ajuda a
impedir SQL Injection. No entanto, ele não mantém dados criptografados.

Gabarito: E

(FGV - - MEC - Administrador de Banco de Dados) O pacote "java.sql" da


API Java consiste de um conjunto de classes e interfaces que permitem embutir
código SQL em métodos Java para por meio de drivers JDBC acessar diversos

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

SGBDs. As alternativas a seguir apresentam interfaces do pacote "java.sql", à


exceção de uma. Assinale-a.

a) SQLData
b) ResultSet
c) Statement
d) DriverManager
e) Connection

Comentários:

Pegadinha de banca que não sabe avaliar conhecimento! DriverManager não é uma
interface, é uma classe!

Gabarito: D

10. (CESPE - - HEMOBRÁS - Analista de Gestão Corporativa - Administrador


de Banco de Dados O JDBC fornece a classe CallableStatementSQL, que permite que
procedimentos ou funções SQL armazenados sejam chamados.

Comentários:

A terceira interface é CallableStatement, e permite executar procedimentos e funções


armazenados no banco (quando o banco suportar este recurso). A interface ResultSet
permite colher os resultados da execução de nossa query no banco de dados. Esta
interface apresenta uma série de métodos para prover o acesso aos dados. Depois é
só encerrar o acesso, liberando recursos.

Conforme vimos em aula, o nome correto é CallableStatement.


16712855225

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

JAVA VIRTUAL MACHINE (JVM)

A Linguagem Java tem dois processos de execução de código-fonte: Compilação e


Interpretação! Vamos lá... o programador escreve um código em Java em um editor
de texto, por exemplo. Ele salva com a extensão .java e passa por um compilador
(JavaC)! Esse compilador transforma o arquivo .java em código de máquina em
um arquivo .class, também chamado bytecode – como mostra a imagem abaixo.

O bytecode é um código intermediário, que é posteriormente interpretado e


executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

16712855225

Por conta deles, programas escritos em Java podem funcionar em qualquer


plataforma de hardware e software que possua uma JVM, tornando assim essas
aplicações independentes da plataforma, como apresenta a imagem acima (Win32,

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma


geladeira. A imagem abaixo é similar à anterior, apenas para solidificar!

Uma observação importante: Código Java é sempre compilado em um bytecode


No entanto, nem todo bytecode é proveniente de Código Java. Como assim,
professor? É isso mesmo! Por exemplo: eu posso compilar o Código Ada em um
bytecode e rodá-lo em uma JVM! E quais outras linguagens? Temos também Eiffel,
Pascal, Python, C.

A JVM é capaz de entender bytecodes – assim como nós somos fluentes em


português, ela é fluente em bytecode. Para criar bytecodes, basta seguir um conjunto
de regras de formação. Logo, se existe um compilador que seja capaz de
transformar o código-fonte (de qualquer linguagem) em uma bytecode guindo as
16712855225

especificações corretamente, o bytecode poderá ser interpretado por uma JVM.

CURIOSIDADE:

A Sun Microsystems declarou recentemente que existem atualmente cerca de 5.5 bilhões de
dispositivos executando uma Java Virtual Machine (JVM).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESGRANRIO - 2011 – TRANSPETRO - Analista de Sistemas) Muito utilizada para


desenvolvimento de aplicativos Web, a tecnologia Java tem como principal
característica gerar aplicações que rodam em qualquer dispositivo que tenha
acesso a Internet, utilizando, entre outros recursos, o software:

a) JBC (Java Bytecode Console)


b) JDB (Java Developer Builder)
c) JMS (Java Management Server)
d) JAC (Java Application Controler)
e) JVM (Java Virtual Machine)

Comentários:

Por conta deles, programas escritos em Java podem funcionar em qualquer


plataforma de hardware e software que possua uma JVM, tornando assim essas
aplicações independentes da plataforma, como apresenta a imagem acima (Win32,
UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma
geladeira. A imagem abaixo é similar à anterior, apenas para solidificar!

Conforme vimos em aula, trata-se da JVM (Java Virtual Machine).

Gabarito: E
16712855225

(CESPE - 2004 – ABIN - Analista de Sistemas) A máquina virtual Java (Java Virtual
Machine — JVM) é especificada para interpretar instruções expressas em
bytecodes e compiladas a partir de uma linguagem de programação do tipo
Java, mas não necessariamente Java.

Comentários:

Uma observação importante: Código Java é sempre compilado em um bytecode. No


entanto, nem todo bytecode é proveniente de Código Java. Como assim, professor?
É isso mesmo! Por exemplo: eu posso compilar o Código Ada em um bytecode e

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

rodá-lo em uma JVM! E quais outras linguagens? Temos também Eiffel, Pascal,
Python, C.

Conforme vimos em aula, não é necessariamente de Java!

Gabarito: C

(CESPE - 2010 – TRE/MT - Analista de Sistemas – A) JVM é um tipo de linguagem


de máquina, resultado da compilação do código-fonte Java, que é interpretado
e executado pela máquina virtual Java.

Comentários:

O bytecode é um código intermediário, que é posteriormente interpretado e


executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

Conforme vimos em aula, não se trata de um tipo de linguagem, mas um programa!

Gabarito: E

(CESPE - 2011 – TJ/ES - Analista de Sistemas) O JVM (Java Virtual Machine) é um


interpretador que atribui portabilidade à linguagem Java, possibilitando,
consequentemente, a sua execução em qualquer sistema operacional.

Comentários:
16712855225

Por conta deles, programas escritos em Java podem funcionar em qualquer


plataforma de hardware e software que possua uma JVM, tornando assim essas
aplicações independentes da plataforma, como apresenta a imagem acima (Win32,
UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma
geladeira. A imagem abaixo é similar à anterior, apenas para solidificar!

Conforme vimos em aula, está perfeito! Observem que a questão afirma que
“possibilita a sua execução em qualquer sistema operacional”. De fato, o Sistema
Operacional deverá ter uma JVM implementada para ele. No entanto, a questão
afirma apenas que possibilita (desde que haja essa JVM). De fato, possibilita!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Gabarito: C

(CESPE - 2008 - -DF - Analista Judiciário - Tecnologia da Informação) Na


linguagem Java, durante a interpretação do código, a JVM (Java Virtual Machine)
verifica se o applet faz tentativas de forjar ponteiros, de violar restrições de
acesso em membros de classes privadas e de gerar falhas na pilha.

Comentários:

Perfeito! A JVM realiza algumas verificações de segurança importantes,


principalmente, para o desenvolvimento de aplicações web.

Gabarito: C

(CONSULPLAN - 2012 - TSE - Programador de computador) Diferentemente de


outras linguagens de programação como C ou Pascal, Java utiliza uma
linguagem intermediária da Java Virtual Machine – JVM. Essa linguagem
intermediária denomina-se

a) bytecode.
b) appletcode.

Comentários:

A Linguagem Java tem dois processos de execução de código-fonte: Compilação e


Interpretação! Vamos lá... o programador escreve um código em Java em um editor
de texto, por exemplo. Ele salva com a extensão .java e passa por um compilador
(JavaC)! Esse compilador transforma o arquivo .java em código de máquina e em um
arquivo .class, também chamado bytecode – como mostra a imagem abaixo.
16712855225

Conforme vimos em aula, trata-se do bytecode!

Gabarito: A

(FCC - 2014 - SABESP - Tecnólogo – Sistemas – O processo híbrido combina


a execução eficiente e a portabilidade de programas. A base é a existência de
um código intermediário, mais fácil de ser interpretado e não específico de uma
plataforma computacional. O método é dividido em duas etapas: compilação
para um código intermediário e interpretação desse código. Um exemplo é o
Java e a JVM.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Comentários:
O bytecode é um código intermediário, que é posteriormente interpretado e
executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

Conforme vimos em aula, está perfeito! Essa é a conhecida Compilação Híbrida –


implementada pela JVM!

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JPA

(FCC - – TRE/MS - Analista de Sistemas – A API de Persistência Java


pode ser utilizada no container Web e/ou no container EJB e disponibiliza
recursos de mapeamento objeto-relacional as aplicações Java EE.

(CESPE - 2014 - -SE - Analista Judiciário - Banco de Dados) A JPA, que foi
criada como alternativa para o Hibernate para conexão com os sistemas
gerenciadores de banco de dados, está nativa no Java SE a partir da versão 1.3.

(FCC - 2014 - TRT - 13ª Região (PB) - Técnico Judiciário - Tecnologia da


Informação Java Persistence API (JPA) é uma API padrão da linguagem Java para
persistência de dados em bancos de dados relacionais. Em uma aplicação que
utiliza JPA:

a) pode ser utilizada, como provedor de persistência, as bibliotecas EclipseLink,


Hibernate, OracleTopLink, JBossSeam e JDBCProvider.

b) as classes de entidade do banco de dados permitem o mapeamento entre


objetos da classe e tabelas do banco de dados, utilizando anotações como
@Table, @Entity, @PrimaryKey, @Column, @Constraint, @Foreignkey e @EJB.

c) todas as operações realizadas nas tabelas do banco de dados, como inserção


de dados, alteração, consultas e exclusão, são realizadas sem o uso de instruções
SQL, ou seja, o desenvolvedor não precisa conhecer SQL para programar.
16712855225

d) as configurações de acesso a banco de dados normalmente ficam no arquivo


persistence.xml, ligado à aplicação, de forma que se for alterado o servidor de
banco de dados não seja necessário alterar o código-fonte Java da aplicação.

e) as relações existentes entre as tabelas do banco de dados não são refletidas


nas classes de entidade criadas na aplicação, o que torna a execução mais rápida.
O mapeamento de relações é feito em tempo de execução pelas bibliotecas do
provedor de persistência.

(CESPE - 2010 – MPU – Analista de Sistemas A versão 3.0 da API de Persistência


Java utiliza descritores de implantação, não permitindo uso de anotações.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2010 – – Analista de Sistemas A versão 3.0 da API de Persistência


Java provê uma linguagem de consulta de persistência Java que é uma forma
melhorada da linguagem de consulta do EJB.

(CESPE - 2010 – MPU – Analista de Sistemas A API de Persistência Java é


embasada em ideias contidas em frameworks líderes de mercado, como
Hibernate, Oracle TopLink e Objetos de Dados Java.

(CESPE - 2013 – TRE/MS – Analista de Sistemas Assinale a opção correspondente


ao elemento que, além de ser utilizado para definir um meio de mapeamento
objeto-relacional para objetos Java simples e comuns (POJOs), denominados
beans de entidade, também é utilizado para gerenciar o desenvolvimento de
entidades do modelo relacional em plataforma nativa Java SE e Java EE.

a) JSF
b) SVN
c) JPA
d) spring
e) struts

(FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas Quando se utiliza


JPA, um EntityManager mapeia um conjunto de classes a um banco de dados
particular. Este conjunto de classes, definido em um arquivo chamado
persistence.xml, é denominado:

a) persistence context.
b) persistence unit.
c) entity manager factory. 16712855225

d) entity transaction.
e) persistence provider.

(CESPE - 2013 - CNJ - Técnico Judiciário - Programação de Sistemas Os objetos


mapeados na linguagem Java que devem ser persistidos como objetos precisam
utilizar JPA (Java Persistence API), pois o JPA permite realizar o mapeamento
objeto/relacional automatizado e transparente e sua persistência em um banco
de dados relacional.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

10. (FGV - 2009 – MEC – Analista de Sistemas – C) JPA é uma tecnologia utilizada
no desenvolvimento de aplicações para Web, similar às tecnologias Active Server
Pages (ASP) da Microsoft ou PHP.

11. (CESPE - 2010 - TRE-BA - Programador de computador As tecnologias JPA e


EJB permitem, com o uso da linguagem Java, a manipulação de dados que estão
em um banco de dados.

12. (CESPE - 2013 - CPRM - Analista em Geociências - Sistemas) Java Persistence API
(JPA) é uma solução para persistência de dados, utilizada, inclusive, quando há
mapeamento do modelo orientado a objeto para bancos de dados relacionais.

13. (CESPE - 2013 – TRE/MS - Analista de Sistemas – C JPA é um framework MVC


de aplicações web que se destina a simplificar o desenvolvimento de interfaces
de usuário embasadas em web.

14. (CESPE - 2010 – TRE/MT - alista de Sistemas – E) JPA lida com a forma como
dados relacionais são mapeados para objetos Java e com a forma como esses
objetos são armazenados em um banco de dados relacional.

15. (CESGRANRIO - 2011 – PETROBRÁS - Analista de Sistemas – II) JPA é parte


integrante da especificação EJB e serve para definir as interfaces de acesso local
e/ou remoto de um componente EJB.

16. (CESPE - 2012 - -RO - Analista Judiciário - Análise de Sistemas –


Desenvolvimento – A JPA, um framework utilizado na camada de persistência,
define uma forma para mapear POJO (Plain Old Java Objects) para um banco
de dados.
16712855225

17. (FCC - 2013 – MPE/MA - Analista de Sistemas) Considere a classe Java a seguir
em uma aplicação que utiliza JPA, uma API que permite fazer o mapeamento de
persistência objeto/relacional:

package dao;
import javax.persistence.*;
public class ClienteDao {
private EntityManagerFactory emf;
private EntityManager em;
private EntityTransaction et;
private void iniciarTransacao()
{
emf = Persistence.createEntityManagerFactory("Exemplo");
em = emf.createEntityManager();
et = em.getTransaction();

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
et.begin();
}
}

O parâmetro “Exemplo”, passado para o método createEntityManagerFactory


da classe Persistence refere-se ao nome:

a) da unidade de persistência definido na tag persistence-unit contida no


arquivo persistence.xml.

b) do arquivo de persistência Exemplo.xml que contém as tags com os


parâmetros de conexão com o banco de dados.

c) do banco de dados relacional ao qual a aplicação deseja se conectar.

d) da tabela do banco de dados na qual os dados da aplicação serão persistidos.

e) da classe que faz a conexão com o banco de dados relacional ao qual a


aplicação deseja se conectar.

18. (FCC - 2012 - -PE - Programador de computador Em uma classe de entidade


de uma aplicação que utiliza JPA, a anotação que define um atributo que não
será salvo no banco de dados é a:

a) @Optional.
b) @Transient.
c) @Stateless.
d) @Stateful.
e) @Local.
16712855225

19. (FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da
Informação Os estados do ciclo de vida de uma instância de uma entidade,
definidos na JPA 2.0, são:

b) novo (new), gerenciado (managed), destacado (detached) e removido


(removed).

b) ativo (active), inativo (inactive) e removido (removed).

c) novo (new), temporário (temporary), permanente (permanent) e destacado


(detached).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

d) novo (new), temporário (temporary) e destacado (detached)

e) gerenciado (managed), temporário (temporary), permanente (permanent) e


destacado (detached).

(FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil -


Analista de Informática Em relação à JPA e Hibernate, considere as seguintes
afirmativas.

1. JPA especifica uma JSR.

2. Hibernate especifica uma JSR.

3. Hibernate cuida da camada de persistência enquanto JPA da camada de


transação.

4. Hibernate é uma implementação de JSR.

5. JPA é uma implementação de JSR.

Assinale a alternativa que indica todas as afirmativas corretas.

a) São corretas apenas as afirmativas 1 e 4.


b) São corretas apenas as afirmativas 2 e 3.
c) São corretas apenas as afirmativas 3 e 4.
d) São corretas apenas as afirmativas 1, 2 e 3.
e) São corretas apenas as afirmativas 3, 4 e 5
16712855225

21. (FCC - 2011 – TCE/PR – Analista de Sistemas A JPA:

a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em
aplicações Java SE.

b) utiliza persistência gerenciada por contêiner (CMP), ou seja, as classes de


entidade e persistência necessitam de um contêiner presente em um servidor de
aplicações para serem executadas.

c) utiliza descritores XML para especificar informações do mapeamento


relacional de objeto, mas não oferece suporte a anotações.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

d) suporta consultas dinâmicas nomeadas nas classes de entidade que são


acessadas apenas por instruções SQL nativas.

e) possui uma interface EntityBeans que padroniza operações Create Read


Update Delete (CRUD) que envolvem tabelas.

(FCC - 2011 - TRT - 23ª REGIÃO (MT) - Técnico Judiciário - Tecnologia da


Informação) Em relação à JPA (Java Persistence API) é INCORRETO afirmar que:

a) @NamedQuery é aplicada para definir várias consultas.

b) @Entity define que haverá correspondência da classe com uma tabela do


banco de dados.

c) @Id define que o atributo que está mapeado com tal anotação corresponderá
à chave primária da tabela.

d) @Column(name = "id", nullable = false) define que o atributo da classe


mapeado com tal anotação deve estar associado à coluna cujo nome é "id", além
de definir que tal campo não pode ser nulo.
16712855225

e) @OneToMany indica que o atributo contém um conjunto de entidades que a


referenciam.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


HIBERNATE

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas No Hibernate,


apenas a linguagem de consulta HQL (Hibernate Query Language) pode ser
utilizada. A HQL executa os pedidos SQL sobre as classes de persistência do Java
em vez de tabelas no banco de dados, o que diminui a distância entre o
desenvolvimento das regras de negócio e o banco de dados.

(CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação


O Hibernate, um framework de mapeamento objeto relacional (ORM), cria uma
camada persistência na solução desenvolvida, o que permite ligar os objetos aos
bancos de dados relacionais. Entre seus serviços, o Hibernate provê um meio de
se controlar transações, por meio de métodos de suas interfaces session e
transaction, tendo ainda suporte a herança e polimorfismo. É distribuído sob a
licença LGPL, o que permite seu uso em projetos comerciais ou open source.

(CESPE - 2010 - TCU - Auditor Federal de Controle Externo - Tecnologia da


Informação - Parte II

Uma equipe de desenvolvimento de software recebeu a incumbência de desenvolver um sistema com as


características apresentadas a seguir.

 O sistema deverá ser integrado, interoperável, portável e seguro.


 O sistema deverá apoiar tanto o processamento online, quanto o suporte a decisão e gestão de
conteúdos.
 O sistema deverá ser embasado na plataforma JEE (Java enterprise edition) v.6, envolvendo servlets,
JSP (Java server pages), Ajax, JSF (Java server faces) 2.0, Hibernate 3.5, SOA e web services.
16712855225

O líder da equipe iniciou, então, um extenso processo de coleta de dados com o objetivo de identificar as
condições limitantes da solução a ser desenvolvida e tomar decisões arquiteturais e tecnológicas que
impactarão várias características funcionais e não funcionais do sistema, ao longo de seu ciclo de vida. A
partir dessa coleta, o líder deverá apresentar à equipe um conjunto de informações e de decisões.

A tecnologia Hibernate 3.5 é apropriada para o sistema a ser desenvolvido: entre as


características que a credenciam, está o fato de ela possibilitar a recuperação de
objetos por meio da formulação de queries em linguagens HQL (hibernate query
language) e SQL (structured query language), bem como pelo uso de APIs
(application programming interfaces) de busca por critério, entre outras.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - - CEHAP- - Programador de computador No framework


Hibernate, é comum que uma instância de uma classe persistente tenha três
estados específicos. Assinale a opção que contém esses três estados.

a) plugged, disconnected, timewait


b) connected, disconnected, detached
c) transient, persistent, detached
d) transient, connected, timewait

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas O Hibernate, framework


utilizado no desenvolvimento de consultas e atualização de dados em um banco
relacional, foi criado para facilitar a integração entre programas em Java,
funcionando também em ambientes .Net (NHibernate).

(CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas -


Desenvolvimento de Sistemas No Hibernate, o recurso Query Cache possibilita
fazer o cache de queries que são executadas várias vezes.

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas No Hibernate, caso o nome da classe seja diferente
do nome da tabela mapeada, é necessário informar, na anotação @Table, o
nome da tabela, por meio do atributo name.

(CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas Em


Hibernate, a configuração de conexões de banco de dados deve ser feita
somente por meio do uso de arquivo de propriedade.

(CESPE - 2014 - SUFRAMA - Analista de Sistemas) De acordo com o mapeamento


16712855225

mostrado abaixo, no Hibernate, a coluna Evento_ID manterá a chave primária da


tabela Eventos.

<hibernate-mappingpackage=
"org.hibernate.tutorial.domain">
<class name="Evento" table="Eventos">
<id name="id" column="Evento_ID">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

10. (CESPE - 2010 - TRE-BA - Programador de computador O Hibernate, um


framework para o mapeamento objeto-relacional, é escrito na linguagem Java e,
por isso, somente pode ser executado no ambiente Java.

11. (CESPE - 2013 - MPOG - Técnico de Nível Superior - - Categoria Profissional


7 Quando se desenvolve um mapeamento com Hibernate, uma classe
persistente criada não precisa implementar ou herdar qualquer classe especial
do framework Hibernate.

12. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) O objeto Session Factory do Hibernate mantém o
mapeamento objeto relacional na sessão.

13. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) A Interface Criteria do Hibernate é utilizada para
realizar consultas ao banco de dados.

14. (CESPE - 2014 - SUFRAMA - Analista de Sistemas) Os tipos de mapeamento do


Hibernate são considerados tipos de dados SQL e precisam de conversão para
dados Java nas respectivas classes Java.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


HIBERNATE

(FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da


Informação Linguagem de queries, fornecida pelo Hibernate, que é similar em
aparência ao SQL e que, no entanto, é orientada a objeto e compreende noções
como herança, polimorfismo e associação. Trata-se de:

a) HiBD-QL.
b) OOQL.
c) ORM-QL.
d) HQL.
e) JEEQL.

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação Os três estados de objeto definidos pelo framework Hibernate são:

a) Temporário (Temporary), Permanente (Permanent) e Resiliente (Resilient).


b) Transiente (Transient), Persistente (Persistent) e Resiliente (Resilient).
c) Temporário (Temporary), Persistente (Persistent) e Destacado (Detached).
d) Transiente (Transient), Persistente (Persistent) e Destacado (Detached).
e) Transiente (Transient), Permanente (Permanent) e Resiliente (Resilient).

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) Com


relação ao framework Hibernate é correto afirmar:

a) Permite fazer a persistência automatizada dos objetos em uma aplicação Java


16712855225

para as tabelas de um banco de dados relacional, utilizando metadados


(descrição dos dados) que descrevem o mapeamento entre os objetos e o banco
de dados.

b) É uma boa opção apenas para sistemas que fazem muito uso de stored
procedures, triggers ou que implementam a maior parte da lógica da aplicação
no banco de dados vai se beneficiar mais com o uso do Hibernate.

c) Permite enviar unidirecionalmente uma representação de dados de um banco


de dados relacional para um modelo de objeto utilizando um esquema baseado
exclusivamente em Hibernate Query Language (HQL).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

d) A Java Persistence API (JPA) implementa o Hibernate, que é parte do


Enterprise JavaBeans 4.0.

e) Em uma aplicação criada com Hibernate, para cada classe de persistência é


necessário criar um arquivo de mapeamento XML que deve ser salvo
obrigatoriamente com o nome da classe seguido pelo sufixo .map.xml.

(FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da


Informação) Hibernate é um framework:

a) que separa as funções que envolvem a construção de aplicações Web, através


da associação dos eventos do lado cliente com os manipuladores dos eventos
do lado do servidor.

b) pelo qual o programador utiliza a infraestrutura do servidor de aplicação


voltada para o desenvolvimento de aplicações de missão crítica e de aplicações
empresariais em geral.

c) no qual as questões de infraestrutura, segurança, disponibilidade e


escalabilidade são responsabilidade do servidor de aplicações, permitindo que o
programador se concentre, apenas, nas necessidades do negócio do cliente.

d) que permite ao desenvolvedor de páginas para internet produzir aplicações


que acessem o banco de dados, manipulem arquivos no formato texto e
capturem informações a partir de formulários.

e) cujo objetivo é diminuir a complexidade entre os programas Java que


precisam trabalhar com um banco de dados do modelo relacional.
16712855225

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Sendo


um grupo de classes e componentes responsáveis pelo armazenamento e
recuperação de dados, esta camada inclui necessariamente um modelo das
entidades do domínio de negócios (mesmo que seja somente um modelo de
metadados). No âmbito do mapeamento objeto-relacional (hibernate) esta é a
camada de:

a) negócio.
b) restrição.
c) apresentação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

d) consistência.
e) persistência.

(FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas)


Objetos que têm uma representação no banco de dados, mas não fazem mais
parte de uma sessão do Hibernate, o que significa que o seu estado pode não
estar mais sincronizado com o banco de dados, são do tipo:

a) transient.
b) detached.
c) attached.
d) persistent.
e) consistent.

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação) Em sua essência, o Hibernate é um framework para:

a) mapeamento objeto-relacional (ORM).

b) desenvolvimento de aplicações de Internet rica (Rich Internet Application -


RIA).

c) implementação da camada Controller do padrão MVC (Model - View -


Controller).

d) construção de aplicações utilizando-se inversão de controle (IoC).

e) injeção de dependência (dependency injection) em aplicativos.


16712855225

(FCC - 2012 - TRF - 2ª REGIÃO - Técnico Judiciário - Informática) Quando se cria


uma aplicação Java utilizando um recurso de Mapeamento Objeto-Relacional
como o Hibernate, o mapeamento entre classes e tabelas, propriedades e
colunas, associações e chaves estrangeiras, tipos do Java e tipos do SQL, é feito
através de metadados. Esses metadados normalmente podem ser colocados em
arquivos XML ou diretamente nas classes, próximos da informação que eles
descrevem. Quando são colocados nas classes, esses metadados são conhecidos
como:

a) mappings.
b) annotations.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

c) descriptions.
d) patterns.
e) actions.

(FCC - 2008 – TRF5 - Analista de Sistemas) Usando o Hibernate, as pesquisas


podem ser realizadas em bancos de dados por meio de:

a) HQL, apenas.
b) Criteria Query API, apenas.
c) Criteria Query API e HQL, apenas.
d) Criteria Query API e SQL, apenas.
e) Criteria Query API, HQL e SQL.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


HIBERNATE

(CONSULPLAN - 2012 - TSE - Analista Judiciário - Análise de Sistemas) Por suas


características, Hibernate 3.5 constitui uma ferramenta com a finalidade de
realizar o seguinte tipo de mapeamento:

a) objeto/relacional para Java.


b) gerencial/operacional para sites interativos textuais.
c) entidade/relacionamento para modelagem de dados.
d) lógico/físico para desenvolvimento por meio da prototipação.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JDBC

(FCC – – BACEN – Analista de Sistemas) O estabelecimento de conexão


entre um aplicativo Java e um banco de dados, para processar instruções SQL
de consulta e atualização, é possibilitado por meio do padrão aberto,
desenvolvido pela Microsoft, denominado:

a) API.
b) ODBC.
c) SGDB.
d) JDBC.
e) OLE.

(CESPE – – IPEA – Analista de Sistemas) O JDBC é usado, entre outras


coisas, para acesso a bancos de dados sem SQL, por meio de Java.

(FCC - - TRT - 2ª REGIÃO (SP) - Analista Judiciário - Tecnologia da


Informação A utilização de JDBC, em um programa Java, inicia com a indicação
do pacote que contém a JDBC API pela declaração:

a) import java.awt.*;
b) import java.util.*;
c) import java.sql.*;
d) import java.swing.*;
e) import java.jdbc.*;
16712855225

(ESAF - - ANA - Analista Administrativo - Tecnologia da Informação -


Desenvolvimento Em uma aplicação Java, se o carregador de classes não
conseguir localizar a classe do driver de banco de dados para uma conexão
JDBC, é lançada a exceção

a) java.lang.ClassNotFoundException.
b) java.io.FileNotFoundException.
c) java.lang.SecurityException.
d) java.io.IOException.
e) java.util.InputMismatchException.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FGV - 2009 - MEC - Analista de Sistemas - Especialista) Observe o código abaixo,


que se refere á implementação de Java no acesso a Banco de Dados em JDBC.

Analise a instrução a seguir: con = DriverManager.getConnection("jdbc:odbc:meusCdsDb", " conta


", " senha "); Assinale a alternativa que indique corretamente o significado da
instrução acima.
16712855225

a) Abrir as tabelas do Banco de Dados.


b) Fechar a conexão com o Banco de Dados.
c) Liberar a conexão com o Banco de Dados.
d) Estabelecer a conexão com o Banco de Dados.
e) Criar uma variável para logon do Banco de Dados.

(FCC - 2012 - MPE-AP - Técnico Ministerial - Informática Analise as linhas a


seguir presentes em um programa Java que não apresenta erros.

a = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver


(*.mdb)};DBQ=E:\\bd.mdb", "", "");

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

b = a.createStatement( );

c = b.executeQuery("select * from cliente where id = "+ valor +"");

Considere que os objetos a, b e c são de interfaces contidas no pacote java.sql.


Pode-se concluir que esses objetos são, respectivamente, das interfaces

a) Connection, SessionStatement e Result.


b) DriverManager, PreparedStatement e RecordSet.
c) ConnectionStatement, PreparedStatement e RecordSet.
d) Connection, Statement e ResultSet.
e) DaoConnection, Statement e ResultSet.

(CESPE - 2012 - -RO - Analista Judiciário - Análise de Sistemas –


Desenvolvimento – B JDBC, uma biblioteca vinculada a API da arquitetura JEE,
define como um cliente pode acessar bancos de dados OO exclusivamente.

(COPEVE-UFAL - 2012 - ALGÁS - Analista de Tecnologia da Informação – I Na


arquitetura do JDBC, a diferença entre os tipos Statement e PreparedStatement
é o fato do PreparedStatement manter os dados criptografados durante o
tráfego entre o cliente e o servidor do SGBD.

(FGV - - MEC - Administrador de Banco de Dados) O pacote "java.sql" da


API Java consiste de um conjunto de classes e interfaces que permitem embutir
código SQL em métodos Java para por meio de drivers JDBC acessar diversos
SGBDs. As alternativas a seguir apresentam interfaces do pacote "java.sql", à
exceção de uma. Assinale-a.
16712855225

a) SQLData
b) ResultSet
c) Statement
d) DriverManager
e) Connection

10. (CESPE - - HEMOBRÁS - Analista de Gestão Corporativa - Administrador


de Banco de Dados) O JDBC fornece a classe CallableStatementSQL, que permite que
procedimentos ou funções SQL armazenados sejam chamados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JVM

(CESGRANRIO - 2011 – TRANSPETRO - Analista de Sistemas) Muito utilizada para


desenvolvimento de aplicativos Web, a tecnologia Java tem como principal
característica gerar aplicações que rodam em qualquer dispositivo que tenha
acesso a Internet, utilizando, entre outros recursos, o software:

a) JBC (Java Bytecode Console)


b) JDB (Java Developer Builder)
c) JMS (Java Management Server)
d) JAC (Java Application Controler)
e) JVM (Java Virtual Machine)

(CESPE - 2004 – ABIN - Analista de Sistemas) A máquina virtual Java (Java Virtual
Machine — JVM) é especificada para interpretar instruções expressas em
bytecodes e compiladas a partir de uma linguagem de programação do tipo
Java, mas não necessariamente Java.

(CESPE - 2010 – TRE/MT - Analista de Sistemas – A) JVM é um tipo de linguagem


de máquina, resultado da compilação do código-fonte Java, que é interpretado
e executado pela máquina virtual Java.

(CESPE - 2011 – TJ/ES - Analista de Sistemas) O JVM (Java Virtual Machine) é um


interpretador que atribui portabilidade à linguagem Java, possibilitando,
consequentemente, a sua execução em qualquer sistema operacional.

(CESPE - 2008 - -DF - Analista Judiciári - Tecnologia da Informação) Na


16712855225

linguagem Java, durante a interpretação do código, a JVM (Java Virtual Machine)


verifica se o applet faz tentativas de forjar ponteiros, de violar restrições de
acesso em membros de classes privadas e de gerar falhas na pilha.

(CONSULPLAN - 2012 - TSE - Programador de computador) Diferentemente de


outras linguagens de programação como C ou Pascal, Java utiliza uma
linguagem intermediária da Java Virtual Machine – JVM. Essa linguagem
intermediária denomina-se

a) bytecode.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

b) appletcode.

(FCC - 2014 - SABESP - Tecnólogo – Sistemas – O processo híbrido combina


a execução eficiente e a portabilidade de programas. A base é a existência de
um código intermediário, mais fácil de ser interpretado e não específico de uma
plataforma computacional. O método é dividido em duas etapas: compilação
para um código intermediário e interpretação desse código. Um exemplo é o
Java e a JVM.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JPA

1 2 3 4 5 6 7 8 9 10
C E D E C C C B C E
11 12 13 14 15 16 17 18 19 20
C C E C E C A B A A
21 22 23 24 25 26 27 28 29 30
A A

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


HIBERNATE

1 2 3 4 5 6 7 8 9 10
E C C C C C C E C E
11 12 13 14 15 16 17 18 19 20
C C C E

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


HIBERNATE

1 2 3 4 5 6 7 8 9 10
D D A E E 16712855225
B A B E

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


HIBERNATE

1 2 3 4 5 6 7 8 9 10
A

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

JDBC

1 2 3 4 5 6 7 8 9 10
B C C A D D E E D E

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JVM
1 2 3 4 5 6 7 8 9 10
E C E C C A C

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 91 de 91


Aula 06

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

AULA 06

SUMÁRIO PÁGINA
Apresentação 01
- Spring Framework 02
- Struts 11
- Java Message Service (JMS) 18
- Jndi (Java Naming And Directory Interface) 24
- Java Transaction Api (JTA) 30
- Javaserver Pages Standard Tag Library (JSTL) 33
Lista de Exercícios Comentados 41
Gabarito 50

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
16712855225

Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

SPRING FRAMEWORK

Spring é um framework open-source de desenvolvimento para Plataforma Java!


Trata-se de uma tecnologia não-intrusiva (aplicação não depende do framework em
si) cujo intuito é desenvolver aplicações mais fáceis de usar e promover (e, não,
impor) boas práticas por meio de um modelo de programação baseada em POJO.
Ele veio como alternativa ao modelo baseado em EJB! E quais são seus benefícios?

BENEFÍCIOS DESCRIÇÃO

Trata-se de um framework leve, quando se trata de tamanho e


Leveza
transparência. A versão básica tem cerca de 2MB.
(Lightweight)
Trata-se de um framework em que o código da lógica de aplicação não
Não-Intrusivo depende do em si do Framework Spring. Se algum dia eu quiser modificar
o framework, o código estará preparado.
16712855225

Trata-se de um framework que promove baixo acoplamento por meio do


Inversão de
padrão arquitetural de Inversão de Controle. Os objetos oferecem suas
Controle (IOC)
dependências em vez de criarem ou procurarem objetos dependentes.
Trata-se de um framework orientado a aspectos que separa a lógica de
Orientada a
negócio da aplicação dos serviços de suporte do sistema.
Aspectos
Trata-se de um framework que gerencia o ciclo de vida e configuração
Container de objetos da aplicação por meio de um container.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

Trata-se de um framework desenhado para o Padrão MVC, que oferece


MVC diversas alternativas a frameworks web – permite construir aplicações
robustas e manuteníveis.
Trata-se de um framework que provê uma interface consistente de
Gerenciamento
gerenciamento de transações que pode variar de uma transação global
de Transação
a uma transação local.
Trata-se de um framework capaz de traduzir exceções de uma tecnologia
Tratamento
específica em outros tipos de exceções hierarquicamente.
de Exceções
Trata-se de um framework que fornece um mecanismo de segurança
Spring Security declarativo, que é um aspecto crítico de diversas aplicações.

Vamos a algumas explicações mais detalhadas sobre algumas características citadas


acima – comecemos com a Inversão de Controle! Imaginem que vocês
implementam uma classe de usuário, e dentro dessa classe vocês precisam utilizar
a classe de e-mail. O que vocês fazem? Instanciam a classe de e-mail dentro da
classe de usuário. O que isso gera? Acoplamento (i.e., dependência entre as partes).

Agora a classe de usuário depende da classe de e-mail. Um dos problemas que a


inversão de controle veio resolver é o de módulos de mais alto nível (Ex: Classe de
Usuário) dependendo de módulos de mais baixo nível (Ex: Classe de E-mail). O que
é mais importante: usuário ou e-mail? Ora, usuário – o e-mail, em geral, é apenas
um acessório do usuário! Vamos ver um exemplo mais claro:

Deem uma olhada na casa de vocês e contem quantos dispositivos têm baterias que
precisam ser recarregadas de alguma maneira: câmera fotográfica, celular, fone de
ouvido sem-fio, controle de videogame, ipod, máquina de barbear, etc. Ora, esses
16712855225

dispositivos não têm uma interface de recarga de bateria comum, i.e., um usa micro-
usb, o outro mini-usb, outro usb, apple sempre inventa algo diferente, enfim...

Qual o resultado disso? Você não possui um único carregador para recarregar todos
os seus dispositivos – você é obrigado a ter um carregador para cada um deles! E
se você mudar de celular? Lá se vai mais um carregador. Se você der um upgrade no
ipod? Outro carregador! O que acontece no final? Aposto que vocês (como bons
nerds) possuem uma gaveta lotada de carregadores diferentes! 

Eu sei que vocês entenderam a história, mas eu gostaria que vocês internalizassem
a ideia principal! Em vez de os carregadores dependerem dos dispositivos, os

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

dispositivos estão dependendo dos carregadores. Isso não soa absurdo? É o mais
importante dependendo do menos importante; é o essencial dependendo do
acessório; é o “poste mijando no cachorro”.

Bem, um dos princípios do Spring Framework é a Inversão de Controle (ou Inversão


de Dependência). É uma forma de subverter essa lógica! Vamos fazer classes de
baixo nível dependerem de classes de alto nível. Vamos programar para interfaces
e, não, para implementações. Como podemos fazer isso, professor? Por meio da
Injeção de Dependências (não confundam, são conceitos independentes!).

Professor, o que seria a injeção de dependências? Trata-se de um padrão de


desenvolvimento de software utilizado para inverter controles e manter o baixo
16712855225

acoplamento entre os módulos de um sistema. Ela visa remover dependências


desnecessárias entre as classes ou torná-las mais suaves, e ajuda a ter um design de
software que seja mais fácil de manter e de evoluir.

Lembram-se do exemplo anterior? Para eu utilizar uma classe de e-mail na classe de


usuário, eu teria que instanciar a classe de e-mail dentro da classe de usuário. Ora,
isso já acoplaria as classes, fazendo com que a classe de usuário dependesse da
classe de e-mail, ou seja, a classe de alto nível estaria dependendo da classe de
baixo nível. Vamos resolver esse problema com a Injeção de Dependência!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

Grosso modo, injetar dependências nada mais é que passar uma classe (que será
utilizada) para outra classe (que irá consumi- ). Ora, realmente a classe de usuário
precisa da classe de e-mail, mas é possível utilizá-la sem acoplá-las. Como?
Delegando a responsabilidade de criação do objeto da classe e-mail a outra parte
do sistema. Quem pode fazer isso? O Container!

Ele é responsável por criar, gerenciar, conectar e configurar objetos e seus ciclos de
vida. O padrão de Injeção de Dependência é baseado no padrão Builder, que é
aquele cara responsável por construir objetos e armazená-los. Ele permite a
separação da construção de um objeto complexo da sua representação, de forma
que o mesmo processo de construção possa criar diferentes representações.

O que acontece? Passa-se a responsabilidade de criar um objeto para o container


(que funciona como o builder), indicando qual interface desejamos que seja
implementada. Ele criará a o objeto que implementa a interface e injeta essa
dependência em outra classe. Em nosso caso, ele criará o objeto de e-mail e injetará
no objeto de pessoa.

O container é capaz de resolver dependências complexas transparentemente, i.e.,


eu não estou nem ligando para como ele vai resolver. O container é simplesmente
um mapeador de dependências que as suas classes necessitam com a lógica de
criação dessas dependências (por meio de XML/Annotation). Ele trata todos os
objetos sob seu gerenciamento como beans.

Podemos afirmar, então, que a injeção de dependência desacopla a construção das


suas classes da construção de suas dependências. Professor, deu nó na cabaça!
frase apenas afirma que a responsabilidade para a criação da classe E-mail não é
mais da classe Usuário, é do container. Bacana? Dessa forma, quebramos o
acoplamento e invertemos o controle. 16712855225

Em vez de depender de uma classe concreta, passamos a depender de uma


abstração. O código estará mais desacoplado, modular, flexível – sendo mais fácil a
manutenção e a evolução. É possível injetar dependências de três formas: Injeção
por Construtor; Injeção por Propriedade (Setter); e Injeção por Interface – esse
último é injeção de dependência sem inversão de controle.

Continuando nosso papo: Spring faz praticamente tudo que EJB faz (e mais uma
pancada de coisas). Ele pode ser utilizado por qualquer Aplicação Java, mas possui
diversas extensões específicas para Java EE! Ele é composto por diversos módulos,

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

todos construídos sobre o Core Container. Ele é livre para escolher quais
características ele necessita e eliminar módulos que ele não deseja utilizar.

A imagem abaixo apresenta os containers. Nós não vamos ver todos eles, vamos
passar pelos mais importantes – começando pelo mais importante de todos: Core!
Container Core é o responsável por fornecer Inversão de Controle e Injeção de
Dependência. O Módulo Beans é o responsável pelo BeanFactory, que é uma
implementação do padrão Factory1. O que esse padrão faz?

Ele cria beans por meio de configurações XML – tudo isso por meio da interface:
org.springframework.beans.factory.BeanFactory. O Módulo AOP fornece uma implementação
orientada a objetos que permite definir, por exemplo, interceptadores. Já o Módulo
DAO fornece uma camada de abstração para JDBC, eliminando grande parte da
codificação necessária para interagir com um banco de dados.

16712855225

O Módulo ORM fornece camadas de integração para mapeamento objeto-


relacional com tecnologias como JPA, Hibernate, etc. O Módulo JMS fornece a
possibilidade de produzir e consumir mensagens, com integração nativa com JMS.

1
Atualmente, recomenda-se utilizar ApplicationContext (org.springframework.context.ApplicationContext) em
vez de BeanFactory, porque ele fornece mais funcionalidades. Enquanto o primeiro permite a instanciação e
conexão (wire) de beans, o segundo permite também i18n, publicação de eventos, automatizações, etc.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

Galera, vamos falar um pouco agora sobre Spring Security! Trata-se de um


framework que fornece diversos serviços de segurança a Aplicações Java EE.

Ele faz isso de maneira amigável e flexível para o desenvolvedor, aderindo às


práticas bem estabelecidas e introduzidas pelo Spring Framework. Ele tenta
endereçar todas as camadas de segurança dentro da aplicação. Além disso, vem
com um conjunto de opções de configuração que o torna bastante poderoso. Sua
principal função é fornecer autenticação e autorização sobre o Spring Framework.

Apenas para lembrar esses conceitos, a autenticação é o processo de estabelecer


se alguém é quem afirma ser, e a autorização é o processo de decidir se alguém
pode ou não realizar alguma ação em uma aplicação. Ele pode ser utilizado em
conjunto com aplicações web ou standalone. Além disso, é capaz de proteger de
ataques como: session fixation, clickjacking, cross site request forgery, etc.

Ele é capaz de lidar com diversos modelos de autenticação – e isso é muito atrativo
para desenvolvedores. Pode fornecer segurança em nível de visões, métodos,
serviços, URL, domínios, etc. Antes que eu me esqueça, ele é open-source – claro,
é parte dos Projetos Spring, junto com Spring Batch, Spring Integration, Spring Web
Services, Spring Social, Spring Web Flow e Spring Data.

As configurações de segurança são realizadas no arquivo applicationContext-security.xml


no diretório WEB-INF. Para que qualquer página ou diretório sejam seguros, é
necessário adicionar a esse arquivo o elemento <intercept-url>. Como, professor? Mais
ou menos assim: <intercept-url pattern="/something" access="hasRole('ROLE_USER')"/>. É isso,
galera! Acredito que isso seja suficiente...

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

(CESPE - 2012 – PEFO/CE – Analista de Sistemas) No Spring, as configurações de


segurança são realizadas no arquivo applicationContext-security.xml, e, para que
qualquer página ou diretório seja seguro, é necessário adicionar a esse arquivo
o elemento <intercept-url>.

Comentários:

As configurações de segurança são realizadas no arquivo applicationContext-security.xml no


diretório WEB-INF. Para que qualquer página ou diretório sejam seguros, é necessário
adicionar a esse arquivo o elemento <intercept-url>. Como, professor? Mais ou menos
assim: <intercept-url pattern="/something" access="hasRole('ROLE_USER')"/>. É isso, galera!
Acredito que isso seja suficiente...

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(FCC - 0 – TRT/8 – Analista de Sistemas) Interface que representa o container


IoC (Inversão de Controle) do framework Spring:

a) org.springframework.pojo.factory.PojoFactory.
b) org.springframework.ioc.factory.IOCFactory.
16712855225

c) org.springframework.beans.factory.BeanFactory.
d) org.springframework.mvc.factory.MVCContainer.
e) org.springframework.beans.factory.CoreContainer.

Comentários:

Ele cria beans por meio de configurações XML – tudo isso por meio da interface:
org.springframework.beans.factory.BeanFactory. O Módulo AOP fornece uma implementação
orientada a objetos que permite definir, por exemplo, interceptadores. Já o Módulo
DAO fornece uma camada de abstração para JDBC, eliminando grande parte da
codificação necessária para interagir com um banco de dados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

Conforme vimos em aula, trata-se da BeanFactory.

Gabarito: C

(FCC - 1 – TRT/23 – Analista de Sistemas) Na estrutura do Spring o módulo


que provê uma camada de abstração para JDBC, eliminando grande parte da
codificação necessária para interagir com um banco de dados é o:

a) Spring Core
b) Spring ORM
c) Spring Context
d) Spring DAO
e) Spring AOP

Comentários:

Ele cria beans por meio de configurações XML – tudo isso por meio da interface:
org.springframework.beans.factory.BeanFactory. O Módulo AOP fornece uma implementação
orientada a objetos que permite definir, por exemplo, interceptadores. Já o Módulo
DAO fornece uma camada de abstração para JDBC, eliminando grande parte da
codificação necessária para interagir com um banco de dados.

Conforme vimos em aula, trata-se do Módulo Spring DAO.

Gabarito: D

(FCC - 2014 – PRODAM/AM – Analista de Sistemas) O framework Spring permite


a troca de mensagens entre clientes através do suporte nativo ao:
16712855225

a) SpringMessaging Service(SMS).
b) JavaMessaging Service(JMS).
c) SpringChat Service(SCS).
d) JavaChat Service(SCS).
e) Chat andMessaging Service(CMS).

Comentários:

O Módulo ORM fornece camadas de integração para mapeamento objeto-relacional


com tecnologias como JPA, Hibernate, etc. O Módulo JMS fornece a possibilidade de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

produzir e consumir mensagens, com integração nativa com JMS. Galera, vamos falar
um pouco agora sobre Spring Security! Trata-se de um framework que se foca em
fornecer autenticação e autorização a Aplicações Java.

Conforme vimos em aula, trata-se do Módulo JMS!

Gabarito: B

(CONSULPLAN - 2012 – TSE – Analista de Sistemas) No contexto do framework


Spring existem, basicamente, dois tipos de injeção de dependência, sendo que
em um deles, a dependência é resolvida por meio de um construtor do objeto a
receber o objeto dependente. Este tipo é conhecido por:

a) Bean Injection.
b) Setter Injection.
c) Factory Injection.
d) Constructor Injection.

Comentários:

Em vez de depender de uma classe concreta, passamos a depender de uma


abstração. O código estará mais desacoplado, modular, flexível – sendo mais fácil a
manutenção e a evolução. É possível injetar dependências de três formas: Injeção por
Construtor; Injeção por Propriedade (Setter); e Injeção por Interface – esse último é
injeção de dependência sem inversão de controle.

Conforme vimos em aula, são três tipos. Acredito que a questão deixou de fora o
último por ele não realizar a inversão de controle. De todo modo, trata-se do
Constructor Injection. 16712855225

Gabarito: D

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

STRUTS

Apache Struts é um framework livre, aberto, extensível, moderno e ágil para criação
de Aplicações Web Java pequenas ou grandes. Ele é resultado da junção do Struts
com WebWork. Ele preconiza convenções acima de configurações e facilita o
gerenciamento, reutilização e manutenção de código. Vamos ver agora algumas
características importantes do Struts 2:

 Linguagem Java: utiliza infraestrutura oferecida pelas bibliotecas do Java e


se concentram mais em negócios e menos em detalhes de infraestrutura.
Aproveita-se da maturidade da linguagem para construir aplicações mais
robustas e multiplataforma.

 Plug-ins: permite a utilização de plug-ins disponibilizados por terceiros, dessa


forma o framework Struts 2 oferece em si apenas funcionalidades básicas e
se utiliza de outras funcionalidades fornecidas por terceiros (Ex: REST,
Hibernate, jQuery, Rome, JFreechart, etc).

 Convenções ao invés de configurações: sempre que possível a configuração


foi eliminada do Struts 2. Ao não usar configurações, nomes de classes
podem oferecer mapeamento de ações, e valores de resultados retornados
16712855225

podem oferecer nomes para a páginas JSP serem renderizadas.

 Anotação ao invés de configuração XML: seguindo a tendência de todos os


frameworks atuais, o Struts 2 disponibiliza anotações para serem utilizadas
nas classes, reduzindo a configuração XML e mantendo a configuração mais
perto da classe de ação.

 Conversão de dados: a conversão de valores de campos de formulários


baseados em String em objetos ou tipos primitivos é tratada pela estrutura
de suporte (e vice-versa), removendo a necessidade de prover este código
de infraestrutura na classe da ação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

 Injeção de dependência: seguindo mais um padrão que está sendo utilizado


pela maioria dos frameworks, o Struts 2 suporta a injeção de dependências,
reduzindo assim o acoplamento entre as camadas do aplicativo, tornando-o
muito mais simples e mais fácil de testar.

 Testabilidade: em uma época em que o TDD se torna quase uma obrigação


em qualquer projeto de software de médio e grande porte, o Struts 2 facilita
a vida dos desenvolvedores, tornando mais simples o teste das ações,
interceptadores e outras classes do Struts 2.

Como mostra a imagem acima, Struts 2 possui em sua base duas importantes
tecnologias! No coração de todas as aplicações, encontram-se as trocas entre
cliente e servidor do Protocolo HTTP. A API Servlet funciona como uma abstração
de comunicação entre o Framework Struts 2 e o Protocolo HTTP, facilitando troca
de requisições e respostas Entendido?

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

O design do Struts 2 segue um padrão de projeto muito bem estabelecido: MVC


(Model/View/Controller)! Ele provê uma separação de responsabilidades que
permite o gerenciamento da complexidade de grandes sistemas de software ao
dividi-las em três componentes de alto nível! No Struts 2, eles são implementados
por uma Action, um Result e um FilterDispatcher, respectivamente.

 Controller (FilterDispatcher): o papel do Controller é mapear requisições em


ações. Em uma aplicação web, as requisições HTTP podem ser vistas como
comandos que o usuário envia para a aplicação. Uma das tarefas principais de
uma aplicação web é rotear essas requisições para as ações apropriadas.
Metaforicamente, é como um controlador de tráfego de um aeroporto!

O papel do Controller é feito por um objeto chamado FilterDispatcher. Trata-se


de uma servlet que inspeciona cada requisição para determinar qual ação irá
lidar com ela. O programador apenas precisa dizer ao framework qual URL da
requisição é mapeada para qual ação. Isso pode ser feito facilmente por meio
de um Arquivo de Configuração XML ou por @Annotations em Java 2.

 Model (Action): como afirma o renomado autor Donald Brown, o Model é o


estado interno da aplicação! Esse estado é composto de dados em si e das regras
de negócio. Por exemplo, se você está se logando em uma aplicação, tanto os
dados quanto as regras de negócio estarão envolvidas no processo de
autenticação.

As regras de negócio fornecerão um método de autenticação que usará um


Nome de Usuário e uma Senha para verificar os dados recebidos contra os dados
persistidos no banco de dados. Isso irá gerar um estado “Autenticado” ou um
estado “Não-Autenticado”. Nem os dados nem as regras de negócio
16712855225

separadamente podem produzir esses estados.

Uma Action, portanto, é um conjunto encapsulado de chamadas a regras de


negócio e também servem como um local de transferência de dados. Em suma:
o Controller receberá requisições, consultará seus mapeamentos e determinará
quais Actions devem ser acionadas, que preparará os dados necessários para
executar a regra de negócio e passará o resultado para a View.

2
A tendência atualmente é utilizar o mínimo possível de Arquivos de Configuração XML e utilizar o máximo de
@Annotations ou simplesmente convenções.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

 View (Result): o resulta retorna a página para o navegador. Essa página é uma
interface que apresenta uma representação do estado da aplicação ao usuário.
Em geral, trata-se de Páginas JSP. É muito simples: a View traduz o estado da
aplicação em uma representação visual em que seja possível a interação com o
usuário. Esse é bem simples...

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

(CESPE - 8 – MPE/AM – Analista de Sistemas) O ambiente de trabalho Struts


é organizado para ajudar os desenvolvedores a criar aplicações web que utilizem
a arquitetura MVC (model-view-controller), na qual o modelo (model) representa
o código referente ao negócio ou ao banco de dados, a visão (view) representa
o código de desenho da página e o controlador (controller) representa o código
de navegação.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

(CESPE - 8 – SERPRO – Analista de Sistemas) O Tiles é um componente do


framework Struts que facilita a organização de leiautes. Apesar de ter sido
desenvolvido para ser usado junto com o Struts, o Tiles pode também ser usado
separadamente.

Comentários:

Perfeito! Ele é um sistema de tamplates que pode ser utilizado sem o Struts.
16712855225

Gabarito: C

(CESPE - – SERPRO – Analista de Sistemas) O framework Struts, embasado


no modelo MVC, é uma implementação em código aberto e tem sido adotado
por aplicações web em Java.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

(CESPE - 9 – INMETRO – Analista de Sistemas) A tecnologia Struts é


empregada para a construção de aplicações web conforme o modelo MVC, no
qual o modelo é representado por beans programados em Java, a view é
representada por JSPs e o controller é parcialmente descrito em arquivos XML.

Comentários:

Perfeito, é exatamente isso! Os dados e as regras de negócio podem ser


encapsulados em beans.

Gabarito: C

(CONSULPLAN - 2012 – TSE - Técnico Judiciário Struts 2 é um framework open-


source utilizado para a construção de aplicações Java para a Web. Nesse
contexto, observe a figura que representa o ciclo de vida numa requisição Struts
2.

16712855225

De todos os elementos que compõem a arquitetura, uma lida com todas as


requisições feitas e é responsável por executar as Actions e o conteúdo estático
(HTML, CSS, SCRIPTS) e um outro, é a unidade básica de trabalho, que pode ser

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

associada a uma requisição HTTP. Nessa ordem, esses elementos são conhecidos,
respectivamente, por:

a) Filter Dispatcher e Template.


b) Action Mapper e Template.
c) Filter Dispatcher e Action.
d) Action Mapper e Action.

Comentários:

Dilter Dispatcher lida com as requisições e Action é a unidade básica de trabalho.

Gabarito: C

(CESPE - 1 – SERPR – Analista de Sistemas) Se a arquitetura for no padrão


MVC (modelo, visualização e controle), Pedro poderá escolher como framework
o Struts, por ser um software de fonte aberta e que favorece o desenvolvimento
de aplicações Web.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

(CESPE - 3 – SERPRO – Analista de Sistemas) Em Struts, recursos como mapas


de ação podem ter suas configurações controladas por meio de arquivos de
configuração.
16712855225

Comentários:

Perfeito, é possível fazer o mapeamento de ações por meio de arquivos de


configuração.

Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

JAVA MESSAGE SERVICE (JMS)

Java Message Service (JMS) é uma API Java que possui o intuito de permitir que
aplicativos escritos em Java possam criar, receber e enviar mensagens destinadas
ou oriundas de outros aplicativos. Galera, esse é um tema que cai pouquíssimo em
prova! Quando cai, em geral, basta saber a definição e as características básicas de
seu funcionamento. Podemos defini-lo de diversas formas:

 Trata-se de uma especificação para envio e processamento de mensagens


entre componentes de software distribuídos.

 Trata-se de uma tecnologia para envio de mensagens entre dois ou mais


clientes distintos.

 Trata-se de um middleware que permite que aplicações possam criar, enviar,


receber e ler mensagens.

 Trata-se de uma API que permite a comunicação entre diferentes


componentes de uma aplicação distribuída.

Todas essas definições estão corretas! Além disso, ele realiza processamentos
fracamente acoplados, em que todas as operações que envolvem a troca de
mensagens são feitas de forma assíncrona, fazendo com que as aplicações
participantes não precisem ficar bloqueadas esperando o término de alguma
computação remotamente solicitada (por meio de RPC ou RMI).

Ele define um grupo de interfaces e semânticas que permitem que aplicações Java
16712855225

possam acessar os serviços de qualquer MOM! Professor, o que é isso? É o acrônimo


de Message-Oriented Middleware, i.e., um middleware que promove a integração
das operações de troca de mensagens intra e entre corporações, possibilitando que
elementos de negócio sejam intercambiados de forma confiável.

JMS é importante? Sim! Primeiro, a especificação inclui duas estratégias populares


de envio de mensagem: ponto a ponto e publish/subscribe. Segundo, ele suporta o
envio de mensagens síncronas e assíncronas. Terceiro, ele apoia uma abordagem
orientada a eventos para recepção de mensagens. Quarto, muitas implementações
fornecem extensiva segurança integrada (Certificação Digital, Criptografias, etc).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

Sobre as estratégias de envio de mensagens citadas acima, temos ponto-a-ponto e


publish/subscribe – ambas são bastante parecidas. No primeiro caso, o emissor cria
uma fila de mensagens no servidor e envia as mensagens para essa fila. O receptor
se registra no servidor para receber as mensagens enviadas para essa fila. Há um
relacionamento um-para-um (Unicast) entre o cliente emissor e o cliente receptor.

Nesse caso, apenas um receptor irá ler a mensagem. Como se trata de uma
comunicação assíncrona, não é necessário que o emissor esteja em execução no
momento em que o consumidor lê a mensagem. Da mesma forma, não é necessário
que o receptor esteja em execução no momento em que o produtor envia a
mensagem. Quando lida a mensagem, o receptor envia um aviso para o emissor.

No segundo caso, o emissor cria um tópico no servidor e publica mensagens para


esse tópico. Os receptores se registram (i.e., dão subscribe) no servidor para receber
mensagens por tópico. Há um relacionamento um-para-muitos (Multicast) entre o
emissor e os receptores. Dessa forma, diversos receptores podem ler a mensagem
publicada no servidor.

Existe também uma dependência temporal entre o emissor e o receptor de um


tópico. O receptor deve permanecer continuamente ativo para receber mensagens.
Uma observação de nomenclatura: no primeiro caso, chamamos o emissor de
produtor e o receptor de consumidor; no segundo caso, chamamos o emissor de
publicador e o receptor de assinante (subscriber).
16712855225

A Arquitetura JMS possui três elementos principais:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

 Provedor: sistema de mensagem que implementa Interfaces JMS e fornece


componentes administrativos e de controle.

 Cliente: programas ou componentes, escritos em Java, que produzem e


consomem mensagens. Qualquer aplicação Java EE pode ser um cliente.

 Mensagem: trata-se dos objetos que comunicam informações entre Clientes


JMS – os dados em si.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

(CESGRANRIO - 2013 - BNDES - Profissional Básico - Análise 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.

Comentários: 16712855225

Sobre as estratégias de envio de mensagens citadas acima, temos ponto-a-ponto e


publish/subscribe – ambas são bastante parecidas. No primeiro caso, o emissor cria
uma fila de mensagens no servidor e envia as mensagens para essa fila. O receptor
se registra no servidor para receber as mensagens enviadas para essa fila. Há um
relacionamento um-para-um (Unicast) entre o cliente emissor e o cliente receptor.

Conforme vimos em aula, ele possui duas abordagens para envio e processamento
de mensagens: ponto-a-ponto e publish/subscribe. No primeiro caso, cada
mensagem enviada para uma fila deve ser recebida por um único consumidor
(Unicast).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

Gabarito: A

(CESGRANRIO - – PETROBRÁS - Analista de Sistemas – D) Para se garantir


a entrega de uma mensagem para um único destinatário, o modelo de troca de
mensagens publish/subscribe do JMS com o modo de entrega persistente e um
assinante durável é mais indicado, enquanto que se a mensagem for para vários
destinatários, pode-se utilizar o modelo ponto a ponto do JMS com um modo
de entrega persistente.

Comentários:

Sobre as estratégias de envio de mensagens citadas acima, temos ponto-a-ponto e


publish/subscribe – ambas são bastante parecidas. No primeiro caso, o emissor cria
uma fila de mensagens no servidor e envia as mensagens para essa fila. O receptor
se registra no servidor para receber as mensagens enviadas para essa fila. Há um
relacionamento um-para-um (Unicast) entre o cliente emissor e o cliente receptor.

No segundo caso, o emissor cria um tópico no servidor e publica mensagens para


esse tópico. Os receptores se registram (i.e., dão subscribe) no servidor para receber
mensagens por tópico. Há um relacionamento um-para-muitos (Multicast) entre o
emissor e os receptores. Dessa forma, diversos receptores podem ler a mensagem
publicada no servidor.

Conforme vimos em aula, a questão está invertida! O Modelo Publish/Subscribe é


um-para-muitos (Multicast) e o Modelo Ponto-a-Ponto é um-para-um (Unicast).

Gabarito: E
16712855225

(CESPE – 2010 – SERPRO - Analista de Sistemas) A API JMS é usada para a


construção de sistemas de mensageria na plataforma JEE, sendo algumas de
suas características relevantes a assincronia das mensagens, a arquitetura peer-
to-peer e o suporte ao estilo de mensageria publish-subscribe.

Comentários:

JMS é importante? Sim! Primeiro, a especificação inclui duas estratégias populares de


envio de mensagem: ponto a ponto e publish/subscribe. Segundo, ele suporta o envio
de mensagens síncronas e assíncronas. Terceiro, ele apoia uma abordagem orientada

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

a eventos para recepção de mensagens. Quarto, muitas implementações fornecem


extensiva segurança integrada (Certificação Digital, Criptografias, etc).

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

JNDI (JAVA NAMING AND DIRECTORY INTERFACE)

JNDI é uma API Java que fornece uma interface padrão para localizar usuários,
máquinas, redes, objetos e serviços. Por exemplo, você pode utilizá-la para localizar
uma impressora em sua intranet corporativa, bem como para localizar um objeto
Java ou conectar a um banco de dados. A JNDI é utilizada em EJB, RMI-IIOP, JDBC,
etc. É a maneira padrão de procurar algo na rede.

Um serviço de nomeação genérico é semelhante a uma telefonista 3. Quando quer


falar com alguém por telefone e não sabe o número da pessoa, você chama a
telefonista do serviço de informações da companhia telefônica para procurar a
pessoa com quem quer falar. Você fornece o nome da pessoa à telefonista que
então pesquisa o número e o disca para você, conectando-o à pessoa.

Um serviço de nomeação genérico é uma entidade que realiza as seguintes tarefas:

 Associa os nomes aos objetos. Nós chamamos isso de vinculação de nomes


a objetos. É semelhante ao serviço de uma empresa de telefonia associar o
nome de uma pessoa a um número telefônico de uma residência específica.

 Fornece um recurso para localizar um objeto com base em um nome.


Chamamos isso de procurar um objeto. É semelhante a uma telefonista
localizar o número de telefone com base no nome e conectar duas pessoas.

Um serviço de diretório é um serviço de nomeação que foi estendido e aprimorado


para fornecer operações de manipulação de atributos de objetos diretório. Um
diretório é um sistema de objetos diretório interconectados. Alguns exemplos de
16712855225

produtos de diretório são Directory Server da Netscape e o Active Directory da


Microsoft.

A JNDI é um sistema para clientes baseados em Java para interagir com os sistemas
de nomeação e de diretório. Ela é uma ponte entre serviços de nomeação e de
diretório, fornecendo uma interface comum para diretórios diferentes. Os usuários

3
Outros exemplos:

Um Sistema de Arquivos conecta um caminho a um bloco de memória [c:\temp\dados.txt]  16A0:0C00];


Um Sistema DNS conecta um nome de domínio a um Endereço IP [www.globo.com  200.206.192.193].

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

que precisam acessar um diretório LDAP usam a mesma API que os usuários que
desejam acessar um diretório NIS ou diretório da Novell.

Todas as operações de diretório são feitas pela interface da JNDI, o que fornece
uma estrutura comum. Agora vamos ver alguns benefícios:

 Você só precisa aprender uma única API para acessar todos os tipos de
informações do serviço de diretório, como credenciais de segurança,
números de telefone, endereços eletrônico e de rede, preferências, etc.

 A JNDI isola a aplicação em relação ao protocolo e aos detalhes de


implementação. Ademais, pode utilizá-la para utilizar a JNDI para ler e gravar
objetos Java inteiros a partir de diretórios.

 É possível vincular diferentes tipos de diretórios, como um diretório LDAP


com um NDS, e fazer com que a combinação pareça um diretório grande,
federado, o qual aparece para o cliente como um único diretório contíguo.

No Java EE, você pode utilizar a JNDI para muitos propósitos! Você pode utilizá-lo
para adquirir uma referência para a interface Java Transaction API (JTA) User-
Transaction; você pode utilizá-lo para conectar-se às fábricas de recursos, como
drivers de JDBC ou de Java Message Service (JMS); ou, por fim, você pode utilizá-lo
para pesquisar outros beans.

A JNDI é composta por metades: a API cliente e a Service Provider Interface (SPI). A
primeira permite que o código Java realize operações de diretório. Essa API é
uniforme para todos os tipos de diretórios. Você gastará a maior parte do tempo
utilizando a API cliente. A JNDI SPI é uma interface à qual os fornecedores de
serviços de nomeação e de diretório podem se conectar.
16712855225

A SPI é o oposto da API: enquanto esta permite que os clientes codifiquem uma
única interface unificada, a SPI possibilita aos fornecedores de serviço de nomeação
e de diretório ajustarem seus protocolos proprietários particulares no sistema. Isso
permite que o código de cliente alavanque os serviços de nomeação e de diretório
proprietários em Java enquanto mantém um alto nível de portabilidade de código.

Por fim, gostaria de falar também sobre contextos e sistemas de nomes! Um


contexto é um conjunto de conexões nome-objeto, i.e., um objeto que tem zero ou
mais ligações. Se o objeto contido no contexto for também um contexto, ele será

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

um subcontexto4. Um sistema de nomes é um conjunto interligado de contextos


que respeitam a mesma convenção e possuem um conjunto comum de operações.

A imagem abaixo apresenta a Arquitetura JNDI em camadas:

16712855225

4
E usr é contexto, bin é subcontexto de usr, etc;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

(CESPE - 2006 – DATAPREV – Analista de Sistemas) O uso de contextos de nomes


JNDI se faz necessário junto aos módulos Web Container e EJB Container.

Comentários:

Perfeito! Contextos de nomes JNDI são necessários junto ao Web Container e EJB
Container.

Gabarito: C

(CESPE - – MEC – Analista de Sistemas) JNDI (Java Naming and Directory


Interface) é um framework de desenvolvimento Java que unifica e padroniza
classes e interfaces para acesso a diretórios baseados em LDAP.

Comentários:

Framework de Desenvolvimento Java? Não!

Gabarito: E

(CESPE - 2 – TJ/AL – Analista de Sistemas – C) No ambiente de nomeação


JNDI, sempre que um componente é personalizado, é necessário acessar ou
16712855225

alterar o código-fonte do componente.

Comentários:

Não, visto que o acesso ocorre pela interface padronizada.

Gabarito: E

(CESPE - 2012 – TJ/ – Analista de Sistemas) JNDI, parte do projeto de JSF,


utiliza XHTML como tecnologia de apresentação dos dados, possibilitando a
separação entre as camadas de negócio e de controle.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

Comentários:

Einh?! Não há NADA certo nesse item, impressionante...

Gabarito: E

(CESPE - 2013 – CPRM – Analista de Sistemas) Java Naming and Directory


Interface (JNDI), na JEE7, permite que componentes localizem outros
componentes em aplicações distribuídas. Assim, é possível que um servlet
execute métodos remotos que estejam em outro recurso.

Comentários:

Perfeito! É um serviço de diretórios para dados e objetos; é possível que um servlet


execute métodos remotos que estejam em outro recurso.

Gabarito: C

(CESPE - 2013 – TRE/MS – Analista de Sistemas) A arquitetura JNDI consiste em


uma application programming interface (API) e uma service provider interface
(SPI), em que as aplicações Java utilizam a JNDI SPI para acessar os serviços de
diretórios tais como LDAP e NDS que são, nessa arquitetura, diretamente ligados
a JNDI API.

Comentários:

Na verdade, é o inverso! Aplicações Java utilizam a JNDI API para acessar os serviços
de diretórios tais como LDAP e NDS que são, nessa arquitetura, diretamente ligados
16712855225

a JNDI SPI.

Gabarito: E

(CESGRANRIO - 2005 – CASA DA MOEDA – Analista de Sistemas – C) As


aplicações J2EE podem utilizar a API JNDI para acessar serviços de nomeação e
diretório como LDAP e NIS.

Comentários:

Perfeito, podem utilizar para acessar qualquer um desses serviços de diretório.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

Gabarito: C

(FGV - – MEC – Analista de Sistemas – B) O JNDI é a API J2EE que fornece


uma interface padrão para localizar usuários, máquinas, objetos, redes e serviços.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

JAVA TRANSACTION API (JT

Esse é um tema raro em concursos – eu procurei em centenas de provas e encontrei


apenas quatro questões, logo vamos ser breves. Bacana? Bem, o Java EE possui uma
API que permite que aplicações executem transações distribuídas, ou seja,
transações que acessam e atualizam dados em dois ou mais recursos do
computador conectados em rede – trata-se da Java Transaction API (JSR 907).

Ele especifica um conjunto de interfaces padronizadas entre um gerenciador


(monitor) de transações e as partes envolvidas em um sistema de transação
distribuída: a aplicação, o servidor de aplicações, um adaptador de recursos e o
gerenciador de recursos, que controla o acesso aos recursos compartilhados
afetados por essas transações. Antes de continuar, vamos definir alguns conceitos.

Uma transação define uma unidade lógica de trabalho que ou é completamente


bem sucedida ou não produz absolutamente nenhum resultado – ou é tudo ou é
nada! Uma transação distribuída é simplesmente uma transação que acessa e
atualiza dados em dois ou mais recursos compartilhados em rede e, portanto, deve
ser coordenada entre esses recursos.

Essa especificação busca padronizar o uso e tratamento de transações distribuídas,


permitindo gerenciar transações (Ex: fazer Commit e Rollback), controlando
concorrência, paralelismo, integridade de dados e, isso tudo, sem precisar utilizar
transações diretamente por meio de um Driver JDBC. As interfaces mais importantes
são User Transaction, Transaction Manager, Transaction, XA Resource e Xid.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

(CESPE - 2010 – TRE/BA - Analista de Sistemas) Em um sistema de transação


distribuído, o Java Transaction API (JTA) permite especificar um conjunto de
interfaces entre o gerenciador de transações e as partes envolvidas.

Comentários:

Ele especifica um conjunto de interfaces padronizadas entre um gerenciador (monitor)


de transações e as partes envolvidas em um sistema de transação distribuída: a
aplicação, o servidor de aplicações, um adaptador de recursos e o gerenciador de
recursos, que controla o acesso aos recursos compartilhados afetados por essas
transações. Antes de continuar, vamos definir alguns conceitos.

Conforme vimos em aula, essa especificação contém um conjunto de interfaces para


coordenar todas as partes envolvidas.

Gabarito: C

(CESPE - 2010 – TRE/BA - Analista de Sistemas) JTA pode ser utilizado para o
gerenciamento de transações distribuídas.

Comentários:

Esse é um tema raro em concursos – eu procurei em centenas de provas e encontrei


16712855225

apenas sete questões, logo vamos ser breves. Bacana? Bem, o Java EE possui uma
API que permite que aplicações executem transações distribuídas, ou seja, transações
que acessam e atualizam dados em dois ou mais recursos do computador conectados
em rede – trata-se da Java Transaction API (JTA).

Conforme vimos em aula, é exatamente essa a função dele!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

(FGV - – FGV – Analista de Sistemas – B) JTA é uma API da linguagem Java


que permite a componentes baseados em Java/J2EE criar, enviar, receber e ler
mensagens.

Comentários:

Não, essa questão tenta confundir JTA e JMS!

Gabarito: E

UMARC - – BDMG – Analista de Sistemas – JTA é uma API que


padroniza o tratamento de transações dentro de uma aplicação Java.

Comentários:

Essa especificação busca padronizar o uso e tratamento de transações distribuídas,


permitindo gerenciar transações (Ex: fazer Commit e Rollback), controlando concorrência,
paralelismo, integridade de dados e, isso tudo, sem precisar utilizar transações
diretamente por meio de um Driver JDBC. As interfaces mais importantes são User
Transaction, Transaction Manager, Transaction, XA Resource e Xid.

Conforme vimos em aula, ele de fato padroniza o tratamento de transações dentro


de uma Aplicação Java.

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

JAVASERVER PAGES STANDARD TAG LIBRARY (JSTL)

O JavaServer Pages Standard Tag Library (JSTL) é um componente da plataforma


Java EE! Ele estende a especificação JSP ao adicionar uma biblioteca de tags que
encapsula as principais funcionalidades comuns a diversas aplicações, tais como:
controle de fluxo; manipulação de XML; internacionalização; acesso a banco de
dados (SQL); etc.

Há quem afirme que ela se trata de um conjunto de bibliotecas, cada uma com um
propósito bem definido, que encapsula em tags simples toda a funcionalidade
necessária para o desenvolvimento de algumas páginas web. O JSTL permite
empregar um único conjunto padrão de tags. Galera, por que essa padronização é
importante?

Ora, porque ela permite que você implante suas aplicações em qualquer contêiner
que tenha suporte à tecnologia JSTL. Galera, ela reduz ou até elimina o uso de
scriplets. E daí, professor? Cara, scriplets desorganizam o código-fonte e dificultam
a integração entre designers e programadores. A simplicidade das bibliotecas
oferecidas pelo JSTL ajuda bastante na lógica de apresentação de uma Página JSP.

Claro, essas tags podem acabar agregando maior sobrecarga no servidor. Tanto os
scriplets quando as bibliotecas são compiladas em servlets, as quais são executadas
por um contêiner. O código das scriplets são basicamente copiados na servlet
resultante, já as tags geram um pouco mais de código. Além disso, sejamos sinceros:
scriplets são mais poderosas que as Tags JSTL.

Bem, essa tecnologia divide as tags basicamente em cinco áreas funcionais:


16712855225

ÁREA DESCRIÇÃO LISTA DE TAGS


FUNCIONAL
CORE Compreende funções remove, set, choose, forEach, forTokens, if, import,
básicas, como loops, redirect, url, catch, out, otherwise, param, when.
condicionais e E/S.

XML Compreende funções out, parse, set, choose, forEach, if, transform,
de manipulação de otherwise, param, when.
XML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

BANCO DE Compreende funções setDataSource, query, transaction, update, param,


DADOS de manipulação de dateParam.
dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message,


LIZAÇÃO (I18N) de formação setBundle, formatNumber, formatDate, parseDate,
internacional. parseNumber, setTimeZone, timeZone, param.

FUNÇÕES Compreende funções Length, toUpperCase, toLowerCase, split, substring,


genéricas e substringAfter, contains, join, substringBefore,
misturadas. trim, replace, indexOf, startsWith, endsWith,
containsIgnoreCase, escapeXml

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

(CESPE - 6 – SGA/AC - Analista de Sistemas - I As tags <if>, <switch>,


<while> e <forEach> são tags padronizadas pela JSTL.

Comentários:

ÁREA DESCRIÇÃO LISTA DE TAGS


FUNCIONAL

CORE Compreende funções remove, set, choose, forEach, forTokens, if, import,
básicas, como loops, redirect, url, catch, out, otherwise, param, when.
condicionais e E/S.

XML Compreende funções out, parse, set, choose, forEach, if, transform,
de manipulação de otherwise, param, when.
XML.

BANCO DE Compreende funções setDataSource, query, transaction, update, param,


DADOS de manipulação de dateParam.
dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message,


16712855225

LIZAÇÃO (I18N) de formação setBundle, formatNumber, formatDate, parseDate,


internacional. parseNumber, setTimeZone, timeZone, param.

FUNÇÕES Compreende funções Length, toUpperCase, toLowerCase, split, substring,


genéricas e substringAfter, contains, join, substringBefore,
misturadas. trim, replace, indexOf, startsWith, endsWith,
containsIgnoreCase, escapeXml

Conforme vimos em aula, não existe as tags <switch> ou <while>. No entanto, a banca
considerou o item verdadeiro :-(

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

Gabarito: C

(CESPE - – MPE/AM - Analista de Sistemas) A biblioteca JSTL (JavaServer


Pages Standard Tag Library) reúne funcionalidades comuns de aplicações web,
provendo suporte para tarefas estruturais como iterações e condições, etiquetas
(tags) para manipular documentos XML, etiquetas para internacionalização e
etiquetas SQL.

Comentários:

O JavaServer Pages Standard Tag Library (JSTL) é um componente da plataforma


Java EE! Ele estende a especificação JSP ao adicionar uma biblioteca de tags que
encapsula as principais funcionalidades comuns a diversas aplicações, tais como:
controle de fluxo; manipulação de XML; internacionalização; acesso a banco de dados
(SQL); etc.

Conforme vimos em aula, é exatamente isso! Lembrando que o controle de fluxo


trata justamente de sequência, seleção e iteração.

Gabarito: C

(CESPE - 1 – INMETRO - Analista de Sistemas - B As tags define, inputText,


commandButton e message pertencem ao JSP Standard Tag Library 1.0 (JSTL 1.0).

Comentários:

ÁREA DESCRIÇÃO 16712855225

LISTA DE TAGS
FUNCIONAL

CORE Compreende funções remove, set, choose, forEach, forTokens, if, import,
básicas, como loops, redirect, url, catch, out, otherwise, param, when.
condicionais e E/S.

XML Compreende funções out, parse, set, choose, forEach, if, transform,
de manipulação de otherwise, param, when.
XML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

BANCO DE Compreende funções setDataSource, query, transaction, update, param,


DADOS de manipulação de dateParam.
dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message,


LIZAÇÃO (I18N) de formação setBundle, formatNumber, formatDate, parseDate,
internacional. parseNumber, setTimeZone, timeZone, param.

FUNÇÕES Compreende funções Length, toUpperCase, toLowerCase, split, substring,


genéricas e substringAfter, contains, join, substringBefore,
misturadas. trim, replace, indexOf, startsWith, endsWith,
containsIgnoreCase, escapeXml

Conforme vimos em aula, apenas a tag message pertence ao JSTL.

Gabarito: E

(FCC - 2010 – TRT/8ª REGIÃO - Analista de Sistemas) A biblioteca de tags padrão


do Java Server Pages (JSTL) é uma coleção de tags padronizadas para tarefas
comuns a muitas aplicações JSP. Estas tags estão divididas em 5 áreas funcionais:

a) Web, XML, Banco de Dados, Internacionalização (I18n) e Funções.


b) Core, XML, Banco de Dados, Internacionalização (l18n) e Funções.
c) Core, Estatística, Banco de Dados, Internacionalização (I18n) e Funções.
d) Web, Matemática, Banco de Dados, Internacionalização (I18n) e Funções.
e) Core, Web, Matemática, Internacionalização (I18n) e Funções.

Comentários:
16712855225

ÁREA DESCRIÇÃO LISTA DE TAGS


FUNCIONAL

CORE Compreende funções remove, set, choose, forEach, forTokens, if, import,
básicas, como loops, redirect, url, catch, out, otherwise, param, when.
condicionais e E/S.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

XML Compreende funções out, parse, set, choose, forEach, if, transform,
de manipulação de otherwise, param, when.
XML.

BANCO DE Compreende funções setDataSource, query, transaction, update, param,


DADOS de manipulação de dateParam.
dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message,


LIZAÇÃO (I18N) de formação setBundle, formatNumber, formatDate, parseDate,
internacional. parseNumber, setTimeZone, timeZone, param.

FUNÇÕES Compreende funções Length, toUpperCase, toLowerCase, split, substring,


genéricas e substringAfter, contains, join, substringBefore,
misturadas. trim, replace, indexOf, startsWith, endsWith,
containsIgnoreCase, escapeXml

Conforme vimos em aula, trata-se de Core, XML, Banco de Dados, i18n e Funções.

Gabarito: B

(CESPE - 9 – CEHAP/PB - Analista de Sistemas) Assinale a opção incorreta


acerca de JSTL.

a) O JSTL não possui suporte nativo a SQL. Para tanto, é utilizada em conjunto
com a biblioteca nativa SQL do J2EE.

b) Uma página JSTL pode ser definida como uma página JSP contendo um
16712855225

conjunto de tags JSTLs.

c) Em uma página JSTL, cada tag realiza determinado tipo de processamento.

d) O JSTL permite ao programador escrever páginas JSPs sem necessariamente


utilizar códigos Java, facilitando a integração entre webdesigners e
programadores.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

O JavaServer Pages Standard Tag Library (JSTL) é um componente da plataforma


Java EE! Ele estende a especificação JSP ao adicionar uma biblioteca de tags que
encapsula as principais funcionalidades comuns a diversas aplicações, tais como:
controle de fluxo; manipulação de XML; internacionalização; acesso a banco de dados
(SQL); etc.

(a) Conforme vimos em aula, o suporte é nativo – é até uma área funcional;

O JavaServer Pages Standard Tag Library (JSTL) é um componente da plataforma


Java EE! Ele estende a especificação JSP ao adicionar uma biblioteca de tags que
encapsula as principais funcionalidades comuns a diversas aplicações, tais como:
controle de fluxo; manipulação de XML; internacionalização; acesso a banco de dados
(SQL); etc.

(b) Conforme vimos em aula, JSTL é JavaServer Pages (JSP) Tag Library. Logo, nada
mais é que uma biblioteca de tags para uma Página JSP.

ÁREA DESCRIÇÃO LISTA DE TAGS


FUNCIONAL

CORE Compreende funções remove, set, choose, forEach, forTokens, if, import,
básicas, como loops, redirect, url, catch, out, otherwise, param, when.
condicionais e E/S.

XML Compreende funções out, parse, set, choose, forEach, if, transform,
de manipulação de otherwise, param, when.
XML.
16712855225

BANCO DE Compreende funções setDataSource, query, transaction, update, param,


DADOS de manipulação de dateParam.
dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message,


LIZAÇÃO (I18N) de formação setBundle, formatNumber, formatDate, parseDate,
internacional. parseNumber, setTimeZone, timeZone, param.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

FUNÇÕES Compreende funções Length, toUpperCase, toLowerCase, split, substring,


genéricas e substringAfter, contains, join, substringBefore,
misturadas. trim, replace, indexOf, startsWith, endsWith,
containsIgnoreCase, escapeXml

(c) Conforme vimos em aula, cada conjunto de tags tem uma função genérica e
cada tag dentro desse conjunto tem uma função específica. Por exemplo: a tag url
cria uma UTL com parâmetros de consulta opcionais.

Ora, porque ela permite que você implante suas aplicações em qualquer contêiner
que tenha suporte à tecnologia JSTL. Galera, ela reduz ou até elimina o uso de
scriplets. E daí, professor? Cara, scriplets desorganizam o código-fonte e dificultam a
integração entre designers e programadores. A simplicidade das bibliotecas oferecidas
pelo JSTL ajuda bastante na lógica de apresentação de uma Página JSP.

(d) Conforme vimos em aula, este item está perfeito!

Gabarit A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SPRING

(CESPE - 2012 – PEFO/CE – Analista de Sistemas) No Spring, as configurações de


segurança são realizadas no arquivo applicationContext-security.xml, e, para que
qualquer página ou diretório seja seguro, é necessário adicionar a esse arquivo
o elemento <intercept-url>.

(FCC - 0 – TRT/8 – Analista de Sistemas) Interface que representa o container


IoC (Inversão de Controle) do framework Spring:

a) org.springframework.pojo.factory.PojoFactory.
b) org.springframework.ioc.factory.IOCFactory.
c) org.springframework.beans.factory.BeanFactory.
d) org.springframework.mvc.factory.MVCContainer.
e) org.springframework.beans.factory.CoreContainer.

(FCC - 1 – TRT/2 – Analista de Sistemas) Na estrutura do Spring o módulo


que provê uma camada de abstração para JDBC, eliminando grande parte da
codificação necessária para interagir com um banco de dados é o:

a) Spring Core
b) Spring ORM
c) Spring Context
d) Spring DAO
e) Spring AOP

(FCC - 2014 – PRODAM/AM – Analista de Sistemas) O framework Spring permite


16712855225

a troca de mensagens entre clientes através do suporte nativo ao:

a) SpringMessaging Service(SMS).
b) JavaMessaging Service(JMS).
c) SpringChat Service(SCS).
d) JavaChat Service(SCS).
e) Chat andMessaging Service(CMS).

(CONSULPLAN - 2012 – TSE – Analista de Sistemas) No contexto do framework


Spring existem, basicamente, dois tipos de injeção de dependência, sendo que

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

em um deles, a dependência é resolvida por meio de um construtor do objeto a


receber o objeto dependente. Este tipo é conhecido por:

a) Bean Injection.
b) Setter Injection.
c) Factory Injection.
d) Constructor Injection.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


STRUTS

(CESPE - 8 – MPE/AM – Analista de Sistemas) O ambiente de trabalho Struts


é organizado para ajudar os desenvolvedores a criar aplicações web que utilizem
a arquitetura MVC (model-view-controller), na qual o modelo (model) representa
o código referente ao negócio ou ao banco de dados, a visão (view) representa
o código de desenho da página e o controlador (controller) representa o código
de navegação.

(CESPE - 8 – SERPRO – Analista de Sistemas) O Tiles é um componente do


framework Struts que facilita a organização de leiautes. Apesar de ter sido
desenvolvido para ser usado junto com o Struts, o Tiles pode também ser usado
separadamente.

(CESPE - – SERPRO – Analista de Sistemas) O framework Struts, embasado


no modelo MVC, é uma implementação em código aberto e tem sido adotado
por aplicações web em Java.

(CESPE - 9 – INMETRO – Analista de Sistemas) A tecnologia Struts é


empregada para a construção de aplicações web conforme o modelo MVC, no
qual o modelo é representado por beans programados em Java, a view é
representada por JSPs e o controller é parcialmente descrito em arquivos XML.

(CONSULPLAN - 2012 – TSE - Técnico Judiciário Struts 2 é um framework open-


source utilizado para a construção de aplicações Java para a Web. Nesse
contexto, observe a figura que representa o ciclo de vida numa requisição Struts
16712855225

2.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

De todos os elementos que compõem a arquitetura, uma lida com todas as


requisições feitas e é responsável por executar as Actions e o conteúdo estático
(HTML, CSS, SCRIPTS) e um outro, é a unidade básica de trabalho, que pode ser
associada a uma requisição HTTP. Nessa ordem, esses elementos são conhecidos,
respectivamente, por:

a) Filter Dispatcher e Template.


b) Action Mapper e Template.
c) Filter Dispatcher e Action.
d) Action Mapper e Action.

(CESPE - 1 – SERPR – Analista de Sistemas) Se a arquitetura for no padrão


16712855225

MVC (modelo, visualização e controle), Pedro poderá escolher como framework


o Struts, por ser um software de fonte aberta e que favorece o desenvolvimento
de aplicações Web.

(CESPE - 3 – SERPRO – Analista de Sistemas) Em Struts, recursos como mapas


de ação podem ter suas configurações controladas por meio de arquivos de
configuração.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JMS

(CESGRANRIO - 2013 - BNDES - Profissional Básico - Análise 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.

(CESGRANRIO - – PETROBRÁS - Analista de Sistemas – D) Para se garantir


a entrega de uma mensagem para um único destinatário, o modelo de troca de
mensagens publish/subscribe do JMS com o modo de entrega persistente e um
16712855225

assinante durável é mais indicado, enquanto que se a mensagem for para vários
destinatários, pode-se utilizar o modelo ponto a ponto do JMS com um modo
de entrega persistente.

(CESPE – 2010 – SERPRO - Analista de Sistemas) A API JMS é usada para a


construção de sistemas de mensageria na plataforma JEE, sendo algumas de
suas características relevantes a assincronia das mensagens, a arquitetura peer-
to-peer e o suporte ao estilo de mensageria publish-subscribe.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JNDI

(CESPE - 2006 – DATAPREV – Analista de Sistemas) O uso de contextos de nomes


JNDI se faz necessário junto aos módulos Web Container e EJB Container.

(CESPE - – MEC – Analista de Sistemas) JNDI (Java Naming and Directory


Interface) é um framework de desenvolvimento Java que unifica e padroniza
classes e interfaces para acesso a diretórios baseados em LDAP.

(CESPE - 2 – TJ/AL – Analista de Sistemas – C) No ambiente de nomeação


JNDI, sempre que um componente é personalizado, é necessário acessar ou
alterar o código-fonte do componente.

(CESPE - 2012 – TJ/ – Analista de Sistemas) JNDI, parte do projeto de JSF,


utiliza XHTML como tecnologia de apresentação dos dados, possibilitando a
separação entre as camadas de negócio e de controle.

(CESPE - 2013 – CPRM – Analista de Sistemas) Java Naming and Directory


Interface (JNDI), na JEE7, permite que componentes localizem outros
componentes em aplicações distribuídas. Assim, é possível que um servlet
execute métodos remotos que estejam em outro recurso.

(CESPE - 2013 – TRE/MS – Analista de Sistemas) A arquitetura JNDI consiste em


uma application programming interface (API) e uma service provider interface
(SPI), em que as aplicações Java utilizam a JNDI SPI para acessar os serviços de
diretórios tais como LDAP e NDS que são, nessa arquitetura, diretamente ligados
16712855225

a JNDI API.

(CESGRANRIO - 2005 – CASA DA MOEDA – Analista de Sistemas – C) As


aplicações J2EE podem utilizar a API JNDI para acessar serviços de nomeação e
diretório como LDAP e NIS.

(FGV - – MEC – Analista de Sistemas – B) O JNDI é a API J2EE que fornece


uma interface padrão para localizar usuários, máquinas, objetos, redes e serviços.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JTA
(CESPE - 2010 – TRE/BA - Analista de Sistemas) Em um sistema de transação
distribuído, o Java Transaction API (JTA) permite especificar um conjunto de
interfaces entre o gerenciador de transações e as partes envolvidas.

(CESPE - 2010 – TRE/BA - Analista de Sistemas) JTA pode ser utilizado para o
gerenciamento de transações distribuídas.

(FGV - – FGV – Analista de Sistemas – B) JTA é uma API da linguagem Java


que permite a componentes baseados em Java/J2EE criar, enviar, receber e ler
mensagens.

UMARC - – BDMG – Analista de Sistemas – JTA é uma API que


padroniza o tratamento de transações dentro de uma aplicação Java.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JSTL
(CESPE - 6 – SGA/AC - Analista de Sistemas - I As tags <if>, <switch>,
<while> e <forEach> são tags padronizadas pela JSTL.

(CESPE - – MPE/AM - Analista de Sistemas) A biblioteca JSTL (JavaServer


Pages Standard Tag Library) reúne funcionalidades comuns de aplicações web,
provendo suporte para tarefas estruturais como iterações e condições, etiquetas
(tags) para manipular documentos XML, etiquetas para internacionalização e
etiquetas SQL.

(CESPE - 1 – INMETRO - Analista de Sistemas - B As tags define, inputText,


commandButton e message pertencem ao JSP Standard Tag Library 1.0 (JSTL 1.0).

(FCC - 2010 – TRT/8ª REGIÃO - Analista de Sistemas) A biblioteca de tags padrão


do Java Server Pages (JSTL) é uma coleção de tags padronizadas para tarefas
comuns a muitas aplicações JSP. Estas tags estão divididas em 5 áreas funcionais:

a) Web, XML, Banco de Dados, Internacionalização (I18n) e Funções.


b) Core, XML, Banco de Dados, Internacionalização (l18n) e Funções.
c) Core, Estatística, Banco de Dados, Internacionalização (I18n) e Funções.
d) Web, Matemática, Banco de Dados, Internacionalização (I18n) e Funções.
e) Core, Web, Matemática, Internacionalização (I18n) e Funções.

(CESPE - 9 – CEHAP/PB - Analista de Sistemas) Assinale a opção incorreta


acerca de JSTL.
16712855225

a) O JSTL não possui suporte nativo a SQL. Para tanto, é utilizada em conjunto
com a biblioteca nativa SQL do J2EE.

b) Uma página JSTL pode ser definida como uma página JSP contendo um
conjunto de tags JSTLs.

c) Em uma página JSTL, cada tag realiza determinado tipo de processamento.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

d) O JSTL permite ao programador escrever páginas JSPs sem necessariamente


utilizar códigos Java, facilitando a integração entre webdesigners e
programadores.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SPRING

1 2 3 4 5 6 7 8 9 10
C C D B D

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


STRUTS

1 2 3 4 5 6 7 8 9 10
C C C C C C C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JMS

1 2 3 4 5 6 7 8 9 10
A E C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JNDI

1 2 3 4 5 6 7 8 9 10
C E E E C 16712855225

E C C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JTA
1 2 3 4 5 6 7 8 9 10
C C E C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 51


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 06

JSTL

1 2 3 4 5 6 7 8 9 10
C C E B A

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 51


Aula 07

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

AULA 07

SUMÁRIO PÁGINA
Apresentação 01
- HTML 02
- CSS (Cascading Style Sheets) 63
Lista de Exercícios Comentados 101
Gabarito 127

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML

HTML (HyperText Markup Language) é uma linguagem de


marcação inventada na década de noventa por Tim
Berners-Lee. A finalidade inicial era tornar possível o
acesso e a troca de informações e de documentação de
pesquisas entre cientistas de diferentes universidades. O
projeto tornou-se um sucesso jamais imaginado pelo
autor. Ao inventar o HTML, ele lançou as fundações da
Internet tal como a conhecemos atualmente. Sinistro, não?

A World Wide Web (WWW) é composta primariamente de Documentos HTML


transmitidos de um servidor web para outro servidor web, utilizando primariamente
o protocolo HTTP. Pois é, ela roda no servidor e pode ser acessado por meio de sua
URL! Outra informação importante é que, diferentemente do XHTML, o HTML não
é case-sensitive – logo, ele não diferencia maiúsculas e minúsculas.

Essa linguagem possibilita apresentar informações na Internet. Aquilo que você vê


quando acessa uma página é a interpretação que seu navegador faz do código
HTML. Professor, o que significa a sigla? Bem, Hyper é o oposto de linear – ou seja,
você pode ir (por meio de hyperlinks) a qualquer lugar da internet! O que é Text? É
texto – a princípio, a linguagem foi feita para a visualização de textos.

16712855225

Logo, o hypertext é um texto que contém links! Sempre que você clicar em uma
palavra que te leve a uma nova página, aquilo era um hipertexto. O que é Markup
Language? É uma linguagem de marcação1 (ou tags) utilizada para fazer com que o

1
Sendo bastante purista, HTML é uma linguagem de marcação e, não, programação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

texto fique melhor organizado dentro da página. Ademais, ela pode estruturar
textos, imagens, links, tabelas, listas, entre outros.

Em outras palavras, HTML é uma linguagem de marcação para visualização de


textos (entre outros) e que permite ir a qualquer lugar da internet. Professor, o que
são essas tags? São rótulos utilizados para informar ao navegador como o site deve
ser apresentado. Elas geralmente vêm em pares, com uma tag de abertura e uma
tag de fechamento (com uma “/”). Vamos ver um exemplo:

<nome da tag> Texto qualquer... </nome da tag>

É importante observar as tags como parênteses, i.e., é recomendável fechá-las


sempre que forem abertas. Além disso, elas podem ser aninhadas! Dessa forma, não
basta que elas sejam fechadas, elas devem ser fechadas na ordem correta. E que
ordem é essa, professor? A tag mais recentemente aberta deve ser a primeira a ser
fechada. Vejamos outro exemplo:

<primeira tag> <segunda tag> Texto qualquer... </segunda tag> </primeira tag>

A estrutura do documento é dividida em duas partes: Cabeça (Head) e Corpo


(Body). No entanto, antes de tudo isso, devemos sempre declarar logo na primeira
linha de código qual tipo de documento o navegador deverá esperar, por meio da
instrução: <!DOCTYPE html>. Atenção: isso não é uma tag – é uma instrução para indicar
ao navegador o tipo de documento que deve renderizar e a versão da linguagem.

IMPORTANTE:

Galera, a função principal da linguagem HTML é estruturar a página, seu esqueleto! Ele é
capaz de manipular alguns elementos e atributos para apresentação, mas essa não é sua
16712855225

função precípua. Para tal, recomenda-se a utilização de Folhas de Estilo, visto que as versões
mais recentes da linguagem têm depreciado diversos desses elementos. Alguns
navegadores ainda oferecem suporte por compatibilidade, mas a tendência é que isso acabe
em um futuro próximo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: CABEÇALHO (HEAD)

Agora, sim! Vamos falar sobre as partes estruturantes do Documento HTML! Galera,
recomenda-se que tudo em nosso documento (exceto o !DOCTYPE) fique entre <html>
</html>. A partir daí, devemos declarar o cabeçalho! O que isso faz, professor? O
Cabeçalho (Head) contém informações sobre o arquivo (Ex: Título – Aquele nome
da página que vemos na barra ou aba do navegador).

<!DOCTYPE html>
<html>
<head>
<title> Estratégia Concursos | Cursos Online para Concursos </title>
</head>
<body>
...
</body>
</html>

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

A partir do HTML5, há apenas duas coisas obrigatórias para que um Documento


HTML seja válido: !DOCTYPE <title>. Pois é, isso é o mínimo necessário para validar
uma página web. No entanto, é altamente recomendável adquirir dois hábitos:
fechar todas as tags abertas; e usar as tags estruturantes <html>, <head> e <body>. Vamos
ver agora quais outros elementos podem ir dentro do <head>:

ELEMENTO DESCRIÇÃO

<title> Especifica o título de um Documento HTML (Janela ou Aba)


<style> Especifica informações de estilo do Documento HTML.
<base> Especifica um endereço base para as URLs do documento.
<link> Especifica um link entre um documento e uma fonte externa.
<meta> Especifica metadados sobre o próprio Documento HTML.
<script> Especifica um script client-side (ex: Javascript).
<noscript> Especifica um conteúdo alternativo para o não-uso de scripts.

Galera, muitas vezes os sites apresentam problemas na codificação do texto, por


conta de acentuação, cedilha, entre outros (Ex: S£ o Paulo). Hoje em dia, a maioria
dos servidores e dos bancos de dados já são configurados com a codificação
correta, mas se esse problema ocorrer, podemos utilizar a tag <meta> com o atributo
charset – há outras soluções, mas essa é a mais recomendada.

 Solução:

<meta charset="utf-8"/>

16712855225

Em pesquisa recente, foi constatado que mais de 80% das páginas web utilizavam
essa codificação. Ela é popular, porque reconhece praticamente todos os sistemas
de escrita utilizados do mundo. Há quem use a codificação ISO-8859-1, por ser mais
performática, mas há menos opções de caracteres. Apesar disso, ele está em
segundo lugar com cerca de 10% das páginas web do mercado atual.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: CORPO (BODY)

Já o Corpo (Body) é o local onde se coloca o conteúdo (Ex: Texto, Imagens, etc),
que será visível na página para o leitor. Vamos colocar dois parágrafos no corpo:

<!DOCTYPE html>
<html>
<head>
<title> Esse será o título da minha página \o/ </title>
</head>
<body>
<p> E aí, Estratégia Concursos! Tudo bacana? </p>
<p> Observem como o arquivo é dividido em Head e Body </p>
</body>
</html>

Professor, e se eu quiser colocar uma citação? Aí, nós podemos utilizar as tags <q> e
</q> – esse nome vem de quotations:

<p> Confúcio disse:


<q> Estudar é polir a pedra preciosa; cultivando o espírito, purificamo-lo.</q>
</p>

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: HEADING TAGS E PARÁGRAFOS

Pessoal, nós podemos inserir parágrafos direto no corpo – como no exemplo acima
–, mas todos estarão no mesmo nível. Para níveis diferentes, usamos Heading Tags:

<!DOCTYPE html>
<html>
<head>
<title> Cabeçalhos e Parágrafos </title>
</head>
<body>
<h1>
Está ficando menor!
</h1>
<h2>
Está ficando menor!
</h2>
<h3>
Está ficando menor!
</h3>
<h4>
Está ficando menor!
</h4>
<h5>
Está ficando menor!
</h5>
<h6>
Está ficando menor!
</h6>
</body>
</html>

As Heading Tags (h1, h2, h3, h4, h5 e h6) são recursos de programação HTML
utilizados para destacar títulos e subtítulos de uma página. h1 é a abreviação do
inglês para Header 1, ou Cabeçalho 1, logo, o mais importante dos Headers.
Conceitualmente, o h1 possui um destaque maior, uma fonte maior, e é geralmente
o elemento de texto mais visível da página – conforme vimos no exemplo abaixo.
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: HIPERLINKS

Nós também podemos colocar parágrafos dentro das heading tags! Enfim... vocês
podem brincar à vontade com isso em compiladores online. Agora vamos falar de
hiperlinks! Todo mundo sabe o que é, né?! É aquele link que envia o usuário para
outra parte do próprio website ou para outro website. Vamos ver como é possível
fazer isso? Utilizamos a tag <a>:

<a href="http://www.estrategiaconcursos.com.br">Este site te fará passar!</a>

Essa tag define um hiperlink que é utilizado para conectar uma página a outra. Ele
tem vários atributos, mas o mais comum e o utilizado é o atributo href, que recebe
um valor (website ao qual o usuário será redirecionado). Podemos também colocar
o nome do link! Observem que o atributo href diz o endereço, mas o nome do link
é o conteúdo da tag <a>. Vejamos como fica:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: IMAGENS

Vamos aprender agora como inserir uma imagem e, para tal, podemos utilizar a tag
<img>. Ela é um pouquinho diferente das demais por duas razões: (1) o conteúdo não
virá entre as tags, virá no atributo src – ele conterá o endereço para obter a imagem;
(2) não há tag de fechamento propriamente dita, apenas />. Vejam o exemplo abaixo
de o código para inserir uma imagem linda ao seu website:

<img src="http://www.capaparafacebook.com.br/wp-content/uploads/2012/11/flamengo2.jpg" />

16712855225

Vocês já sabem como criar uma imagem e um link! Professor, como criar uma
imagem que é um link? Basta colocar a imagem como conteúdo de um hiperlink:

<a href="http://www.flamengodanacao.com.br">
<img src=http://www.capaparafacebook.com.br/wp-content/uploads/2012/11/flamengo2.jpg />
</a>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: LISTAS ORDENADAS E DESORDENADAS

Agora vamos ver como criamos listas ordenadas! Que é isso, professor? É
simplesmente uma lista sequencial. Para tal, podemos utilizar a tag <ol> – responsável
por criar uma Ordered List. Dentro, podemos inserir itens com uma tag <li> –
responsável por criar um st Item. No exemplo abaixo, criei uma lista dos melhores
filmes do David Fincher:

<h1>Melhores filmes de David Fincher</h1>


<ol>
<li>Fight Club</li>
<li>Seven</li>
<li>Social Network</li>
<li>Zodiac</li>
<li>Gone Girl</li>
</ol>

Percebam que a lista acima está ordenada (1 a 5). No entanto, se eu mudar a tag
<ol> para <ul> (que significa Unordered List – Lista Desordenada), vejam o resultado
abaixo! Em vez de números por item, aparecem bullets por item. Logo, quando
vocês desejarem uma lista com números, utilizem <ol>; quando vocês desejarem
16712855225

bullets, utilizem <ul>. Lembrando também que é possível combinar ambos!

<h1>Melhores filmes de David Fincher</h1>


<ul>
<li>Fight Club</li>
<li>Seven</li>
<li>Social Network</li>
<li>Zodiac</li>
<li>Gone Girl</li>
</ul>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Professor, como eu faço para criar uma lista drop-down? Para isso, utilizamos a tag
<select> em conjunto com a tag <option>. Vamos ver como se faz:

<body>
Selecione o curso que você deseja comprar:
<select>
<option value="RFB">BACEN</option>
<option value="TCU">TCE/CE</option>
<option value="STN">CNMP</option>
<option value="STN">TCU</option>
<option value="STN">MPOG</option>
</select>
</body>

Abaixo é possível ver os possíveis atributos das tags <select> e <option>.


16712855225

ATRIBUTO DESCRIÇÃO <SELECT>

autofocos Especifica que a lista obtenha foco automaticamente quando carregada a página.
disabled Especifica que uma função deve ser desabilitada.
form Define uma ou mais formas de selecionar campos.
multiple Especifica que múltiplas opções podem ser selecionadas de uma vez.
name Define um nome para a lista drop-down.
required Especifica que o usuário é obrigado a selecionar um valor antes de submeter.
size Define um número de opções visíveis em uma lista drop-down.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

ATRIBUTO DESCRIÇÃO <OPTION>

disabled Especifica que uma opção deve ser desabilitada.


label Especifica um rótulo (label) menor para uma opção.
selected Especifica que uma opção deve ser pre-selecionada quando a página carrega.
value Especifica o valor a ser enviado ao servidor.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: COMENTÁRIOS

Maneiro! Agora vamos ver como eu posso comentar nosso código. Comentários
começam com <!-- e terminam com -->. Eles não serão exibidos nos navegadores, é
somente para organizar e explicar o código. Vamos ver um exemplo:

<p>Mensagem 1!</p>
<p>Mensagem 2!</p>

<p>Mensagem 1!</p>
<!-- <p>Mensagem 2!</p> -->

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: ESTILIZAÇÕES

Galera, todas as tags têm um estilo padronizado (fundo branco e texto preto). Agora
se nós quisermos alterar essa configuração, podemos utilizar o atributo style com a
sintaxe: style = “propriedade:valor”.O que nós podemos fazer, professor? Cara, nós
podemos modificar a cor, tamanho, fundo, alinhamento, entre outros. Vamos ver
como faz para modificar o tamanho da fonte:

<p style="font-size: 10px"> Texto com fonte 10!</p>


<p style="font-size: 20px"> Texto com fonte 20!</p>
<p style="font-size: 40px"> Texto com fonte 40!</p>

<h1 style="color:red">Cabeçalho Vermelho</h1>


<h1 style="color:blue">Cabeçalho Azul</h1>
<h1 style="color:green">Cabeçalho Verde</h1>

16712855225

<h1 style="text-align: center">Estou no centro!</h1>


<h1 style="text-align: right">Estou na direita!</h1>
<h1 style="text-align: left">Estou na esquerda!</h1>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

<h1 style="font-family: Arial">Fonte Arial</h1>


<h1 style="font-family: Courier">Fonte Courier</h1>
<h1 style="font-family: Consolas">Fonte Consolas</h1>

<h1 style="background-color: red"->Cabeçalho vermelho</h1>


<h1 style="background-color: blue">Cabeçalho azul</h1>
<h1 style="background-color: green">Cabeçalho verde</h1>

Professor, e se eu quiser combinar essas propriedades? Basta separá-las por ponto-


e-vírgula, como é apresentado abaixo:
16712855225

<p style="font-size:30px; color: orange; font-family: consolas; background-color:


green; text-align: center">Esse parágrafo combina as propriedades.</p>

Professor, se eu quiser colocar alguma palavra em negrito ou itálico? Essa estilização


é bem mais simples – não precisamos utilizar o atributo style! Há dois exemplos:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
<p><strong>Texto em negrito</strong></p>
<p><em>Texto em itálico</em></p>
<p><strong>Texto</strong><em> todo</em> <strong><em> misturado</em></strong></p>

Galera, existe uma maneira elegante de manipular o estilo de partes menores de


uma página! Podemos utilizar as tags <span> e </span>. Vejamos:

<p> <span style="color:blue"> Texto </span> todo <span style = "color : red" >
misturado </span></p>

Lembremos que ainda é possível utilizar a tag <b> para negritar um texto (bold).
No entanto, ela deve ser utilizada como último recurso possível.

<p> Texto <b> em negrito! </b> </p>

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: TABELAS

Galera, tabelas são extremamente úteis! Elas são utilizadas para armazenar dados
tabulares, de forma que fiquem mais fáceis de ler. Em outras palavras, ela deve ser
usada quando desejamos apresentar informações em uma tabela com linhas e
colunas. Para tal, devemos utilizar a tag <table> para criar a tabela; a tag <tr> para criar
as linhas (Table Row) e <td> para criar colunas (Table Data).

Na verdade, uma tabela é apenas um monte de informações dispostas em linhas e


colunas. Vamos ver como criar uma tabela com borda, quatro linhas e duas colunas:

<table border="1px">
<tr>
<td>Professor</td>
<td>Diego Carvalho</td>
</tr>
<tr>
<td Área</td>
<td>Tecnologia da Informação</td>
</tr>
<tr>
<td>Cursos</td>
<td>Engenharia de Software</td>
</tr>
<tr>
<td>Alunos</td>
<td>150</td>
</tr>
</table>

16712855225

Essa tabela é meio tosca, né? Vamos organizar um pouco melhor nosso desenho
utilizando as tags <thead> <tbody> <tfoot>, que virão dentro de <table>. O que é isso,
professor? Cara, nós podemos dividir uma tabela em Cabeça (thead), Corpo (tbody) e
Pé (tfoot)! Com um detalhe: podemos utilizar <th> em vez de <td> – ele é sempre
negrito e centralizado. Entendido? Vamos ver, então:

<table border="1px">
<thead>
<tr>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
<th>Gastos</th>
<th>Descrição</th>
</tr>
</thead>
<tbody>
<tr>
<td>Aluguel</td>
<td>R$2.000,00</td>
</tr>
<tr>
<td>Condomínio</td>
<td>R$500,00</td>
</tr>
<tr>
<td>IPTU</td>
<td>R$750,00</td>
</tr>
<tr>
<td>Energia</td>
<td>R$250,00</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>Total</td>
<td>R$3.500,00</td>
</tr>
</tfoot>
</table>

16712855225

Professor, e se eu quiser colocar um título na minha tabela? Para isso, utilizamos o


atributo colspan (com a quantidade de colunas), responsável por mesclar células!
Vejam na imagem abaixo que o código mescla duas colunas com o nome de
“Tabela de Despesas” e que isso se encontra dentro da tag <thead>, responsável por
definir o título da tabela. Perfeito?

<thead>
<tr>
<th colspan="2"> Tabela de Despesas </th>
</tr>
</thead>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Vejam na tabela abaixo (sem trocadilhos) os principais elementos que podem fazer
parte da estrutura de uma tabela:

ELEMENTO DESCRIÇÃO

<table> Define uma tabela.


<th> Define uma célula de cabeçalho em uma tabela.
<tr> Define uma linha em uma tabela.
<td> Define uma célula em uma tabela.
<caption> Define uma descrição de tabela.
<colgroup> Define um grupo de colunas em uma tabela para formatação.
<col> Define propriedades de colunas para cada coluna <colgroup>.
<thead> Agrupa o conteúdo da primeira linha de uma tabela.
<tbody> Agrupa o conteúdo do corpo de uma tabela.
<tfoot> Agrupa o conteúdo da última linha de uma tabela.
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: FORMULÁRIOS

Nem todo mundo gosta de formulários, mas o HTML5 traz grandes melhorias, tanto
para os desenvolvedores que criam formulários quanto para os usuários que os
preenchem. Com os novos elementos, atributos e tipos de entrada de formulário, a
validação baseada no navegador, as técnicas de estilo CSS3 e o objeto FormData, ficou
mais fácil e, espera-se, mais agradável criar formulários.

Formulários são definidos por meio do elemento <form></form>. Vamos ver alguns
atributos do elemento de formulários:

ATRIBUTO DESCRIÇÃO

accept- Especifica a codificação de caracteres que serão utilizadas para a submissão


charset dos formulários.
Especifica aonde enviar os dados do formulário quando o formulário for
action
submetido.
Especifica se o formulário deve ter a função de auto-completar ou não.
autocomplete
Especifica como os dados do formulário devem ser codificados quando
enctype
submetidos ao servidor (apenas quando method = “post”);
Especifica o Método HTTP que será utilizado no envio de dados do formulário
method
(GET ou POST).
Especifica o nome de um formulário.
name
Especifica que o formulário não deve ser validado quando submetido.
novalidate
16712855225

Especifica aonde exibir a resposta que é recebida após submeter o


target
formulário.

A linguagem HTML5 apresenta um conjunto de novos valores possíveis para o


atributo type do elemento <input>, com objetivo de definir melhor os tipos de dados
de entrada nos campos dos formulários. Quando visualizados em um navegador
sem suporte, estes tipos de entrada são convertidos em entrada de texto. Vejamos
esses novos valores:

VALOR DESCRIÇÃO

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Usado para inserir um número de telefone.


tel
Solicita aos usuários que digitem o texto pelo qual desejam buscar.
search
Usado para inserir um URL único.
url
Usado para inserir um único endereço de e-mail ou uma lista de endereços de
email
e-mail.
Usado para inserir data e hora com o fuso horário em UTC.
datetime
Usado para inserir uma data sem fuso horário.
date
Usado para inserir uma data com ano e mês, sem fuso horário.
month
Para inserir uma data formada por um número de ano e um número de semana,
week
mas sem fuso horário.
Usado para inserir um valor de horário com hora, minuto, segundos e fração de
time
segundos, mas sem fuso horário.
datetime- Para inserir data e hora sem fuso horário.
local
Para entrada numérica.
number
Para entrada numérica, mas ao contrário de number, o valor real não é
range>
importante.
Usado para escolher a cor em um controle de cores.
color
16712855225

Há, ainda, vários novos atributos para o elemento de entrada de dados (<input .
Vejamos um pouco mais sobre eles:

ATRIBUTO DESCRIÇÃO

Foca a entrada no elemento quando a página é carregada.


autofocus
Dá ao usuário a dica sobre qual tipo de dado inserir.
placeholder

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Especifica um ou mais formulários aos quais o elemento de entrada


form
pertence.
Um atributo boleano que significa que o elemento é obrigatório.
required
Especifica que um campo não deve ser preenchido automaticamente ou pré-
autocomplete preenchido pelo navegador de acordo com as entradas anteriores de um
usuário.
Usado para validar o valor de um elemento com relação a uma expressão
pattern
regular.
Usado para substituir o atributo action no elemento de formulário.
formaction
Usado para substituir o atributo enctype no elemento de formulário.
formenctype
Usado para substituir o atributo method no elemento de formulário.
formmethod
Usado para substituir o atributo novalidate no elemento de formulário.
formnovalidate
Usado para substituir o atributo target no elemento de formulário.
formtarget

Pessoal, validar formulários sempre demandou algum tempo e dependências como


bibliotecas JavaScript. Com HTML5, podemos passar essa responsabilidade para o
navegador, ganhando tempo de desenvolvimento e economizando no peso da
página. Olha que beleza: agora podemos utilizar o próprio HTML para validar
formulários! Isso é de chorar...

HTML5 inclui um mecanismo bastante sólido na validação de formulários com base


nos atributos da tag input: type, pattern e require. Graças a esses novos atributos, você
16712855225

pode delegar algumas funções de verificação de dados para o navegador. O


primeiro atributo indica o tipo de controle de entrada de dados como o popular
<input type=”text”> para manipulação de dados de texto simples.

Alguns controles de formulários herdam sistemas de validação sem a necessidade


de escrever qualquer código. Por exemplo, <input type="email"> valida o campo para
garantir que o dado digitado seja de fato um endereço de e-mail válido. Se o campo
tiver um dado inválido, o formulário não vai poder ser submetido até que esse erro
seja corrigido. Vejam a imagem abaixo:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Há também o <input type="number">, <input type="url"> e <input type="tel"> para validar


números, URLs e telefones respectivamente. Os formatos de números de telefone
variam de país para país devido à inconsistência nos tamanhos e formatos. Como
resultado, a especificação não define um algoritmo para validá-los, portanto não é
suportado nos navegadores web no momento da escrita.

Já o atributo pattern especifica um formato (na forma de expressão regular do


JavaScript) em que o valor do campo é testado. Expressões regulares são uma
linguagem usada para analisar e manipular texto. Elas são frequentemente utilizadas
para executar operações complexas de search-and-replace, e para garantir que os
dados de texto estão corretos.

Hoje em dia, as expressões regulares estão incluídas na maioria das linguagens de


programação, assim como em muitas linguagens de script, editores, aplicações,
bancos de dados e ferramentas de linha de comando. Expressões regulares (RegEX)
oferecem um poderoso, conciso e flexível meio para encontrar string ou textos com
caracteres particulares, palavras ou padrões de caracteres.

Ao passarmos uma string RegEX como valor para o atributo pattern, conseguimos
definir qual valor é aceitável pelo campo do formulário e também informar ao
usuário de possíveis erros. Vamos pensar nos números de telefone no Brasil – ele
segue o formato XX- -XXXX (Ex: 61- - . A RegEX correspondente
poderia ser: ^\d{2}-\d{4}-\d{4}$. 16712855225

<form>
<h2>Validação de Telefone</h2>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
<label for="phonenum">Telefone (Formato: xx-xxxx-xxxx):</label><br/>
<input id="phonenum" type="tel" pattern="^\d{2}-\d{4}-\d{4}$" required >
<input type="submit" value="Enviar">
</form>

Por fim, o atributo required é um booleano utilizado para indicar que um determinado
campo de formulário é obrigatório para o envio do mesmo. Ao adicionar esse
atributo a um campo de formulário, o navegador obriga o usuário a inserir dados
naquele campo antes de enviar o formulário. Essa validação substitui a validação
básica de formulário implementada com JavaScript.

<form>
<h2>Campo Obrigatório</h2>
<input name="my_name" required="" type="text">
<input type="submit" value="Enviar">
</form>

O campo acima é obrigatório, logo o HTML não permitirá que você submeta um
formulário sem inserir valores nesse campo. Nem todos os navegadores suportam
HTML5 e nem toda entrada de texto enviada para seu script virá do formulário. Isso
significa que validação do lado do servidor também deve estar antes do envio dos
dados para o processamento do servidor. Bacana?

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

HTML: NOVIDADES

Desde 1999, aguardava-se uma nova versão da linguagem – imaginem só tudo que
saiu, mudou ou surgiu nesses mais de dez anos. Pois é, há melhorias significativas
trazidas por novas funcionalidades de semântica, acessibilidade, tratamento de
exceção, independência de plataforma, além de melhorar o suporte aos mais
recentes conteúdos multimídias.

HTML é definido de tal forma que seja reversamente compatível com a maneira em
que agentes de usuário (Ex: Browser) manipulam conteúdo. Para manter a
linguagem relativamente simples para os desenvolvedores web, vários elementos e
atributos mais velhos não estão incluídos na nova versão, tais como elementos de
apresentação/formatação, que são melhor tratados utilizando CSS.

No entanto, os agentes de usuário sempre terão suporte a esses elementos e


atributos mais antigos. Comecemos vendo os elementos obsoletos, i.e., aqueles que
não devem ser utilizados por desenvolvedores web, mas que agentes de usuário
ainda terão que oferecer suporte. Comecemos pelos elementos que não estão mais
na linguagem por seu efeito era puramente de apresentação:

ELEMENTO DESCRIÇÃO

Esse elemento era utilizado para especificar a cor e o tamanho da fonte


<basefont> principal de uma página – recomenda-se utilizar elementos da folha de estilo.

Esse elemento era utilizado para aumentar o tamanho de uma parte de um texto
<big> – recomenda-se utilizar elementos da folha de estilo.
16712855225

Esse elemento era utilizado para centralizar textos – recomenda-se utilizar


<center> elementos da folha de estilo.

Esse elemento era utilizado para especificar mudanças inline de uma fonte (Ex:
<font> parágrafo ou poucas palavras) – recomenda-se utilizar elementos da folha de
estilo.
Esse elemento era utilizado para tachar um texto – recomenda-se utilizar
<strike> elementos da folha de estilo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Esse elemento era utilizado para mudar a fonte para teletipo –


<tt> recomenda-se utilizar elementos da folha de estilo.

Temos também os elementos que foram retirados porque causavam sérios


problemas de usabilidade e acessibilidade:

ELEMENTO DESCRIÇÃO

Esse elemento era utilizado para especificar um frame dentro de um elemento


<frame>
<frameset> - foi retirado por causar problemas de usabilidade e acessibilidade.
Esse elemento era utilizado para especificar um ou mais elementos <frame> -
<frameset>
foi retirado por causar problemas de usabilidade e acessibilidade.
Esse elemento era utilizado por navegadores que não suportavam frames - foi
<noframes>
retirado por causar problemas de usabilidade e acessibilidade.

Temos, aqueles elementos que foram retirados porque não eram muito utilizados,
criavam confusão ou sua função podia ser exercida por outros elementos:

ELEMENTO DESCRIÇÃO

Esse elemento era utilizado para especificar criar acrônimos ou siglas – foi
<acronym>
substituído pelo elemento <abbr>.
Esse elemento era utilizado para embarcar applets em páginas HTML – foi
<applet>
substituído pelo elemento <embed> ou <object>.
Esse elemento era utilizado para criar um campo de texto em um documento –
<isindex>
16712855225

pode ser substituído por controles de formulários.


Esse elemento era utilizada para listar itens – foi substituído pelo elemento
<dir>
<ul>.

Bacana! Agora vamos ver os novos elementos. Galera, foram quase trinta novos
elementos. Não acredito que vale a pena entrar em detalhes de cada um.

ELEMENTO DESCRIÇÃO

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Esse elemento define um artigo em um documento, como uma postagem de um


<article> fórum, comentários, texto de um blog, entre outros.

Esse elemento define um conteúdo à parte do texto principal da página web


<aside> (apesar de estar relacionado a ela) – geralmente trata-se de uma barra lateral
(sidebar).
Esse elemento define sons, tais como música e outros conteúdos sonoros.
<audio>

Esse elemento (Bi-Diretional Isolation) isola uma parte do texto que pode ser
<bdi> formatada em uma direção diferente de outros textos – lembrem-se de nomes
árabes escritos invertidos.
Esse elemento é utilizado para desenhar formas dinamicamente via script
<canvas> (geralmente JavaScript), tais como gráficos e jogos.

Esse elemento especifica uma lista de opções pré-definidas para o elemento


<datalist> <input>.

Esse elemento especifica detalhes adicionais que o usuário pode visualizar ou


<details> esconder da forma que quiser.

Esse elemento define uma caixa de diálogo (Dialog Box) ou janela. Ele torna mais
<dialog> fácil criar pop-ups e janelas modais em uma página web.

Esse elemento define um recipiente para uma aplicação externa ou conteúdo


<embed> interativo (plug-in).

Esse elemento define uma legenda para o elemento <figure>.


16712855225

<figcaption>

Esse elemento especifica uma foto, ilustração, diagramas – imagens em geral.


<figure>

Esse elemento define um rodapé para um documento ou uma seção.


<footer>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Esse elemento especifica um recipiente para conteúdos introdutórios ou um


<header> conjunto de itens de navegação. Trata-se de um cabeçalho – não confundam
com <head>.
Esse elemento especifica um campo gerador de pares de chave utilizados em
<keygen> formulários.

Esse elemento especifica o conteúdo principal de um documento – deve haver


<main> apenas um por documento.

Esse elemento define um texto marcado ou destacado.


<mark>

Esse elemento define um item de comando/menu que o usuário invoca de um


<menuitem> menu pop-up.

Esse elemento define uma medida escalar dentro de um intervalo conhecido ou


<meter> um valor fracionário – como se fosse um gráfico de barras (Ex: Uso de disco).

Esse elemento define um conjunto de links de navegação em um documento.


<nav>

Esse elemento representa o resultado de um cálculo (executado por um script,


<output> por exemplo).

Esse elemento representa o progresso de uma tarefa ou atividade qualquer.


<progress>

Esse elemento define seções em um documento, tais como capítulos,


16712855225

<section> cabeçalhos, rodapés, ou qualquer outra seção de um documento.

Esse elemento define códigos para <video> e <audio>,


<source>

Esse elemento é utilizado para desenhar formas dinamicamente via SVG.


<svg> (Imagens vetorizadas).

Esse elemento define o que deve ser mostrado nos navegadores que não
<rp>
suportam anotações Ruby – entre parêntesis.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Esse elemento define uma explicação ou pronúncia de caracteres (para


<rt> tipografia asiática oriental – Ex: ) em uma anotação Ruby.

Esse elemento especifica uma anotação Ruby.


<ruby>

Esse elemento define um cabeçalho visível para o elemento <details>.


<summary>

Esse elemento é utilizado para declarar fragmentos de HTML que podem ser
<template> clonados e inseridos em um documento por meio de um script.

Esse elemento define diversos formatos de data/hora.


<time>

Esse elemento especifica faixas de texto para elementos de mídia (<audio> e


<track> <video>).

Esse elemento especifica um vídeo, tais como clipes de filmes e outros


<video> conteúdos de vídeo.

Esse elemento permite marcar sugestões de quebra de linha em locais


<wbr> específicos ou palavras longas, sem perder a semântica da palavra no texto.

Pessoal, o que eu quero que vocês guardem dessas novidades? O HTML foi, por
muitos anos, utilizado tanto para estruturação quanto para apresentação de páginas
16712855225

web. Essa nova versão buscou retirar conteúdos de apresentação e deixá-los para
folhas de estilo e criou novos elementos também para deixar ainda mais claro os
elementos de estrutura de uma página web (ajudando acessibilidade e usabilidade).

Observem que são muitos novos elementos – e eu nem falei dos elementos
modificados; dos atributos novos; dos atributos modificados; entre outras
novidades. De todo modo, vocês viram a inclusão de elementos de áudio/vídeo
para reprodução multimídia de forma padronizada, oferecendo suporte nativo sem
a necessidade de mecanismos externos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Além disso, a linguagem oferece melhor suporte para armazenamento local,


oferecendo dois novos objetos para armazenar dados localmente (sessionStorage e
localStorage). Observem que há total suporte ao CSS3, oferecendo mais liberdade à
criatividade dos usuários e podendo receber os mais variados tipos de estilo. Há,
também, um aprimoramento do uso off-line por meio do Application Cache.

Além disso, fornece maior interatividade sem a necessidade de plug-ins. Galera,


foram mais de dez anos de desenvolvimento dessa nova versão. É muito recente,
muitos ainda estão descobrindo as vantagens e desvantagens da linguagem. São
muitos elementos e atributos. Eu recomendo entrar no site da W3Schools para ver
como funciona efetivamente cada elemento. Não vale a pena estender aqui!

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(CESPE - 2012 - TRE-RJ - Técnico Judiciário - Programação de Sistemas) HTML


(hypertext markup language) é uma linguagem de programação, atualmente na
versão 5, muito utilizada para ambientes desktop.

Comentários:

A World Wide Web (WWW) é composta primariamente de Documentos HTML


transmitidos de um servidor web para outro servidor web, utilizando primariamente
o protocolo HTTP. Pois é, ela roda no servidor e pode ser acessado por meio de sua
URL! Outra informação importante é que, diferentemente do XHTML, o HTML não é
case-sensitive – logo, ele não diferencia maiúsculas e minúsculas.

Conforme vimos em aula, elas são muito utilizadas em ambiente servidor! Além
disso, sendo bem purista, HTML é uma linguagem de marcação e, não,
programação.

Gabarito: E

(CESPE - 2010 - BRB – Analista de Sistemas A linguagem HTML é utilizada para


formatar o conteúdo de uma página da Internet e pode ser editada com o uso
de qualquer editor de texto.

Comentários: 16712855225

Perfeito! Você pode editar uma página no Notepad, por exemplo!

Gabarito: C

(CESPE - 2013 – STF – Analista de Sistemas HTML5 é uma linguagem


multiplataforma que permitiu o desenvolvimento de aplicações web executadas
off-line e incorporou novos elementos de conteúdo específico, como <article>,
<footer>, <nav> e <section>.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

ELEMENTO DESCRIÇÃO

Esse elemento define um artigo em um documento, como uma postagem de um


<article>
fórum, comentários, texto de um blog, entre outros.
Esse elemento define um rodapé para um documento ou uma seção.
<footer>
Esse elemento define um conjunto de links de navegação em um documento.
<nav>
Esse elemento define seções em um documento, tais como capítulos,
<section>
cabeçalhos, rodapés, ou qualquer outra seção de um documento.

Conforme vimos em aula, todos esses são novos elementos.

Gabarito: C

(CESPE - 2013 – FMP/RS – Analista de Sistemas A linguagem HTML em sua


versão 5 apresenta diversas novas características em relação às versões
anteriores dando uma maior potencialidade à linguagem. Dentre as
características abaixo qual delas NÃO é advinda da proposta de HTML5?

a) Implementação padrão em todos os browsers e com funcionalidade também


padrão e consistente em todos.

b) Define uma forma padrão de incorporar video e áudio.

c) Introdução de diversas APIs, entre elas a API Canvas que permite criar gráficos,
16712855225

desenhos, jogos e aplicações web.

d) Fornece maior interatividade sem a necessidade de Plugins.

e) Define novos tipos para o atributo type do comando INPUT usados em


formulários, tais como data/hora, números, autofocus e faixa de valores, entre
outros.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

ELEMENTO DESCRIÇÃO

Esse elemento é utilizado para desenhar formas dinamicamente via script


<canvas>
(geralmente JavaScript), tais como gráficos e jogos.

Observem que são muitos novos elementos – e eu nem falei dos elementos
modificados; dos atributos novos; dos atributos modificados; entre outras novidades.
De todo modo, vocês viram a inclusão de elementos de áudio/vídeo para reprodução
multimídia de forma padronizada, oferecendo suporte nativo sem a necessidade de
mecanismos externos.

Além disso, fornece maior interatividade sem a necessidade de plug-ins. Galera, foram
mais de dez anos de desenvolvimento dessa nova versão. É muito recente, muitos
ainda estão descobrindo as vantagens e desvantagens da linguagem. São muitos
elementos, atributos e tipos. Eu recomendo entrar no site da W3Schools para ver
como funciona efetivamente cada elemento. Não vale a pena estender aqui!

A linguagem HTML5 apresenta um conjunto de novos valores possíveis para o


atributo type do elemento <input>, com objetivo de definir melhor os tipos de dados de
entrada nos campos dos formulários. Quando visualizados em um navegador sem
suporte, estes tipos de entrada são convertidos em entrada de texto. Vejamos esses
novos valores:

Conforme vimos em aula, todos os itens tratam do HTML5 – com exceção do


primeiro item, visto que isso já ocorria em outras versões. Há outro problema na
questão: autofocos é um novo atributo do elemento <input> e, não, um tipo! A
questão deveria ter sido anulada, mas não foi :[

16712855225

Gabarito: A

(CESPE - 2012 – UFBA – Analista de Sistemas O trecho de código HTML — <a


url=“http://www.ufba.br”>UFBA — permite criar um link no site.

Comentários:

Nós também podemos colocar parágrafos dentro das heading tags! Enfim... vocês
podem brincar à vontade com isso em compiladores online. Agora vamos falar de
hiperlinks! Todo mundo sabe o que é, né?! É aquele link que envia o usuário para
outra parte do próprio website ou para outro website. Vamos ver como é possível
fazer isso? Utilizamos a tag <a>:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

<a href="http://www.estrategiaconcursos.com.br">Este site te fará passar!</a>

Essa tag define um hiperlink que é utilizado para conectar uma página a outra. Ele
tem vários atributos, mas o mais comum e o utilizado é o atributo href, que recebe
um valor (website ao qual o usuário será redirecionado). Podemos também colocar o
nome do link! Observem que o atributo href diz o endereço, mas o nome do link é o
conteúdo da tag <a>. Vejamos como fica:

Conforme vimos em aula, a sintaxe está incorreta. Deve-se utilizar o atributo href!

Gabarito: E

(CESPE - 2014 – ANTAQ – Analista de Sistemas Alguns elementos do HTML5,


tais como o center e o font, são considerados obsoletos por serem utilizados
meramente para formatação, função que pode ser realizada por meio de CSS.

Comentários:

ELEMENTO DESCRIÇÃO

Esse elemento era utilizado para especificar mudanças inline de uma fonte (Ex:
<font> parágrafo ou poucas palavras) – recomenda-se utilizar elementos da folha de
estilo.
Esse elemento era utilizado para centralizar textos – recomenda-se utilizar
<center> elementos da folha de estilo.

16712855225

HTML é definido de tal forma que seja reversamente compatível com a maneira em
que agentes de usuário (Ex: Browser) manipulam conteúdo. Para manter a linguagem
relativamente simples para os desenvolvedores web, vários elementos e atributos
mais velhos não estão incluídos na nova versão, tais como elementos de
apresentação/formatação, que são melhor tratados utilizando CSS.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(CESPE – 2013 – BACEN – Analista de Sistemas O exemplo abaixo está escrito


corretamente em HTML 5 e o atributo required obriga o usuário a escolher uma
cor para que o formulário seja enviado.

<label>Cor:
<select name=cor required>
<option value="">Escolha um
<option>Vermelho
<option>Verde
<option>Azul
</select>
</label>

Comentários:

Por fim, o atributo required é um booleano utilizado para indicar que um determinado
campo de formulário é obrigatório para o envio do mesmo. Ao adicionar esse atributo
a um campo de formulário, o navegador obriga o usuário a inserir dados naquele
campo antes de enviar o formulário. Essa validação substitui a validação básica de
formulário implementada com JavaScript.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE – 2014 – ANATEL – Analista de Sistemas Na linguagem HTML, para


16712855225

inserir uma imagem, utiliza-se a tag <img />, que pode ser aberta e fechada no
mesmo bloco da tag, sendo também necessário usar o comando src para que o
navegador obtenha o endereço da imagem.

Comentários:

Vamos aprender agora como inserir uma imagem e, para tal, podemos utilizar a tag
<img>. Ela é um pouquinho diferente das demais por duas razões: (1) o conteúdo não
virá entre as tags, virá no atributo src – ele conterá o endereço para obter a imagem;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(2) não há tag de fechamento propriamente dita, apenas />. Vejam o exemplo abaixo
de o código para inserir uma imagem linda ao seu website:

<img src="http://www.capaparafacebook.com.br/wp-content/uploads/2012/11/flamengo2.jpg" />

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE – 2014 – ANATEL – Analista de Sistemas No HTML 5, a tag <rp> é usada


para definir o que deve ser mostrado na hipótese de determinado browser não
suportar anotações ruby.

Comentários:

ELEMENTO DESCRIÇÃO

Esse elemento define o que deve ser mostrado nos navegadores que não
<rp>
suportam anotações Ruby – entre parêntesis.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

10. (CESPE – – STF – Analista de Sistemas) Para o elemento form da linguagem


HTML, são válidos os atributos onsubmit, action e method. "GET" e "POST" são
valores válidos para o atributo method.
16712855225

Comentários:

ATRIBUTO DESCRIÇÃO

Especifica o Método HTTP que será utilizado no envio de dados do formulário


method (GET ou POST).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Conforme vimos em aula, action e method são realmente atributos do elemento <form>.
Já onsubmit é um atributo de eventos, i.e., ele serve para capturar eventos. No caso, é
para capturar o momento em que um formulário é submetido. De fato, o atributo
method só aceita os valores GET e POST.

Gabarito: C

11. (CESPE – 2013 – MPOG – Analista de Sistemas) Elementos em formato SVG


podem ser embutidos diretamente em uma página HTML usando HTML5.

Comentários:

ELEMENTO DESCRIÇÃO

Esse elemento é utilizado para desenhar formas dinamicamente via SVG


<svg>
(Imagens vetorizadas).

Conforme vimos em aula, a questão está perfeita.

Gabarito: C

12. (CESPE – 2013 – UNIPAMPA – Analista de Sistemas) A partir do advento do


HTML5 (Hypertext Markup Language versão 5), todos os servidores web tiveram
de ser atualizados para suportar novas características introduzidas por essa nova
versão de páginas web.

Comentários:
16712855225

Servidores? Eles não têm nada com isso; os navegadores tiveram que ser atualizados
para suportar as novas características da linguagem.

Gabarito: E

13. (CESPE – 2007 – IEMA – Analista de Sistemas) O termo html corresponde a uma
linguagem de programação que permite a elaboração de páginas da Web que
não tenham figura, mas não permite elaborar páginas da Web que contenham
figuras, tabelas ou hyperlinks.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Comentários:

Essa linguagem possibilita apresentar informações na Internet. Aquilo que você vê


quando acessa uma página é a interpretação que seu navegador faz do código HTML.
Professor, o que significa a sigla? Bem, Hyper é o oposto de linear – ou seja, você pode
ir (por meio de hyperlinks) a qualquer lugar da internet! O que é Text? É texto – a
princípio, a linguagem foi feita para a visualização de textos.

Conforme vimos em aula, não é uma linguagem de programação, mas – sim – uma
linguagem de marcação. Ela permite elaborar páginas que não tenham figura ou
que tenham figuras, tabelas, hyperlinks, tanto faz.

Gabarito: E

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(FCC - 2012 - TRT - 11ª Região (AM) - Técnico Judiciário - Tecnologia da


Informação Em HTML, elementos <Option> descrevem as possíveis opções de
escolha para uma lista criada pelo elemento <Select>. Dentre os atributos do
elemento <Option>, é INCORRETO dizer que consta o atributo:

a) label.
b) name.
c) disabled.
d) selected.
e) value.

Comentários:

ATRIBUTO DESCRIÇÃO <OPTION>

disabled Especifica que uma opção deve ser desabilitada.


label Especifica um rótulo (label) menor para uma opção.
selected Especifica que uma opção deve ser pre-selecionada quando a página carrega.
value Especifica o valor a ser enviado ao servidor.

Conforme vimos em aula, não existe o atributo name.


16712855225

Gabarito: B

(FCC - 2011 - TRT - 14ª Região (RO e AC) - Analista Judiciário - Tecnologia da
Informação) É uma tag HTML que conta com os atributos href e name para
possibilitar o estabelecimento de hiperligações (link), para outro trecho de um
documento, para outra página de Internet ou mesmo um endereço de e-mail:

a) <a>
b) <b>
c) <meta>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

d) <head>
e) <i>

Comentários:

Nós também podemos colocar parágrafos dentro das heading tags! Enfim... vocês
podem brincar à vontade com isso em compiladores online. Agora vamos falar de
hiperlinks! Todo mundo sabe o que é, né?! É aquele link que envia o usuário para
outra parte do próprio website ou para outro website. Vamos ver como é possível
fazer isso? Utilizamos a tag <a>:

<a href="http://www.estrategiaconcursos.com.br">Este site te fará passar!</a>

Essa tag define um hiperlink que é utilizado para conectar uma página a outra. Ele
tem vários atributos, mas o mais comum e o utilizado é o atributo href, que recebe
um valor (website ao qual o usuário será redirecionado). Podemos também colocar o
nome do link! Observem que o atributo href diz o endereço, mas o nome do link é o
conteúdo da tag <a>. Vejamos como fica:

Conforme vimos em aula, trata-se da tag <a>.

Gabarito: A

(FCC - 2010 - - - Agente Legislativo de Serviços Técnicos e Administrativos


- Processamento de Dados A sintaxe correta da instrução utilizada para inserir
comentário em um código HTML é:

a) echo comentário
b) // comentário 16712855225

c) /* comentário */
d) <%-- comentário --%>
e) <!-- comentário -->

Comentários:

Maneiro! Agora vamos ver como eu posso comentar nosso código. Comentários
começam com <!-- e terminam com -->. Eles não serão exibidos nos navegadores, é
somente para organizar e explicar o código. Vamos ver um exemplo:

<p> Mensagem 1! </p>


<!-- <p> Mensagem 2! </p> -->

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Conforme vimos em aula, trata-se da instrução <!-- e -->.

Gabarito: E

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A linguagem HTML, para produzir páginas na Web, trata- se de uma
linguagem do tipo:

a) de marcação.
b) de script.
c) procedural.
d) orientada a eventos.
e) orientada a objetos.

Comentários:

Logo, o hypertext é um texto que contém links! Sempre que você clicar em uma
palavra que te leve a uma nova página, aquilo era um hipertexto. O que é Markup
Language? É uma linguagem de marcação (ou tags) utilizada para fazer com que o
texto faça mais do que simplesmente ficar parado em uma página: ela pode
transformar textos em imagens, links, tabelas, listas, entre outros.

Conforme vimos em aula, HTML (HyperText Markup Language) é uma linguagem


de marcação!

Gabarito: A

(FCC – 2014 – TRT/1 – Analista de Sistemas) Considere o programa a seguir,


16712855225

elaborado na linguagem HTML:

<html>
<body>
<p><a href="#heading1">Parte 1</a></p>
<h1 id="heading1">Parte 1 do site</h1>
<p>Texto da Parte 1</p>
</body>
</html>

A função da 3ª e 4ª linhas é:

a) criar um link interno, para a região com o nome "Parte 1 do site".

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

b) criar o título "Parte 1" que apareça da barra do navegador.


c) abrir o arquivo texto "Parte 1" e exibi-lo após o cabeçalho "Parte 1 do site".
d) exibir a imagem Parte1.jpg como plano de fundo da página.
e) escrever na tela "Parte 1" em letras grandes e "Parte 1 do site" em letras
pequenas.

Comentários:

Vamos entender o código? A tag <p> cria um parágrafo! Dentro desse parágrafo, a
tag <a> cria um link de nome Parte 1 em que href=”#heading1” é o endereço para a própria
página! Galera, em geral, o link é uma URL para outra página da internet. No
entanto, algumas vezes queremos um link interno – para a mesma página. Para tal,
utilizamos o símbolo de cerquilha (#) mais o nome do header.

Na questão, o header se chama heading1. Na linha seguinte, temos o header h1 de nome


heading1, cujo texto é Parte 1 do site. Perfeito? Funciona como um índice! Logo, quando
o usuário clicar no link da linha anterior, ele será direcionado para o heading, onde
está escrito Parte 1 do site. Bacana? Portanto, essas linhas criarão um link interno para
a região com o nome Parte 1 do site. Entendido? Única vez que vi cair em prova!

16712855225

Gabarito: A

(FCC – 2014 – TRT/1 – Analista de Sistemas) Deseja-se que uma página criada a
partir da linguagem HTML, apresente o seguinte texto e figura:

Para tanto, elaborou-se o seguinte programa:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

<html>
<body>
comando x
<p>Casa térrea em terreno de 500 m2, 180 m2 de área construída, com 3 quartos (1
suite), banheiro, salas para
3 ambientes, lavabo, copa-cozinha, área de serviço, quintal e vaga para 3 carros.</p>
</body>
</html>

Supondo que a imagem da casa se encontre no arquivo casa123.jpg, um


comando que poderia ser colocado no lugar do comando x, para apresentar o
resultado desejado é:

a) <img =casa123.jpg style right/>


b) <img src="casa123.jpg" style= "float:right;" />
c) <img src=casa123.jpg style= place:right; />
d) <img=”casa123.jpg” place=”right”/>
e) <img=casa123.jpg style align =right/>

Comentários:

Vamos aprender agora como inserir uma imagem e, para tal, podemos utilizar a tag
<img>. Ela é um pouquinho diferente das demais por duas razões: (1) o conteúdo não
virá entre as tags, virá no atributo src – ele conterá o endereço para obter a imagem;
(2) não há tag de fechamento propriamente dita, apenas />. Vejam o exemplo abaixo
de o código para inserir uma imagem linda ao seu website:

<img src="http://www.capaparafacebook.com.br/wp-content/uploads/2012/11/flamengo2.jpg" />

Conforme vimos em aula, as letras A, D e E estão incorretas, porque não apresentam


o atributo src=”<endereço>”. Ficamos, então, com B e C! No entanto, a letra C não
16712855225

coloca o endereço entre aspas. Logo, já sabemos a resposta correta! Agora um


detalhe importante: a questão envolve um pouquinho de CSS! O propriedade float
permite posicionar objetos na tela – nesse caso, à direita (float:right).

Gabarito: B

(FCC - 2010 - - - Agente Legislativo de Serviços Técnicos e Administrativos


- Processamento de Dados Muitos atributos de tags nas novas versões da
linguagem HTML foram depreciados em favor do uso de:

a) scripts executados do lado do cliente.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

b) folhas de estilo.
c) scripts executados do lado do servidor.
d) linguagens de marcação extensíveis.
e) novas bibliotecas de tags.

Comentários:

Pessoal, o que eu quero que vocês guardem dessas novidades? O HTML foi, por
muitos anos, utilizado tanto para estruturação quanto para apresentação de páginas
web. Essa nova versão buscou retirar conteúdos de apresentação e deixá-los para
folhas de estilo e criou novos elementos também para deixar ainda mais claro os
elementos de estrutura de uma página web (ajudando acessibilidade e usabilidade).

Conforme vimos em aula, isso ocorre em favor do uso de folhas de estilo!

Gabarito: B

(FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da


Informação As tabelas são compostas de linhas, dentro das quais são colocadas
células que são responsáveis pelo controle do conteúdo envolvido pela tabela.
A tag TH é responsável por:

a) determinar a largura da tabela ou da célula.


b) determinar a altura da tabela ou da célula.
c) determinar a linha.
d) marcar o texto da célula com negrito e posicioná-lo no centro do alinhamento
horizontal.
e) determinar os atributos da tabela.
16712855225

Comentários:

Essa tabela é meio tosca, né? Vamos organizar um pouco melhor nosso desenho
utilizando as tags <thead>, <tbody> e <tfoot>, que virão dentro de <table>. O que é isso,
professor? Cara, nós podemos dividir uma tabela em Cabeça (thead), Corpo (tbody) e
Pé (tfoot)! Com um detalhe: podemos utilizar <th> em vez de <td> – ele é sempre negrito
e centralizado. Entendido? Vamos ver, então:

Conforme vimos em aula, ele é utilizado no cabeçalho da tabela – sempre em


negrito e horizontalmente centralizado.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Gabarito: D

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web) Em HTML, as tags <UL> e <LI> permitem criar listas:

a) de interrogação.
b) ordenadas.
c) não-ordenadas.
d) de definição.
e) de frames.

Comentários:

Percebam que a lista acima está ordenada (1 a 5). No entanto, se eu mudar a tag <ol>
para <ul> (que significa Unordered List – Lista Desordenada), vejam o resultado abaixo!
Em vez de números por item, aparecem bullets por item. Logo, quando vocês
desejarem uma lista com números, utilizem <ol>; quando vocês desejarem bullets,
utilizem <ul>. Lembrando também que é possível combinar ambos!

Conforme vimos em aula, essas tags permitem criar listas desordenadas ou não-
ordenadas.

Gabarito: C

10. (FCC - 2010 - TRE-RS - Técnico Judiciário - Programação de Sistemas) Assinale a


tag HTML correta:

a) <a href=”http://www.tre-rs.gov.br”<b>TRE-RS</b></a>
b) <a href=”http://www.tre-rs.gov.br”><B>TRE-RS</b></A>
16712855225

c) <link: “http://www.tre-rs.gov.br”><title>TRE-RS</b></a>
d) <a href=http://www.tre-rs.gov.br><b>TRE-RS</b></a>
e) <a href:link=http://www.tre-rs.gov.br”><b>TRE-RS</b></a>

Comentários:

Nós também podemos colocar parágrafos dentro das heading tags! Enfim... vocês
podem brincar à vontade com isso em compiladores online. Agora vamos falar de
hiperlinks! Todo mundo sabe o que é, né?! É aquele link que envia o usuário para
outra parte do próprio website ou para outro website. Vamos ver como é possível
fazer isso? Utilizamos a tag <a>:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

<a href="http://www.estrategiaconcursos.com.br">Este site te fará passar!</a>

Essa tag define um hiperlink que é utilizado para conectar uma página a outra. Ele
tem vários atributos, mas o mais comum e o utilizado é o atributo href, que recebe
um valor (website ao qual o usuário será redirecionado). Podemos também colocar o
nome do link! Observem que o atributo href diz o endereço, mas o nome do link é o
conteúdo da tag <a>. Vejamos como fica:

Conforme vimos em aula, trata-se da segunda opção! Lembrando que a tag <b> é
uma tag utilizada para negritar um texto.

Gabarito: B

11. (FCC - 2014 – TRT/RJ - Advogado) Deseja-se elaborar uma página com a
linguagem HTML, cuja estrutura do programa é apresentada a seguir:

<html>
<head>
</head>
<body>
</body>
</html>

Para que o título "Pagina 1" apareça na barra do navegador, a tag que deve ser
inserida, é:

a) < title>Pagina 1</title>, entre as linhas 1 e 2.


b) < title>Pagina 1</title>, entre as linhas 2 e 3.
c) < title>Pagina 1</title>, entre as linhas 3 e 4.
d) < p> Pagina 1</p>, entre as linhas 1 e 2.
16712855225

e) < p> Pagina 1</p>, entre as linhas 2 e 3.

Comentários:

<!DOCTYPE html>
<html>
<head>
<title> Estratégia Concursos | Cursos Online para Concursos </title>
</head>
</html>

Conforme vimos em aula, deve ser inserido entre as linhas 2 e 3, com a sintaxe
mostrada acima.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Gabarito: B

12. (FCC – 2014 – TRT/RJ – Analista de Sistemas Analise o programa a seguir,


elaborado na linguagem HTML.

<html>
<body>
<p>Albert Einstein disse:
<q>A imaginação é mais importante
que o conhecimento.< /q></p>
</body>
</html>

Quando ele for aberto por um navegador que suporte HTML, será exibido na
tela o texto:

a) Albert Einstein disse: A imaginação é mais importante que o conhecimento.


b) Albert Einstein disse: A imaginação é mais importante que o conhecimento.
c) Albert Einstein disse: "A imaginação é mais importante que o conhecimento."
d) Albert Einstein disse: "A imaginação é mais importante que o conhecimento."
e) "Albert Einstein disse:A imaginação é mais importante que o conhecimento."

Comentários:

<p> Confúcio disse:


<q> Estudar é polir a pedra preciosa; cultivando o espírito, purificamo-lo.</q>
</p>

Conforme vimos em aula, essa tag insere aspas para uma citação na frase “A
imaginação é mais importante que o conhecimento”.

16712855225
Gabarito: C

13. (FCC - 2012 – MPE/AP – Analista de Sistemas A linguagem HTML5 traz um


conjunto de novos valores possíveis para o atributo type do elemento <input>,
com objetivo de definir melhor os tipos de dados de entrada nos campos dos
formulários. Fazem parte desses novos valores: tel, url, email, date, time, number,

a) char, search, range, meter, color, week e month.


b) datetime, datetime-local, string, search e color.
c) search, datetime, month, week, datetime-local, range e color.
d) date-time, range, color, month, week e boolean.
e) datetime, month, week, meter, range, search, boolean e color.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Comentários:

VALOR DESCRIÇÃO

Usado para inserir um número de telefone.


tel
Solicita aos usuários que digitem o texto pelo qual desejam buscar.
search
Usado para inserir um URL único.
url
Usado para inserir um único endereço de e-mail ou uma lista de endereços de
email e-mail.

Usado para inserir data e hora com o fuso horário em UTC.


datetime
Usado para inserir uma data sem fuso horário.
date
Usado para inserir uma data com ano e mês, sem fuso horário.
month
Para inserir uma data formada por um número de ano e um número de semana,
week
mas sem fuso horário.
Usado para inserir um valor de horário com hora, minuto, segundos e fração de
time
segundos, mas sem fuso horário.
datetime- Para inserir data e hora sem fuso horário.
local
Para entrada numérica.
number
16712855225

Para entrada numérica, mas ao contrário de number, o valor real não é


range>
importante.
Usado para escolher a cor em um controle de cores.
color

Conforme vimos em aula, trata-se da terceira opção.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

14. (FCC - 2014 - SABESP – Analista de Sistemas São elementos da linguagem HTML
4.01 que não fazem mais parte da HTML5, ou seja, não são suportados em HTML:

a) applet e iframe.
b) font e frame.
c) center e option.
d) acronym e button.
e) frameset e fieldset.

Comentários:

ELEMENTO DESCRIÇÃO

Esse elemento era utilizado para especificar mudanças inline de uma fonte (Ex:
<font> parágrafo ou poucas palavras) – recomenda-se utilizar elementos da folha de
estilo.
Esse elemento era utilizado para especificar um frame dentro de um elemento
<frame> <frameset> - foi retirado por causar problemas de usabilidade e acessibilidade.

Conforme vimos em aula, trata-se do <font> e <frame> Observem que <applet>, <center>,
<acronym> e <frameset> também foram removidas, mas - nessas opções – o outro
elemento está sempre correto.

15. (FCC - 2014 – TRT/4ª – Analista de Sistemas A especificação da W3C para a


versão 5 da linguagem HTML NÃO traz um conjunto de elementos que eram
utilizados na versão anterior, e que são considerados obsoletos, como, por
exemplo, os elementos:
16712855225

a) < frame>, < frameset >, < noframes > e < font >.
b) < table >, < th >, < tr > e < td>.
c) < meta >, < big >, < link > e < center >.
d) < acronym >, < applet >, < b> e < div >.
e) < frame >, < frameset >, < iframe> e < i >.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

ELEMENTO DESCRIÇÃO

Esse elemento era utilizado para especificar mudanças inline de uma fonte (Ex:
<font> parágrafo ou poucas palavras) – recomenda-se utilizar elementos da folha de
estilo.
Esse elemento era utilizado para especificar um frame dentro de um elemento
<frame> <frameset> - foi retirado por causar problemas de usabilidade e acessibilidade.

<frameset> Esse elemento era utilizado para especificar um ou mais elementos <frame> -
foi retirado por causar problemas de usabilidade e acessibilidade.

<noframes> Esse elemento era utilizado por navegadores que não suportavam frames - foi
retirado por causar problemas de usabilidade e acessibilidade.

Conforme vimos em aula, trata-se do <font>, <frame>, <frameset> e <noframes>.

Gabarito: A

16. (FCC - 2012 – AFTM/SP – Analista de Sistemas Na HTML5, o elemento <wbr>:

a) faz parte do grupo de novos elementos para definição de idioma. O texto no


interior do elemento <wbr> é interpretado como sendo escrito em português
brasileiro.

b) substitui o elemento <br> que define uma quebra de linha no local onde o
elemento for inserido.
16712855225

c) especifica uma oportunidade de quebra de linha, ou seja, onde no texto será


adequado ter uma quebra de linha caso seja necessário.

d) indica que um texto não deve ser vinculado à direção de escrita do restante
do documento e permite indicar a direção de escrita desse texto.

e) indica que um texto deve ser circundado pelo restante do documento. Esse
texto deve ser relacionado com o restante do documento.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

ELEMENTO
DESCRIÇÃO
Esse elemento permite marcar sugestões de quebra de linha em locais
<wbr>
específicos ou palavras longas, sem perder a semântica da palavra no texto.

Conforme vimos em aula, trata-se da terceira opção.

Gabarito: C

17. (FCC - 2012 – TRT/2ª – Analista de Sistemas Pedro está criando a página de um
artigo de revista utilizando HTML5 e deseja colocar um pequeno texto
relacionado ao assunto principal do artigo à esquerda, circundado pelo texto
principal. Consultando a documentação oficial da HTML5, Pedro decidiu usar o
elemento cuja descrição é apresentada a seguir:

This element represents a section of a page that consists of content that is


tangentially related to the content around the element, and which could be
considered separate from that content. Such sections are often represented as
sidebars in printed typography.

Com base na descrição é possível concluir que o elemento escolhido por Pedro
foi:

a) <acronym>
b) <article>
c) <sidebar>
d) <aside>
e) <section>
16712855225

Comentários:

ELEMENTO DESCRIÇÃO

Esse elemento define um conteúdo à parte do texto principal da página web


<aside> (apesar de estar relacionado a ela) – geralmente trata-se de uma barra lateral
(sidebar).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Conforme vimos em aula, a questão trata do elemento <sidebar>.

Gabarito: D

18. (FCC - 2012 – TRT/2ª – Analista de Sistemas No que concerne aos elementos da
HTML5 e suas funções, assinale a opção correta.
a) O elemento wbr permite representar um grupo de introdução ou elementos
de navegação, o que possibilita agrupar índices de conteúdos ou campos de
formulários.

b) O elemento datalist representa uma parte da página que pode ser distribuída
e reutilizada em serviços de RSS.

c) O elemento aside é um bloco de conteúdo que pode ser representado em


textos impressos, em anúncios de publicidade ou mesmo na criação de um
grupo de elementos nav e outras informações separadas do conteúdo principal
do website.

d) O elemento summary define uma nova seção genérica no documento,


possibilitado a divisão da página em várias seções, como introdução, destaque,
novidades, informação de contato ou chamadas para conteúdo interno.

e) O elemento track consiste em um grupo de títulos, que permite agrupar


elementos de título de H1 a H6 em múltiplos níveis, como título e subtítulos.

Comentários:

ELEMENTO 16712855225

DESCRIÇÃO

Esse elemento define um conteúdo à parte do texto principal da página web


<aside> (apesar de estar relacionado a ela) – geralmente trata-se de uma barra lateral
(sidebar).
Esse elemento especifica uma lista de opções pré-definidas para o elemento
<datalist> <input>.

Esse elemento define um cabeçalho visível para o elemento <details>.


<summary>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Esse elemento especifica faixas de texto para elementos de mídia (<audio> e


<track> <video>).

Esse elemento permite marcar sugestões de quebra de linha em locais


<wbr> específicos ou palavras longas, sem perder a semântica da palavra no texto.

a) Conforme vimos em aula, o item trata do elemento <header>.


b) Conforme vimos em aula, o item não faz o menor sentido.
c) Conforme vimos em aula, o item está perfeito.
d) Conforme vimos em aula, o item trata do elemento <section>.
e) Conforme vimos em aula, o item trata do elemento <header>.

Gabarito: C

19. (FCC – 2015 – TCM/GO – Analista de Sistemas Um desenvolvedor está criando


um formulário em uma página web e deseja utilizar um novo elemento de
formulário adicionado na versão 5 da linguagem HTML, que especifica uma lista
drop-down de opções pré-definidas para um elemento <input>. O elemento
que este desenvolvedor deve utilizar é o:

a) <output>
b) <ol>
c) <keygen>
d) <ul>
e) <datalist>

Comentários:
16712855225

ELEMENTO DESCRIÇÃO

Esse elemento especifica uma lista de opções pré-definidas para o elemento


<datalist> <input>.

Conforme vimos em aula, a questão trata do elemento <datalist>.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(FCC – 2015 – CNMP – Analista de Sistemas Um programa elaborado na


linguagem HTML apresenta a seguinte linha:

<!DOCTYPE HTML>

Sobre essa linha, é correto afirmar que ela:

a) deve vir sempre após a tag <html>.


b) é uma tag que define o nome do arquivo que possui o programa.
c) especifica ao navegador o tipo de documento HTML que ele vai renderizar.
d) não atende corretamente a linguagem HTML, que não aceita o símbolo ! em
seus comandos.
e) indica que o arquivo com o programa-fonte possui a extensão doc.

Comentários:

A estrutura do documento é dividida em duas partes: Cabeça (Head) e Corpo (Body).


No entanto, antes de tudo isso, devemos sempre declarar logo na primeira linha de
código qual tipo de documento o navegador deverá esperar, por meio da instrução:
<!DOCTYPE html>. Atenção: isso não é uma tag – é uma instrução para indicar ao
navegado o tipo de documento que deve renderizar e a versão da linguagem.

Conforme vimos em aula, ela deve vir sempre em primeiro lugar; não se trata de
uma tag; não tem que atender à sintaxe da linguagem; não tem relação com a
extensão .doc. No entanto, ela realmente especifica ao navegador o tipo de
documento que ele vai renderizar e sua versão.
Gabarito: C
16712855225

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(FEPESE - 2014 – MPE/SC – Analista de Sistemas Identifique quais dos seguintes


elementos HTML não são suportados pelo HTML5 (possuem substitutos que
realizam a mesma função ou função similar no HTML).

1. <caption>
2. <center>
3. <font>
4. <frame>
5. <img>

Assinale a alternativa que indica todos os itens corretos.

a) São corretos apenas os itens 1, 2 e 3.


b) São corretos apenas os itens 1, 3 e 5.
c) São corretos apenas os itens 2, 3 e 4.
d) São corretos apenas os itens 2, 3 e 5.
e) São corretos apenas os itens 3, 4 e 5.

Comentários:

ELEMENTO 16712855225
DESCRIÇÃO

Esse elemento era utilizado para especificar mudanças inline de uma fonte (Ex:
<font> parágrafo ou poucas palavras) – recomenda-se utilizar elementos da folha de
estilo.
Esse elemento era utilizado para especificar um frame dentro de um elemento
<frame> <frameset> - foi retirado por causar problemas de usabilidade e acessibilidade.

Esse elemento era utilizado para centralizar textos – recomenda-se utilizar


<center> elementos da folha de estilo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Conforme vimos em aula, trata-se do <center>, <font> e <frame>.

Gabarito: C

(VUNESP - 2012 – TJ/SP– Analista de Sistemas Em uma página Web escrita


utilizando a linguagem de marcação HTML (Hypertext Markup Language),
devem existir pelo menos quatro pares de TAGs. O TAG que deve iniciar o
arquivo da página é:

a) <HEAD>
b) <HTML>
c) <TITLE>
d) <BEGIN>
e) <BODY>

Comentários:

A partir do HTML5, há apenas duas coisas obrigatórias para que um Documento


HTML seja válido: !DOCTYPE <title>. Pois é, isso é o mínimo necessário para validar
uma página web. No entanto, é altamente recomendável adquirir dois hábitos: fechar
todas as tags abertas; e usar as tags <html>, <head> e <body>. Vamos ver agora quais
outros elementos podem ir dentro do <head>:

Conforme vimos em aula, o elemento que deve iniciar o arquivo da página é <html>.
No entanto, atenção: isso é válido para HTML 4.01 (e, não, HTML5).

Gabarito: B

(NCE – – UFRJ – Analista de Sistemas A linguagem mais utilizada na


16712855225

construção de páginas de Internet é:

a) HTML;
b) C;
c) HTTP;
d) Pascal;
e) SQL.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Essa linguagem possibilita apresentar informações na Interne Aquilo que você vê


quando acessa uma página é a interpretação que seu navegador faz do código HTML.
Professor, o que significa a sigla? Bem, Hyper é o oposto de linear – ou seja, você pode
ir (por meio de hyperlinks) a qualquer lugar da internet! O que é Text? É texto – a
princípio, a linguagem foi feita para a visualização de textos.

Conforme vimos em aula, trata-se do HTML!

Gabarito: A

(ESAF – 2010 – CVM – Analista de Sistemas A linguagem de formatação


destinada a criar hipertextos pesquisáveis na Rede Mundial de Computadores e
que hoje é uma verdadeira norma de editoração multimídia em linha, é
conhecida pela sigla:

a) SIMD.
b) HTTPS.
c) IMPEL.
d) HTML.
e) MIMD.

Comentários:

Essa linguagem possibilita apresentar informações na Internet. Aquilo que você vê


quando acessa uma página é a interpretação que seu navegador faz do código HTML.
Professor, o que significa a sigla? Bem, Hyper é o oposto de linear – ou seja, você pode
ir (por meio de hyperlinks) a qualquer lugar da internet! O que é Text? É texto – a
princípio, a linguagem foi feita para a visualização de textos.
16712855225

Conforme vimos em aula, trata-se do HTML!

Gabarito: D

(CESGRANRIO – 2012 – CMB – Analista de Sistemas) Um programador deseja


desenhar, utilizando HTML, três retângulos e um círculo. Que elemento HTML
permite criar uma área apropriada para esse desenho?

a) 2DShapes
b) canvas
c) header

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

d) p
e) xgraphbody

Comentários:

ELEMENTO DESCRIÇÃO

Esse elemento é utilizado para desenhar formas dinamicamente via script


<canvas> (geralmente JavaScript), tais como gráficos e jogos.

Conforme vimos em aula, trata-se do elemento <canvas>.

Gabarito: B

(CESGRANRIO – 2013 – IBGE – Analista de Sistemas) O elemento (tag) HTML


responsável por dar ênfase a um texto apresentado em um navegador web é o:

a) strong
b) footer
c) th
d) thead
e) label

Comentários:

Professor, se eu quiser colocar alguma palavra em negrito ou itálico? Essa estilização


é bem mais simples – não precisamos utilizar o atributo style! Há dois exemplos:
16712855225

<p><strong>Texto em negrito</strong></p>
<p><em>Texto em itálico</em></p>
<p><strong>Texto</strong><em> todo</em> <strong><em> misturado</em></strong></p>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Conforme vimos em aula, trata-se do elemento <strong>.

Gabarito: A

(CESGRANRIO – 0 – CMB – Analista de Sistemas) Um programador Web está


estudando a adoção de novas tecnologias e percebe que o HTML 5 introduziu
o elemento:

a) <canvas>
b) <ul>
c) <meta>
d) <style>
e) <script>

Comentários:

ELEMENTO DESCRIÇÃO

Esse elemento é utilizado para desenhar formas dinamicamente via script


<canvas> (geralmente JavaScript), tais como gráficos e jogos.

Conforme vimos em aula, trata-se do elemento <canvas>.

Gabarito: A

(FGV – 2015 – TJ/SC – Analista de Sistemas) Em uma página HTML, deseja-se


16712855225

colocar a figura contida no arquivo "x.png" como link para "www.site.com". O


comando HTML a ser usado é:

a) < a href="www.site.com">"x.png"< /a>;


b) < a href="www.site.com"> < img src="x.png"/>< /a>;
c) < a link="www.site.com">"x.png"< /a>;
d) < a link="www.site.com"> < img "x.png"/>< /a>;
e) < a http="www.site.com">< img file="x.png"/>< /a>.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Vocês já sabem como criar uma imagem e um link! Professor, como criar uma
imagem que é um link? Basta colocar a imagem como conteúdo de um hiperlink:

<a href="http://www.flamengodanacao.com.br">
<img src=http://www.capaparafacebook.com.br/wp-content/uploads/2012/11/flamengo2.jpg />
</a>

Conforme vimos em aula, trata-se da segunda opção.

Gabarito: B

(FGV – 2014 – PROCEMPA – Analista de Sistemas) A estrutura semântica das


páginas representa um dos principais cuidados com a acessibilidade de
conteúdo nos websites.

Para saber se a estrutura semântica nas páginas está correta, é necessário


verificar o código em:

a) HTML.
b) CSS.
c) JavaScript.
d) Flash.
e) jQuery.

Comentários:

Conforme vimos em aula, trata-se do HTML. Galera, muitos utilizam HTML de


maneira errada – utilizando-o para formatação, por exemplo –, mas sabe-se que
ele deve compreender a estrutura semântica, facilitando a estrutura semântica.
16712855225

Gabarito: A

10. (FGV – 2010 – DETRAN/RN – Analista de Sistemas) Assinale a alternativa que


contém, na linguagem HTML, a tag que delimita a área onde serão inseridas as
informações que serão exibidas no browser:

a) <BODY>
b) </HEAD>
c) <LINK>
d) <META>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

e) <HTML>

Comentários:

Já o Corpo (Body) é o local onde se coloca o conteúdo (Ex: Texto, Imagens, etc), que
será visível na página para o leitor. Vamos colocar dois parágrafos no corpo:

<!DOCTYPE html>
<html>
<head>
<title> Esse será o título da minha página \o/ </title>
</head>
<body>
<p> E aí, Estratégia Concursos! Tudo bacana? </p>
<p> Observem como o arquivo é dividido em Head e Body </p>
</body>
</html>

Conforme vimos em aula, trata-se do <BODY>.

Gabarito: A

ACERTEI ERREI
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

CSS (CASCADING STYLE SHEETS)

Vamos começar falando um pouquinho sobre HTML! Pois é, essa linguagem de


marcação foi desenvolvida para servir a uma comunidade bastante restrita: a
comunidade dos cientistas (para compartilhamento de documentos, etc). Com a
introdução gradativa de novas tags, atributos e aplicações específicas, a linguagem
tornou-se um padrão mundial de apresentação de conteúdo na web.

Vamos detalhar isso melhor! O objetivo inicial era simplesmente exibir informações
contidas em documentos de natureza científica. O código informava ao navegador
o que eram os elementos contidos na página, quais arquivos (imagem, áudio, vídeo,
etc) e onde eles estavam (Ex: poderia descrever ao navegador sobre a existência de
um link na parte superior da página).

O tempo foi passando e foi surgindo uma avalanche de novos aplicativos,


facilidades, software, hardware, etc. O HTML não ficou para trás e foi evoluindo com
a criação de novas tags (Ex: font) e novos atributos (Ex: color), que permitiam alterar
a aparência de textos. Foi aí que a linguagem passou a exercer uma dupla função
em relação ao conteúdo: exibir e estilizar sua aparência.

Em outras palavras, podemos dizer que Linguagem HTML foi criada


essencialmente para a estruturação de conteúdo, mas passou também a tratar da
apresentação e aparência. Isso se tornou um problema grave para os designers e
projetistas. Como assim, professor? Vamos exemplificar isso! Imaginem que o dono
de uma empresa liga para o web designer e diz:

“A partir da semana que vem, nossa companhia patrocinará o time de futebol


16712855225

do Flamengo – o maior time de todos os tempos. Portanto, preciso que você


me faça um favorzinho rápido: eu quero que você modifique a cor de todos os
títulos do nosso website para vermelho. Só mais uma coisa, eu preciso que
você faça isso até o final do expediente, bacana?”

Pessoal, parece uma coisa simples, né?! É só mudar uma cor, ora! Entretanto, o nosso
site contém mais de 300 páginas e, cada uma, possui uma média de três títulos. O
que isso significa? Isso quer dizer que você terá que modificar o atributo color da
tag font cada título, tal como mostra o código abaixo. Vocês já imaginaram fazer
isso 900 vezes? E se tivesse que mudar a cor dos textos? E do fundo?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
<hn>
<font color="#0f0"> Título </font>
</hn>

Agora vocês têm uma dimensão do problema? Pois é, a mistura de estruturação e


apresentação tornou-se uma dificuldade notória. Era, então, preciso dissociar a
linguagem de estruturação/conteúdo da linguagem de apresentação/formatação. E
assim surgiu o CSS (Cascading Style Sheets ou Folhas de Estilo em Cascata). A partir
de agora, tags HTML serão utilizadas apenas para estruturar o código, nada mais.

Nenhum elemento ou atributo é utilizado para alterar a apresentação ou estilo do


conteúdo. Professor, quem faz a estilização do documento? O CSS! Ele nada mais é
que um arquivo independente do arquivo HTML, em que são declarados
propriedades e valores de estilização para os elementos da HTML2. Isso, em geral,
fica armazenado em um arquivo .css, que contém todas as regras de estilo.

PÁGINA COM CSS


16712855225

Pessoal, a melhor maneira de entender isso é por meio de um exemplo! Se vocês


tiverem um tempinho, gostaria que baixassem um plugin em seu navegador
chamado Web Developer (Chrome ou Firefox). Ele permite que você desabilite o
CSS de qualquer página! Acima vimos a página do Correio Brasiliense com CSS e
abaixo podemos vê- sem CSS!

Vale ressaltar que CSS é uma Especificação W3C, que é um consórcio de empresas
que buscam estabelecer padrões para a internet. Caramba, essa tecnologia é

2
Pode-se utilizar CSS com XML apesar de pouco comum.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

fantástica demais! Não existem nenhuma desvantagem? Claro que existe! A maior e
mais grave de todas é que nem todos os navegadores implementam todas as
recomendações W3C do CSS integralmente.

PÁGINA SEM CSS

Retornando à situação inicial, seria possível modificar facilmente a cor de todos os


900 títulos do site em segundos. E mais, essa folha de estilo criada pode ser aplicada
a diversas outras páginas HTML! Professor, então esse arquivo .css é a folha de estilo?
Sim, ele é a Style Sheet! Ele é responsável por descrever como um arquivo HTML
deve ser visualmente.

E se a folha de estilo contiver duas regras que determinam coisas diferentes ao mesmo
elemento? Excelente pergunta! Se você disser que todos os parágrafos devem ter
fonte azul, mas depois especifica que um determinado parágrafo deverá ter fonte
vermelha, nós chegamos a um conflito! entra o encadeamento do Efeito Cascata
que dá nome a linguagem: Folhas de Estilo em Cascata. Vejamos um exemplo:
16712855225

<!DOCTYPE html>
<html>
<head>
<link type="text/css" rel="stylesheet" href="stylesheet.css"/>
<title>Fontes Estilizadas</title>
</head>
<body>
<p>Sou um parágrafo escrito em vermelho, mas uma das minhas palavras é
<span>azul</span>!</p>
</body>
</html>

p {
color: red; }

span {

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
color: blue; }

Observem atentamente o código acima! O primeiro é um Arquivo HTML e o


segundo é um Arquivo CSS (que modifica o primeiro). O HTML possui um parágrafo
em que uma palavra específica está contida na tag <span>. O CSS descreve que todos
os parágrafos devem ser vermelhos, mas o que estiver dentro da tag <span> deverá
ser azul – vejamos o resultado:

Pessoal, existe uma lista de prioridades para a aplicação da regra de estilo ao


elemento, dependendo de fatores como: tipo de folha de estilo; local físico da folha
de estilo; local físico da regra de estilo na folha de estilo; especificidade da regra de
estilo; entre outros aspectos. A propriedade para o efeito em cascata em ordem
decrescente é a seguinte (veremos cada uma delas nessa ordem):

 Declarações do usuário com !important;


 Declarações do desenvolvedor com !important;
 Folha de estilo do desenvolvedor (inline, interna e, por fim, externa);
 Folha de estilo do usuário;
 Folha de estilo padrão do navegador do usuário;

O que isso significa? Isso significa que uma declaração de estilo do usuário marcada
como !important prevalece sobre todas as demais; uma folha de estilo do
desenvolvedor prevalece sobre a folha de estilo do usuário; e assim por diante.
Entenderam agora porque se chama efeito cascata? Porque há uma ordem de
16712855225

prioridades na aplicação de regras de folhas de estilo.

Uma declaração CSS segue a sintaxe apresentada a seguir:

seletor { propriedade: valor; }

A declaração com uso de !important faz com que, para aquela declaração, o seletor
tenha prioridade sobre todos os demais seletores iguais a ele, independentemente
da especificidade e do efeito cascata. Havendo conflito entre regras !important
declaradas pelo autor do documento e também pelo usuário, prevalecem as regras
do usuário. Vejamos abaixo:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

seletor { propriedade: valor !important }

Galera, pensem em um usuário com dificuldades visuais! Ele pode declarar ao seu
navegador que as fontes tenham tamanho grande (por meio do !important)3. Se o
autor do documento fez exatamente o contrário, i.e., declarou que as fontes tenham
tamanho pequeno (também com o !important), a prioridade é do usuário. Em outras
palavras, as fontes aparecerão com tamanho grande.

Outra coisa interessante é a utilização das folhas de estilo para definir posições de
elementos e formação de páginas em vez das tabelas do HTML! Para tal, utiliza-se
um método de desenvolvimento de sites sugerido pela W3C conhecido como
Tableless. Ora, tabelas devem ser usadas para tabular dados, concordam? Não é
recomendável utilizá-las para organizar a disposição de elementos em uma página.

Por fim, é bom salientar que é possível utilizar CSS com XML! Em outras palavras,
você pode aplicar uma Folha de Estilo a um Documento X . Para tal, devemos
declarar o Documento CSS no cabeçalho do Documento XML. Legal, não? Pois é,
para que vocês não confundam o modelo de declaração de outras linguagens, eu
coloquei três modelos abaixo:

 CSS/XML: <?xml-stylesheet type=”text/css” href=”arquivo.css”>


 XSL/XML: <?xml-stylesheet type=”text/xsl” href=”arquivo.xsl”>
 CSS/HTML: <link rel=”stylesheet” type=”text/css” href=”arquivo.css”>

Calma, ainda não acabou! Vamos falar das novidades do CSS3! Ele é
completamente compatível com versões anteriores, mas apresenta diversos outros
módulos: Selectors, Box Model, Backgrounds, Borders, Image Values, Replaced
Content, Text Effects, 2D/3D Transformations, Animations, Multiple Column Layout,
16712855225

User Interface, entre outros.

Ele é extremamente funcional para construir animações, com efeitos de rotação,


movimento e transições de estilo; ele é capaz de fazer cálculos aritméticos simples;
ele possui seletores avançados; ele manipula diversas fontes; ele é capaz de definir
diversos tipos de bordas e planos de fundo; permite a divisão de textos em colunas
– tudo sem necessidade de Flash ou JavaScript! Para conhecer mais, visite o link:

http://css3clickchart.com

3
Se quiserem brincar com isso, o Web Developer também permite.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

ESTILO DE FOLHA

As Folhas de Estilo, segundo sua localização, podem ser classificadas em três tipos
– Inline, Incorporadas ou Externas. Vamos vê-las em mais detalhes:

 Folha de Estilo: Inline

Uma Folha de Estilo é dita inline, quando as regras CSS são declaradas dentro da
tag de abertura do elemento HTML com uso do atributo style, sendo aplica apenas
a um elemento HTML. Perde-se muitas vantagens das Folhas de Estilo, pois mistura-
se apresentação com marcação. Use este método excepcionalmente, por exemplo:
quando quiser aplicar um estilo a uma única ocorrência de um elemento.

<p style="color:#000;">
Esse estilo só é válido para este parágrafo! =[
<p>

 Folha de Estilo: Incorporada/Interna

Uma Folha de Estilo é dita incorporada ou interna, quando as regras CSS são
declaradas dentro da tag <style></style> na seção <head></head> (cabeçalho) do próprio
documento HTML. Ela é ideal para ser aplicada a uma única página, podendo mudar
a aparência de um único elemento em que a Folha de Estilo está incorporada.
Vamos ver como é a sua sintaxe:

<!DOCTYPE html>
<html>
<head>
<style>
p {
color: purple;
}
</style> 16712855225

<title>Resultado</title>
</head>
<body>
<p>Galera do Estratégia, eu sou roxo!</p>
</body>
</html>

 Folha de Estilo: Externa

Uma Folha de Estilo é dita externa, quando as regras CSS são declaradas em um
documento separado (com extensão .css) do documento HTML. Ela é ideal para ser
aplicada a várias páginas, podendo mudar a aparência de um site inteiro ao mudar

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

regras de estilos contidas em um único arquivo, que deverá ser linkado <link> ou
importado ao documento HTML, dentro da seção <head></head> do documento.

<!DOCTYPE html>
<html>
<head>
<link type="text/css" rel="stylesheet" href="stylesheet.css"/> /*Linha importante*/
<title>Resultado</title>
</head>
<body>
<p>Eu quero ter fonte de TAMANHO 44!</p>
</body>
</html>

p{
font-size: 44px;
}

O navegador lê as regras de estilo do arquivo chamada stylesheet.css, e formata o


Documento HTML de acordo com essas regras. Uma folha de estilo externa pode
ser escrita em qualquer editor de texto e gravado com a codificação de caracteres
UTF-8. O arquivo não deve conter nenhuma tag HTML. Lembrando novamente que
as Folhas de Estilo devem ser gravadas com uma extensão .css.

Vamos resumir esses três estilos! O Estilo Inline modifica o estilo de um único
elemento e é declarado dentro do próprio elemento. Qual é o problema? Não é
muito prático! Se quisermos, por exemplo, deixar todos os subtítulos de uma página
com a mesma aparência, teremos que repetir esse código em todas as tags desse
elemento. Entenderam?

Já o Estilo Interno modifica o estilo de um ou mais elementos, mas não é declarado


dentro do próprio elemento – ele é declarado no cabeçalho do documento.
Observem que isso evita repetição e deixa o código mais organizado, na medida
em que tudo relativo à aparência da página fica agrupado em um só lugar,
16712855225

facilitando a manutenção da página.

Qual é o problema? Sites têm muitas páginas e, se quisermos alterar uma


característica do site inteiro, teremos que repetir esse código em todas as páginas.
Por fim, o Estilo Externo modifica o estilo de um ou mais elementos e é declarado
em um documento externo. Dessa forma, nós desacoplamos (i.e., reduzimos a
dependência) o conteúdo da aparência.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

SINTAXE CSS

Antes de iniciar, é bom saber que a sintaxe CSS é um bocado diferente da sintaxe
HTML, mas a boa notícia é que (pelo menos, na minha opinião) ela é mais fácil!
Vocês sabem o que é uma regra? Uma regra é uma declaração que segue uma
sintaxe própria e que define como será aplicado um estilo a um ou mais elementos
HTML. Adivinhem: um conjunto de regras formam uma Folha de Estilos.

Uma regra, em sua forma mais elementar, compõe-se de três partes: um seletor,
uma propriedade e um valor; e tem a sintaxe conforme é apresentado abaixo:

seletor {
propriedade: valor;
}

 Seletor: é o elemento HTML (identificado por sua tag, ou por uma classe, ou por
um ID, etc) e para o qual a regra será válida.
o Ex: <p>, <h1>, <form>, .classe, etc.

 Propriedade: é o atributo do elemento HTML ao qual será aplicada a regra – é


um aspecto do seletor.
o Ex: font, color, background, etc.

 Valor: é a característica específica a ser assumida pela propriedade – é a


atribuição de uma propriedade.
o Ex: font: arial; color: blue; backgroung: green, etc.

Na sintaxe de uma Regra CSS, escreve-se o seletor e a seguir a propriedade e valor


separados por dois pontos e entre chaves. Quando mais de uma propriedade for
definida na regra, deve-se usar ponto-e-vírgula para separá-las. O ponto-e-vírgula
16712855225

é facultativo no caso de propriedade única e também após a declaração da última


propriedade quando houver mais de uma, como é mostrado abaixo.

/* Observem que CSS permite notação da cor por Nome (Ex: green) ou valor RGB (Ex: #FF0) */
h1 {
color: green; font-size:72px; /* Esse último ponto-e-vírgula é facultativo! */
}

Observem uma coisa estranha no código acima (Dica: escrita em verde)! São os
comentários! Pois bem, é possível inserir comentários para explicar o código e,
principalmente, para relembrar como o código foi estruturado e a finalidade das
partes mais importantes. Os comentários evidentemente serão ignorados pelo
navegador! Lembrem-se que eles começam com /* e terminam com */.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Vamos ver agora algumas outras particularidades contidas na sintaxe do CSS!


Observem o exemplo abaixo, essa regra diz que o parágrafo <p> terá tamanho de
fonte de 12 pixels; e que o <body> terá cor preta, fundo branco e em negrito. Se a
palavra for uma palavra composta, deverá estar entre aspas simples ou aspas duplas
(Ex: “Comic Sans”). Vejamos:

p {
font-size: 36px;
}

body {
color: #000;
background: #fff;
font-weight: bold;
}

Quando não há nenhum estilo definido para o texto de uma página, esse texto é
exibido seguindo os padrões definidos no navegador. O usuário tem o poder de
modificar o padrão nas opções do navegador. Uma regra pode agrupar diversos
seletores, basta separar cada seletor por vírgula. No exemplo abaixo, todos os
headers foram agrupados e terão a cor verde:

h1, h2, h3, h4, h5, h6 {


color: #0f0;
}

O CSS também permite um seletor Classe! Como é isso, professor? Galera, eu não
preciso me limitar somente aos elementos HTML para aplicar regras de estilo. Eu
posso inventar uma classe com um nome qualquer e aplicar a qualquer elemento.
Posso, inclusive, aplicar estilos diferentes para o mesmo tipo de elemento, usando
classes diferentes para cada um deles. Vejamos um exemplo:
16712855225

p.cor-um {
color: #000;
}

p.cor-dois {
color: #ff;
}

Se em um site houver vários parágrafos <p> e nós aplicarmos um estilo ao elemento


<p>, todos os parágrafos do site terão o mesmo estilo. No exemplo acima, nós temos
duas classes (cor-um e cor-dois) aplicadas a um mesmo elemento p. A primeira classe
aplica a cor preta ao parágrafo p e a segunda aplica a cor azul ao parágrafo p –
resolvendo o problema. Professor, e como eu aplico isso no meu Documento HTML?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
<p class = "cor-um"> Este parágrafo será preto! </p>
<p class = "cor-dois"> Este parágrafo será azul! </p>

Percebam que no elemento <p>, procura-se a classe com nome “cor-um” e “cor-
dois”. Desta forma, quando selecionarmos a classe "cor-um", por exemplo, no CSS,
estaremos aplicando os estilos apenas nos parágrafos onde a classe está aplicada.
Outra vantagem é que podemos aplicar a classe "cor-um" para outros tipos de
elementos também, como links, entre outros.

Agora apenas uma observação: o CSS1 não permitia atribuir mais de uma classe a
um mesmo elemento HTML; o CSS2 em diante permite, desde que as classes sejam
separadas por um espaço. Nesse caso, para evitar conflitos, aplica-se o Efeito
Cascata de modo que o parágrafo terá a cor definida na regra declarada por último
na Folha de Estilo.

Lá em cima, o p.cor-um por exemplo só era aplicável a parágrafos! No entanto, nós


podemos criar uma classe possível de ser aplicada a qualquer elemento. Como,
professor? É muito simples, basta cria-la omitindo o nome do elemento que vem
antes da classe. Para utilizar, basta chamar pelo nome da classe como é apresentado
no exemplo a seguir:

.cor-tres {
color: #00f;
}

<h2 class = "cor-tres"> Este CABEÇALHO é azul! </h2>


<p class = "cor-tres"> Este PARÁGRAFO é azul! </p>

Além das classes, há também o seletor Id. Ele é similar ao seletor Classe, no entanto
é único, i.e., ele só pode ser aplicado a um, e somente um, elemento dentro do
documento HTML. Para tal, basta inventar um nome precedido por cerquilha (#).
16712855225

Não se esqueçam que esse nome (Id) só pode ser aplicado a um único elemento
HTML! Vejamos um exemplo apresentado abaixo:

#meuID {
propriedade: valor;
}

Há, por fim4, o Seletor de Atributos! Ele é similar aos anteriores, todavia é aplicado
a elementos HTML com valores e atributos específicos, i.e., não apenas para a Classe
ou Id. Em outras palavras, o Seletor de Atributos é utilizado para selecionar

4
Na verdade, existe um bocado de tipos de seletores esses são somente os mais importantes!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

elementos com um valor de atributo específico. No exemplo abaixo, colore-se de


amarelo todos os elementos <a>, cujo atributo target tenha valor igual _blank.

a[target = "_blank"] {
background-color: yellow;
}

Vamos falar agora de algumas peculiaridades da linguagem! Em primeiro lugar,


vocês já devem ter vistos em alguns dos exemplos acima que o tamanho de uma
fonte é dado pela unidade px (de pixel). Um pixel é um ponto na tela do computador.
Especificar o tamanho da fonte em pixels é ótimo quando você quer que o usuário
veja, na tela dele, exatamente o que você fez na sua.

Mas espera um pouco! Quem disse que vocês estão utilizando telas de mesmo
tamanho? E se o usuário estiver usando uma tela de tamanho diferente da sua (de
um smartphone, por exemplo)? É aqui que entra o em! Essa unidade para tamanho
de fonte é uma medida relativa, i.e., um em é igual ao tamanho padrão da fonte em
qualquer que seja a tela do usuário.

Isso faz dessa medida uma excelente opção para telas de smartphones, uma vez
que ela não tenta dizer ao smartphone exatamente o quão grande fazer a fonte:
ela apenas diz, "Ei, 1em é o tamanho da fonte que você usa normalmente, então 2em
é duas vezes maior e 0,5em é metade desse tamanho!". Bacana demais essas
coisinhas do CSS, né?!

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

PRINCIPAIS PROPRIEDADES DE ESTILO

Vou contar para vocês uma curiosidade! Vocês sabem quantas propriedades
existem? São atualmente 224 propriedades. Professor, quais delas podem cair em
prova? Todas, é da cabeça do examinador! Dessa forma, é inviável ministrá-las todas
e também é inviável (e pouquíssimo recomendável) que você tente estudá-las todas.
Nesta aula, nós apresentaremos as mais comuns! Bacana? Vamos lá...

 position: propriedade que especifica o posicionamento de um elemento (static,


relative, absolute ou fixed). Na verdade, elementos são posicionados de acordo com
as propriedades top, bottom, left e right. No entanto, estas propriedades não
funcionarão, a não ser que a propriedade position seja configurada primeiro.
Vamos ver um pouquinho de cada modo de posicionamento:

Valor Descrição

static É o valor default; sua posição é dada automaticamente pelo fluxo da página; não
aceita posicionamento manual de coordenadas (left, right, top, bottom).
relative Aceita coordenadas, que são obedecidas em relação à posição original do
elemento (top: 20px, significa que o elemento estará 20px abaixo do topo).
absolute Tem como referência qualquer elemento que seja seu pai na estrutura HTML que
seja static, e obedece às coordenadas de acordo com o tamanho do pai.
fixed Tem como referência a porção visível do documento no navegador, e mantém
essa posição inclusive quando há rolagem na tela.

 list-style: propriedade que especifica todas as propriedades de lista em uma


única declaração. Pode definir uma imagem como sendo o marcador da lista;
16712855225

pode também definir o posicionamento de um marcador; ou pode definir o tipo


de marcador da lista. Pessoal, o que eu quero dizer com o tipo de marcador?
Quem usa Word sabe! É a bolinha, quadradinho - como mostra a imagem.

Propriedade Descrição

list-style- Define uma imagem como marcador da lista.


image
list-style- Define o posicionamento do marcador.
position

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

list-style- Define o tipo do marcador da lista.


type

 font: propriedade que especifica todas as propriedades de fonte em uma única


declaração. Pode-se modificar o estilo da fonte, a capitalização da fonte, largura
ou peso da fonte, o tamanho da fonte (desde o CSS1), a família da fonte, entre
outros. Para tal, utilizam-se uma série de propriedades: font-family, font-size, font-style,
font-variant ou font-weight. Bacana, pessoal?

Propriedade Descrição

font-family Define a família da fonte de texto.

font-size Define o tamanho da fonte de texto.

font-style Define o estilo da fonte de texto (itálico, oblíquo, etc).

font-variant Define a capitalização da fonte de texto.

font-weight Define a largura da fonte de texto (negrito, etc).


16712855225

 background propriedade que especifica diversas propriedades de plano de


fundo em uma única declaração. Que propriedades? background-color, background-
image, background-position, background-size, background-repeat, background-origin, background-clip,
and background-attachment. Vamos ver rapidamente um pouquinho de cada uma
dessas propriedades – coloquei em vermelho as mais importantes.

Propriedade Descrição

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

background- Define a cor do plano de fundo.


color
background- Define um ou mais imagens de plano de fundo.
image
background- Define a posição das imagens de plano de fundo.
position
background- Define o tamanho das imagens de plano de fundo.
size
background- Define como repetir imagens de plano de fundo (sem repetição, repetição na
repeat vertical, repetição na horizontal ou em ambos).
background- Define a área de posicionamento das imagens de plano de fundo (mais à
origin esquerda, mais à direita, etc).
background- Define a área de pintura das imagens de plano de fundo (se o plano de fundo
clip vai ocupar tudo, apenas uma área).
background- Define se as imagens de plano de fundo são fixas ou se movem com a barra
attachment de rolagem.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(CESPE – 2006 – SGA/AC – Analista de Sistemas) Com relação a características


da tecnologia de folhas de estilo, CSS, assinale a opção incorreta.

a) Uma folha de estilo pode aplicar-se a mais de uma página HTML.

b) O indicador !important é usado em folhas de estilo para indicar que


determinada regra de estilo aplicável a um elemento específico deve ser
priorizada em detrimento de outras aplicáveis ao mesmo elemento.

c) O uso de cores em folhas de estilo pode usar a notação de cores por nome
(black, white, blue) bem como por valor RGB.

d) Folhas de estilo não permitem a seleção de elementos conforme o valor de


seus atributos.

Comentários:

Retornando à situação inicial, seria possível modificar facilmente a cor de todos os


900 títulos do site em segundos. E mais, essa folha de estilo criada pode ser aplicada
a diversas outras páginas HTML! Professor, então esse arquivo .css é a folha de estilo?
Sim, ele é a Style Sheet! Ele é responsável por descrever como um arquivo HTML deve
ser visualmente.
16712855225

(a) Conforme vimos em aula, está perfeito!

O que isso significa? Isso significa que uma declaração de estilo do usuário marcada
como !important prevalece sobre todas as demais; uma folha de estilo do desenvolvedor
prevalece sobre a folha de estilo do usuário; e assim por diante. Entenderam agora
porque se chama efeito cascata? Porque há uma ordem de prioridades na aplicação
de regras de folhas de estilo.

(b) Conforme vimos em aula, está perfeito!

/* Observem que CSS permite notação da cor por Nome (Ex: green) ou valor RGB (Ex: #FF0) */

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
h1 {
color: green; font-size:72px; /* Esse último ponto-e-vírgula é facultativo! */
}

(c) Conforme vimos em aula, realmente pode usar ambos.

Há, por fim, o Seletor de Atributos! Ele é similar aos anteriores, todavia é aplicado a
elementos HTML com valores e atributos específicos, i.e., não apenas para a Classe
ou Id. Em outras palavras, o Seletor de Atributos é utilizado para selecionar elementos
com um valor de atributo específico. No exemplo abaixo, colore-se de amarelo todos
os elementos <a>, cujo atributo target tenha valor igual _blank.

(d) Conforme vimos em aula, é possível sim selecionar elementos baseados no valor
de seus atributos.

Gabarito: D

(CESPE – – HEMOBRÁS – Analista de Sistemas) As CSS favorecem a


acessibilidade porque, entre outros aspectos, permitem aos usuários visualizar
documentos com as fontes e cores por eles definidas.

Comentários:

Logo de cara, pode-se dizer que o CSS favorece a acessibilidade por separar a
estrutura dos documentos de sua apresentação. As folhas de estilo foram projetadas
para propiciar um controle preciso - independente da marcação - do espaçamento
de caracteres, alinhamento de texto, posicionamento de objetos na página, saídas de
áudio e voz, características de fontes (tamanho, cor, etc), entre outros.

Conforme vimos em aula, está perfeito! Elas permitem um controle preciso de


16712855225

tamanhos de fontes, cores e estilos.

Gabarito: C

(CESPE – – HEMOBRÁS – Analista de Sistemas) O usuário pode ressaltar


informações usando o CSS por meio da criação de molduras dinâmicas em volta
do conteúdo.

Comentários:

CSS inclui ainda mais as seguintes características de controle para o usuário:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

 Cores do sistema e fontes do sistema, i.e., o usuário poderá aplicar aos


documentos web um estilo igual ao adotado para as cores do seu sistema
operacional e de fontes igual às suas preferidas adotadas no sistema.

 Molduras dinâmicas permitem aos usuários (ex: deficientes visuais ou com baixa
visão) criar molduras dinâmicas em volta de conteúdo sem alterar o layout, mas
ressaltando informações.

Conforme vimos em aula, está perfeito! Uma das características de controle para os
usuários é a Moldura Dinâmica, que permite aos usuários (ex: com baixa visão) criar
molduras dinâmicas em volta de conteúdo sem alterar o layout, mas ressaltando
informações.

Gabarito: C

(CESPE – – HEMOBRÁS – Analista de Sistemas) Os designers podem


controlar o posicionamento absoluto e relativo de textos em uma página web
utilizando as CSS.

Comentários:

Propriedade que especifica o modo de posicionamento de um elemento (static, relative,


absolute ou fixed). Na verdade, elementos são posicionados de acordo com as
propriedades top, bottom, left e right. No entanto, estas propriedades não funcionarão, a
não ser que a propriedade position seja configurada primeiro. Vamos ver um
pouquinho de cada modo de posicionamento.

Conforme vimos em aula, a propriedade position permite aos autores controlar o


16712855225

posicionamento de textos (estático, relativo, absoluto ou fixo).

Gabarito: C

(CESPE – – HEMOBRÁS – Analista de Sistemas) A propriedade de


ordenação do CSS — list-style — descreve como são formados os itens de uma
lista e equivale ao elemento EM no HTML.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

 list-style: especifica todas as propriedades de lista em uma única declaração. Pode


definir uma imagem como sendo o marcador da lista; pode também definir o
posicionamento de um marcador; ou pode definir o tipo de marcador da lista.
Pessoal, o que eu quero dizer com o tipo de marcador? Quem usa Word sabe!
a bolinha, quadradinho, entre outros como mostra a imagem abaixo.

Conforme vimos em aula, list-style especifica todas as propriedades de lista em uma


única declaração – eles se aplicam a listas ordenadas ou não-ordenadas. Seria
equivalente aos elementos UL e OL do HTML.

Gabarito: E

(CESPE – – HEMOBRÁS – Analista de Sistemas) É recomendado o uso da


propriedade CSS2 font-size em vez do atributo em desuso size.

Comentários:

 font: especifica todas as propriedades de fonte em uma única declaração. Pode-


se modificar o estilo da fonte, a capitalização da fonte, largura ou peso da fonte,
o tamanho da fonte (desde o CSS1), a família da fonte, entre outros. Para tal,
utilizam-se uma série de propriedades: font-family, font-size, font-style, font-variant ou font-
weight. Bacana, pessoal?

Conforme vimos em aula, a propriedade font-size existe desde o CSS 1. Além disso,
não existe atributo size para controlar tamanho de fonte em nenhuma das versões.

Gabarito: E

(CESPE – – RPRO – Analista de Sistemas) O CSS é uma linguagem de


16712855225

estilo para apresentação de documentos HTML ou XML, suportada por todas as


versões de navegadores, sem necessidade de teste.

Comentários:

Anulado: “Item apresenta uma série de omissões e ambiguidades insuperáveis que


prejudicaram o seu julgamento objetivo”. Ainda assim, vamos julgar o item!

CSS é uma linguagem de estilo? Sim! Para apresentação de documentos HTML ou


XML? É para apresentação de documentos HTML, entretanto é possível utilizá-la
para apresentação de documentos XML. Suportada por todas as versões de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

navegadores? Não! É suportado por diversos navegadores modernos. Sem


necessidade de teste? Impossível de responder, visto que a questão não falou que
tipo de teste.

Gabarito: X

(CESPE – 2009 – UNIPAMPA – Analista de Sistemas) Cascading style sheets (CSS)


é uma recomendação do consórcio W3C para adicionar estilo a documentos
web.

Comentários:

Vale ressaltar que CSS é uma Especificação W3C, que é um consórcio de empresas
que buscam estabelecer padrões para a internet. Caramba, essa tecnologia é
fantástica demais! Não existem nenhuma desvantagem? Claro que existe! A maior e
mais grave de todas é que nem todos os navegadores implementam todas as
recomendações W3C do CSS integralmente.

Conforme vimos em aula, trata-se de uma recomendação da W3C.

Gabarito: C

(CESPE – 2010 – TRE/BA – Analista de Sistemas) Para a construção de páginas


web, pode-se combinar a linguagem HTML com diferentes tecnologias, entre
elas a CSS, que permite melhorar a apresentação do sítio.

Comentários:

Agora vocês têm uma dimensão do problema? Pois é, a mistura de estruturação e


16712855225

apresentação tornou-se uma dificuldade notória. Era, então, preciso dissociar a


linguagem de estruturação/conteúdo da linguagem de apresentação/formatação. E
assim surgiu o CSS (Cascading Style Sheets ou Folhas de Estilo em Cascata). A partir
de agora, tags HTML serão utilizadas apenas para estruturar o código, nada mais.

Conforme vimos em aula, está perfeito! Pode-se combinar HTML com diversas
tecnologias, sendo CSS uma das mais comuns para apresentação.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

10. (CESPE – 2013 – CNJ – Analista de Sistemas) O CSS é uma linguagem de estilo
que permite separar o formato e o conteúdo de documentos. Entretanto, as
definições do CSS não são suportadas igualmente por todos os navegadores.

Comentários:

Agora vocês têm uma dimensão do problema? Pois é, a mistura de estruturação e


apresentação tornou-se uma dificuldade notória. Era, então, preciso dissociar a
linguagem de estruturação/conteúdo da linguagem de apresentação/formatação. E
assim surgiu o CSS (Cascading Style Sheets ou Folhas de Estilo em Cascata). A partir
de agora, tags HTML serão utilizadas apenas para estruturar o código, nada mais.

Vale ressaltar que CSS é uma Especificação W3C, que é um consórcio de empresas
que buscam estabelecer padrões para a internet. Caramba, essa tecnologia é
fantástica demais! Não existem nenhuma desvantagem? Claro que existe! A maior e
mais grave de todas é que nem todos os navegadores implementam todas as
recomendações W3C do CSS integralmente.

Conforme vimos em aula, a linguagem realmente permite separar o formato do


conteúdo. De fato, nem sempre todas as recomendações da W3C são
implementadas integralmente pelos fabricantes de navegadores.

Gabarito: C

11. (CESPE – 2014 – TJ/SE – Analista de Sistemas) A organização de páginas web


deve distinguir conteúdo de apresentação mediante uso, por exemplo, das
linguagens HTML e CSS, respectivamente.

Comentários: 16712855225

Agora vocês têm uma dimensão do problema? Pois é, a mistura de estruturação e


apresentação tornou-se uma dificuldade notória. Era, então, preciso dissociar a
linguagem de estruturação/conteúdo da linguagem de apresentação/formatação. E
assim surgiu o CSS (Cascading Style Sheets ou Folhas de Estilo em Cascata). A partir
de agora, tags HTML serão utilizadas apenas para estruturar o código, nada mais.

Conforme vimos em aula, está perfeito! HTML cuida do conteúdo e da estruturação;


e CSS cuida da apresentação e formatação.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

12. (CESPE – 2014 – TJ/SE – Analista de Sistemas) Entre as maneiras de inclusão do


CSS em uma página HTML, a forma inline é a mais recomendada.

Comentários:

Uma Folha de Estilo é dita inline, quando as regras CSS são declaradas dentro da tag
de abertura do elemento HTML com uso do atributo style, sendo aplicada apenas a
um elemento HTML. Perde-se muitas vantagens das Folhas de Estilo, pois mistura-se
apresentação com marcação. Use este método excepcionalmente, por exemplo:
quando quiser aplicar um estilo a uma única ocorrência de um elemento.

Conforme vimos em aula, trata-se na verdade da forma menos recomendada (a


mais recomendada, é a externa!).

Gabarito: E

13. (CESPE – 2011 – TRE/ES - Analista de Sistemas Os estilos em CSS são


especificados como uma lista de pares de atributos de nome/valor, separados
por dois pontos, em que cada nome é separado por ponto e vírgula.

mentários:

seletor {
propriedade: valor;
}

Conforme vimos em aula, o ponto-e-vírgula separa declarações. Da maneira que a


questão foi escrita, entende-se que a lista de pares é separada por dois-pontos.
16712855225

Gabarito: E

14. (CESPE – 2013 – CNJ - Analista de Sistemas O CSS (cascading style sheets) é
uma linguagem de script interativa, orientada aos objetos contidos em uma
página HTML.

mentários:

Nenhum elemento ou atributo é utilizado para alterar a apresentação ou estilo do


conteúdo. Professor, quem faz a estilização do documento? O CSS! Ele nada mais é
que um arquivo independente do arquivo HTML, em que são declarados propriedades

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

e valores de estilização para os elementos da HTML. Isso, em geral, fica armazenado


em um arquivo .css, que contém todas as regras de estilo.

Conforme vimos em aula, essa questão não consegue estar mais errada! CSS é
linguagem de estilo e, não, de script. Interativa? Não faz sentido! Orientada a
objetos? Também não faz sentido!

Gabarito: E

15. (CESPE – 2013 – BACEN - Analista de Sistemas O CSS3 permite criar animações
e transições de estilo sem a necessidade de utilizar Flash ou Javascripts.

mentários:

Ele é extremamente funcional para construir animações, com efeitos de rotação,


movimento e transições de estilo; ele é capaz de fazer cálculos aritméticos simples;
ele possui seletores avançados; ele manipula diversas fontes; ele é capaz de definir
diversos tipos de bordas e planos de fundo; permite a divisão de textos em colunas –
tudo sem necessidade de Flash ou JavaScript! Para conhecer mais, visite o link:

Conforme vimos em aula, ele realmente permite criar animações e transições de


estilo sem precisar do Flash ou JavaScript.

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(FCC – 2 – TRE/SP– Analista de Sistemas) Uma das características


fundamentais do CSS é:

a) o gerenciador de stylesheets XLS.


b) a biblioteca de vínculos dinâmicos.
c) o encadeamento de estilos.
d) o modelo de objetos de documentos.
e) a linguagem unificada de dados.

Comentários:

E se a folha de estilo contiver duas regras que determinam coisas diferentes ao mesmo
elemento? Excelente pergunta! Se você disser que todos os parágrafos devem ter fonte
azul, mas depois especifica que um determinado parágrafo deverá ter fonte vermelha,
nós chegamos a um conflito! Aí entra o encadeamento do Efeito Cascata, que dá
nome a linguagem: Folhas de Estilo em Cascata. Vejamos um exemplo:

Conforme vimos em aula, uma das características fundamentais do CSS é o


Encadeamento de Estilos ou Efeito Cascata. Os autores definem um estilo
preferencial, ao passo que os leitores podem possuir um estilo pessoal que se ajuste
a alguma deficiência física humana ou tecnológica, por exemplo. Todos os outros
itens não fazem qualquer sentido.
16712855225

Gabarito: C

(FCC – 2 – MPE/RS – Analista de Sistemas) Sobre o CSS, considere:

I. Os códigos de estilo só podem ser armazenados em arquivos separados.


II. Estilos podem ser definidos como atributo de um elemento, os quais se
sobrepõem aos estilos do documento.
III. A associação de uma folha de estilo armazenada em um arquivo pode ser
feita por meio do elemento <LINK>.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Está correto o que consta APENAS em:

a) II e III.
b) I e II.
c) I e III.
d) III.
e) I.

Comentários:

Uma Folha de Estilo é dita Inline, quando as regras CSS são declaradas dentro da tag
de abertura do elemento HTML com uso do atributo style, sendo aplicada apenas a
um elemento HTML. Perde-se muitas vantagens das Folhas de Estilo, pois mistura-se
apresentação com marcação. Use este método excepcionalmente, por exemplo:
quando quiser aplicar um estilo a uma única ocorrência de um elemento.

Uma Folha de Estilo é dita incorporada ou interna, quando as regras CSS são
declaradas dentro da tag <style></style> na seção <head></head> (cabeçalho) do próprio
documento HTML. Ela é ideal para ser aplicada a uma única página, podendo mudar
a aparência de um único documento em que a Folha de Estilo está incorporada.
Vamos ver como é a sua sintaxe:

Uma Folha de Estilo é dita externa, quando as regras CSS são declaradas em um
documento separado (com extensão .css) do documento HTML. Ela é ideal para ser
aplicada a várias páginas, podendo mudar a aparência de um site inteiro ao mudar
regras de estilos contidas em um único arquivo, que deverá ser linkado <link> ou
importado ao documento HTML, dentro da seção <head></head> do documento.

(I) Conforme vimos em aula, está incorreto – basta lembrar do Estilo Inline e Interno;
16712855225

(II) Conforme vimos em aula, está perfeito – basta lembrar do Estilo Inline;
(III) Conforme vimos em aula, está perfeito!

Gabarito: A

(FCC – 2009 – TJ/SE – Analista de Sistemas) NÃO é uma propriedade para fonte
que se possa aplicar em uma folha de estilo CSS:

a) font-family.
b) font-variant.
c) font-style.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

d) font-face.
e) font-size.

Comentários:

Propriedade Descrição
font-family Define a família da fonte de texto.
font-size Define o tamanho da fonte de texto.
font-style Define o estilo da fonte de texto (itálico, oblíquo, etc).
font-variant Define a capitalização da fonte de texto.
font-weight Define a largura da fonte de texto (negrito, etc).

Conforme vimos em aula, todas estão corretas, exceto font-face. Essa é uma
propriedade do HTML (cuidado com peguinhas).

Gabarito: D

(FCC – – TJ/SE – Analista de Sistemas) As regras de CSS especificadas


dentro da tag de HTML que referem-se ao estilo inline:

a) podem ser aplicadas por link em alguma página HTML.


b) afetam outros documentos da página HTML.
c) podem ser aplicadas por link no cabeçalho da página HTML.
d) afetam outras tags da página HTML.
e) afetam somente a tag atual da página HTML.

Comentários:

Uma Folha de Estilo é dita Inline, quando as regras CSS são declaradas dentro da tag
16712855225

de abertura do elemento HTML com uso do atributo style sendo aplicada apenas a
um elemento HTML. Perde-se muitas vantagens das Folhas de Estilo, pois mistura-se
apresentação com marcação. Use este método excepcionalmente, por exemplo:
quando quiser aplicar um estilo a uma única ocorrência de um elemento.

Conforme vimos em aula, o estilo Inline é declarado dentro da tag de abertura de


um elemento HTML e afeta somente a tag atual em que está aplicado.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(FCC – – TJ/SE – Analista de Sistemas) A propriedade CSS background-


repeat controla o comportamento de repetição da imagem de fundo da tela e
NÃO possibilita assumir valor para que a imagem:

a) não se repita.
b) se repita tanto na horizontal quanto na vertical.
c) se repita na horizontal.
d) se repita na vertical.
e) se repita na diagonal.

Comentários:

Propriedade Descrição
background- Define a cor do plano de fundo.
color
background- Define um ou mais imagens de plano de fundo.
image
background- Define a posição das imagens de plano de fundo.
position
background- Define o tamanho das imagens de plano de fundo.
size
background- Define como repetir imagens de plano de fundo (sem repetição,
repeat repetição na vertical, repetição na horizontal ou em ambos).

Conforme vimos em aula, não é permitido em diagonal.

Gabarito: E

(FCC – – T/RS – Analista de Sistemas) Na implementação do CSS em um


website, a declaração <style type=”text/css”> é do tipo:
16712855225

a) interno.
b) externo.
c) incorporado.
d) atributo.
e) referenciado.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Uma Folha de Estilo é dita incorporada ou interna, quando as regras CSS são
declaradas dentro da tag <style></style> na seção <head></head> (cabeçalho) do próprio
documento HTML. Ela é ideal para ser aplicada a uma única página, podendo mudar
a aparência de um único documento em que a Folha de Estilo está incorporada.
Vamos ver como é a sua sintaxe:

Conforme vimos em aula, se vem dentro da tag <style></style> no cabeçalho da


página HTML, então é do tipo Interna ou Incorporada. Ué, mas a questão tem essas
duas opções (Letra A e Letra C)! É verdade, meus caros. E querem ficar mais
surpresos? A FCC não anulou a questão =[

Gabarito: A

(FCC - 2012 - TST - Técnico Judiciário - Programação O fragmento do código I


apresenta um arquivo:

Fragmento de Código I:

......
CATALOG
{
background-color: #ffffff;
width: 100%;
}
CD
{
display: block;
margin-bottom: 30pt;
margin-left: 0;
}
TITLE
{
color: #FF0000;
font-size: 20pt;
}
ARTIST
16712855225

{
color: #0000FF;
font-size: 20pt;
}
COUNTRY, PRICE, YEAR, COMPANY
{
display: block;
color: #000000;
margin-left: 20pt;
}
......

Fragmento de código II:

...
<?xml version="1.0" encoding="ISO8859-1" ?>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
<CATALOG>
<CD>
<TITLE>Minas</TITLE>
<ARTISTA>Milton Nascimento</ARTISTA>
<PAIS>BRAZIL</PAIS>
<COMPANIA>Columbia</COMPANIA>
<PRECO>15.90</PRECO>
<ANO>1985</ANO>
</CD>
</CATALOG>
...

Fragmento de Código III:

...
Minas Milton Nascimento Brazil Columbia 15.90 1985
...

a) CSS; o fragmento II, um arquivo XML; e o fragmento III, o resultado do


processamento do arquivo XML com a aplicação de um arquivo CSS,
apresentado no fragmento de código I.

b) CSS; o fragmento II, um arquivo XML; e o fragmento III, apresenta o resultado


do processamento do arquivo XML com a aplicação de um arquivo CSS, mas
não o apresentado no fragmento de código I.

c) XML; o fragmento II, um arquivo CSS; e o fragmento III, o resultado do


processamento do arquivo XML com a aplicação de um arquivo CSS,
apresentado no fragmento de código I.

d) XML; o fragmento II, um arquivo CSS; e o fragmento III, apresenta o resultado


do processamento do arquivo XML com a aplicação de um arquivo CSS,
apresentado acima no fragmento de código I.
16712855225

e) CSS; o fragmento II, um arquivo XML; e o fragmento III, apresenta o resultado


do processamento que não envolve nenhum dos arquivos tratados nos
exemplos.

Comentários:

O primeiro fragmento é CSS – basta ver a sequência de seletores com propriedades


e valores. O segundo fragmento é XML – basta ver a declaração XML e as tags
customizadas. Por fim, o terceiro fragmento é provavelmente o resultado da
aplicação de um Arquivo CSS sobre o Arquivo XML. Vamos ver?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Se o Fragmento I (CSS) fosse aplicado ao Fragmento II (XML), ele procuraria os


elementos <ARTIST>, <COUNTRY>, <PRICE>, <YEAR> e <COMPANY>, e não os encontraria. Por que?
Porque no XML o nome é <ARTISTA>, <PAIS>, <PRECO>, <ANO> e <COMPANIA>. Além disso, o
Fragmento 3 apresenta o país como “Brazil”. Ora, se o Fragmento 3 é o resultado
da aplicação do Fragmento 1 no Fragmento 2, então deveria haver alguma
propriedade no Fragmento 1 (no elemento COUNTRY) que torne a palavra “BRAZIL”
em “Brazil” (ex: text-transform: capitalize). No entanto, não há nada disso!

Ele apresenta três propriedades: display:block (que faz com que o elemento HTML
seja renderizado como um bloco); color:#000000 (que faz com que o elemento
HTML seja colorido de preto); e margin-left:20pt (que faz com que o elemento
HTML fique posicionado a 20pt da margem esquerda). Dessa forma, o Fragmento
3 apresenta o resultado do processamento do arquivo XML com a aplicação de um
CSS, mas não o apresentado no Fragmento I, mas outro! Bacana?

Gabarito: B

(FCC - 2013 - TRT - 12ª Região (SC) - Analista Judiciário - Tecnologia da


Informação Considere:

Arquivo Clientes.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>


<!DOCTYPE clientes[
<!ELEMENT clientes (cliente+)>
<!ELEMENT cliente (nome,telefone*,email?) >
<!ELEMENT nome (#PCDATA) >
<!ELEMENT telefone (#PCDATA) >
<!ELEMENT email (#PCDATA) >
]>

...I...

<clientes> 16712855225

<cliente>
<nome>Pedro Henrique</nome>
<email>ph@email.com.br</email>
</cliente>
<cliente>
<nome>Ana Luiza Hossaka</nome>
<telefone>5567-9087</telefone>
<telefone>9.7865-9896</telefone>
<email>mpfreitas@email.com.br</email>
</cliente>
<cliente>
<nome>Maria Paula Freitas</nome>
<telefone>9.4318-9432</telefone>
<email>mpfreitas@email.com.br</email>
</cliente>
</clientes>

Arquivo exibe_dados.css:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 91 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
clientes{padding-left: 20px; width: 100%;text-align:left}
cliente{display:block;width:100%;padding: 5px}
nome{color: #000000;font-size: 15pt;text-decoration:underline}
telefone,email{display:block;margin-top: 5pt}
telefone{color: #27408B;font-size: 14pt}
email{color: #8B1A1A;font-size: 12pt;font-style:italic}

Para que o arquivo exibe_dados.css seja utilizado para formatar e exibir o conteúdo do
arquivo Clientes.xml no navegador Internet Explorer, é necessário colocar na lacuna
I a instrução:

a) <link rel=”stylesheet” type=”text/css” href=”exibe_dados.css”/>


b) <@import type=”text/css” file=”exibe_dados”/>
c) <?xml-stylesheet type=”text/css” href=”exibe_dados.css”>
d) <%@include type=”text/css” file=”exibe_dados.css”%>
e) <?stylesheet type=”text/css” import=”exibe_dados.css”>

Comentários:

Por fim, é bom salientar que é possível utilizar CSS com XML! Em outras palavras,
você pode aplicar uma Folha de Estilo a um Documento XML. Para tal, devemos
declarar o Documento CSS no cabeçalho do Documento XML. Legal, não? Pois é, para
que vocês não confundam o modelo de declaração de outras linguagens, eu coloquei
três modelos abaixo:

CSS/XML: <?xml-stylesheet type=”text/css” href=”arquivo.css”>


XSL/XML: <?xml-stylesheet type=”text/xsl” href=”arquivo.xsl”>
XML/HTML: <link rel=”stylesheet” type=”text/css” href=”arquivo.css”>

Conforme vimos em aula, para aplicar CSS ao XML, é necessário associar o arquivo
exibe_dados.css à Declaração XML por meio do elemento <xml-stylesheet> e dos atributos
16712855225

type e href – portanto a resposta é a terceira opção!

Gabarito: C

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas Com a


utilização de Cascading Style Sheets (CSS), é possível configurar que a fonte de
um elemento HTML seja exibida em itálico, essa configuração é feita com a
utilização da propriedade:

a) font-weight.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 92 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

b) font-variant.
c) font-stretch.
d) font-style.
e) font-size.

Comentários:

Propriedade Descrição
font-family Define a família da fonte de texto.
font-size Define o tamanho da fonte de texto.
font-style Define o estilo da fonte de texto (itálico, oblíquo, etc).
font-variant Define a capitalização da fonte de texto.
font-weight Define a largura da fonte de texto (negrito, etc).

Conforme vimos em aula, trata-se da propriedade font-style.

Gabarito: D

10. (FCC - 2011 - TRT - 23ª REGIÃO (MT) - Analista Judiciário - Tecnologia da
Informação Se a imagem de fundo ficará fixa ou se rolará ao usar a barra de
rolagem, é definida na linguagem CSS pela propriedade background-

a) scroll.
b) fixed.
c) attachment.
d) position.
e) image.

Comentários: 16712855225

Propriedade Descrição
background- Define a cor do plano de fundo.
color
background- Define um ou mais imagens de plano de fundo.
image
background- Define a posição das imagens de plano de fundo.
position
background- Define o tamanho das imagens de plano de fundo.
size

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 93 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

background- Define como repetir imagens de plano de fundo (sem repetição,


repeat repetição na vertical, repetição na horizontal ou em ambos).
background- Define a área de posicionamento das imagens de plano de fundo
origin (mais à esquerda, mais à direita, etc).
background- Define a área de pintura das imagens de plano de fundo (se o plano
clip de fundo vai ocupar tudo, apenas uma área).
background- Define se as imagens de plano de fundo são fixas ou se movem com
attachment a barra de rolagem.

Conforme vimos em aula, trata-se da propriedade background-attachment.

Gabarito: C

11. (FCC - 2011 - TRT - 4ª REGIÃO (RS) - Analista Judiciário - Tecnologia da


Informação Considere:

I. Definida pela IETF-RFC1866, é usada para estruturar conteúdos.

II. Pode conter, simultaneamente, dados e descrição da estrutura do documento.

III. Usada para formatar conteúdos estruturados, é linguagem própria para estilos
que define o layout de documentos.

IV. Utiliza DTD como gramática.

As considerações apresentam características aplicáveis à tecnologia WEB e


correspondem, respectivamente, a

a) CSS, HTML, CSS e XML. 16712855225

b) XML, XML, CSS e XML.


c) CSS, XML, CSS e XML.
d) XML, XML, HTML e CSS.
e) HTML, XML, CSS e XML.

mentários:

Em outras palavras, podemos dizer que a Linguagem HTML foi criada essencialmente
para a estruturação de conteúdo, mas passou também a tratar da apresentação e
aparência. Isso se tornou um problema grave para os designers e projetistas. Como

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 94 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

assim, professor? Vamos exemplificar isso! Imaginem que o dono de uma empresa
liga para o web designer e diz:

(I) Conforme vimos em aula, HTML é utilizada para estruturar conteúdo;


(II) Foge um pouco do contexto da aula, mas XML contém dado e estrutura;

Agora vocês têm uma dimensão do problema? Pois é, a mistura de estruturação e


apresentação tornou-se uma dificuldade notória. Era, então, preciso dissociar a
linguagem de estruturação/conteúdo da linguagem de apresentação/formatação. E
assim surgiu o CSS (Cascading Style Sheets ou Folhas de Estilo em Cascata). A partir
de agora, tags HTML serão utilizadas apenas para estruturar o código, nada mais.

(III) Conforme vimos em aula, trata-se do CSS!


(IV) Foge também da aula, mas é o XML.

Gabarito: E

12. (FCC - 2010 - TRE-RS - Analista Judiciário - Analista de Sistemas Suporte Analise
os blocos de código seguintes:

Bloco 1:

<head>
<link rel="stylesheet" type="text/css" href="config.css">
</head>

Bloco 2:

<head>
<style type="text/css">
body {background-color:red}
p {margin-left: 20px}
</style>
</head> 16712855225

Bloco 3:

<p style="color: red; margin-left: 20px">


Este é um parágrafo
</p>

Esses blocos representam, respectivamente, as maneiras de inserir folhas de estilo:

a) interna, externa e inline.


b) inline, interna e externa.
c) externa, interna e inline.
d) externa e interna, somente.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 95 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

e) interna, somente.

Comentários:

Uma Folha de Estilo é dita inline, quando as regras CSS são declaradas dentro da tag
de abertura do elemento HTML com uso do atributo style, sendo aplicada apenas a
um elemento HTML. Perde-se muitas vantagens das Folhas de Estilo, pois mistura-se
apresentação com marcação. Use este método excepcionalmente, por exemplo:
quando quiser aplicar um estilo a uma única ocorrência de um elemento.

Uma Folha de Estilo é dita incorporada ou interna, quando as regras CSS são
declaradas dentro da tag <style></style> na seção <head></head> (cabeçalho) do próprio
documento HTML. Ela é ideal para ser aplicada a uma única página, podendo mudar
a aparência de um único documento em que a Folha de Estilo está incorporada.
Vamos ver como é a sua sintaxe:

Uma Folha de Estilo é dita externa, quando as regras CSS são declaradas em um
documento separado (com extensão .css) do documento HTML. Ela é ideal para ser
aplicada a várias páginas, podendo mudar a aparência de um site inteiro ao mudar
regras de estilos contidas em um único arquivo, que deverá ser linkado <link> ou
importado ao documento HTML, dentro da seção <head></head> do documento.

Conforme vimos em aula, trata-se da terceira opção. Galera, o primeiro bloco tem
um <link>, logo é externa; o segundo bloco está dentro no cabeçalho dentro do
<style></style>, logo é interna; e o terceiro está dentro da tag <p>, logo é inline.

Gabarito: C

13. (FCC - 2010 - TRE-RS - Técnico Judiciário - Programação de Sistemas Considere


16712855225

o trecho de folha de estilo do CSS, abaixo:

<style type="text/css">
body {
color: purple;
background-color: #d8da3d }
</style>

Em relação às regras de folhas de estilo do CSS, o trecho acima apresenta o número


de ocorrências de seletor, propriedade e valor, equivalente, respectivamente, a:

a) 2, 1, 3.
b) 2, 2, 2.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 96 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

c) 2, 1, 1.
d) 1, 2, 2.
e) 3, 2, 1.

mentários:

Uma declaração CSS segue a sintaxe apresentada a seguir:

seletor { propriedade: valor; }

Conforme vimos em aula, temos um seletor (body); duas propriedades (color e


background-color); e dois valores (purple e #d8da3d).

Gabarito: D

14. (FCC - 2010 - BAHIAGÁS - Analista de Processos Organizacionais - Análise de


Sistemas As regras CSS no cabeçalho do documento, que afetam somente a
página HTML atual, são definidas no método denominado:

a) inline.
b) offline.
c) externo.
d) incorporado.
e) personalizado.

mentários:

Uma Folha de Estilo é dita incorporada ou interna, quando as regras CSS são
declaradas dentro da tag <style></style> na seção <head></head> (cabeçalho) do próprio
16712855225

documento HTML. Ela é ideal para ser aplicada a uma única página, podendo mudar
a aparência de um único documento em que a Folha de Estilo está incorporada.
Vamos ver como é a sua sintaxe:

Conforme vimos em aula, trata-se da Folha de Estilo Incorporada (Interna)

Gabarito: D

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 97 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(ESAF - 2010 - CVM - Analista de Sistemas - prova 2 O CSS é:

a) o padrão MVC para modificação da representação audiovisual para as páginas


web.

b) o padrão W3C de definição da apresentação visual para as páginas web.

c) o mesmo que cascading spread system.

d) o agente de definição da programação de páginas web.

e) o componente WMW de gestão de páginas de monitoramento.

Comentários:

(a) Errado, ele não se trata de um Padrão MVC;


(b) Certo, é um Padrão W3C para definição da apresentação visual para páginas;
(c) Errado, é até engraçado – na verdade, a sigla é para Cascading Style Sheets;
(d) Errado, não é definição da programação, mas de apresentação de páginas web;
(e) Errado, esse item não faz qualquer sentido.

16712855225
Gabarito: B

(FGV – 2013 – ALEMA – Analista de Sistemas) Cascading Style Sheet (CSS) é uma
linguagem de estilo, usada para descrever a apresentação de um documento
escrito em uma linguagem de marcação como HTML, XHTML ou XML. Nesse
contexto, as cores são um aspecto importante na apresentação de conteúdo de
forma visual. Na web aplicam‐se cores ao texto e ao background, por exemplo.

No CSS, {color: #000000} e {color: rgb(0,255,0)} criam texto, respectivamente, nas


cores:

a) preta e azul.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 98 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

b) branca e azul.
c) preta e verde.
d) branca e verde.
e) preta e vermelha.

Comentários:

Essa questão é legal! Observem que podemos implementar cores por meio de
Hexadecimal (Ex: #000000) e RGB (Ex: 0,255,0). Vamos começar pelo segundo caso:

- Notem que temos três números separados por vírgulas. O primeiro número se
refere a Red (RGB), o segundo a Green (RGB) e o terceiro a Blue (RGB). Em nosso
16712855225

exemplo, temos 0 de Red, 255 de Green e 0 de Blue, logo o texto será VERDE.

- Notem que temos seis números que, na verdade, são três hexadecimais. Eles
seguem a mesma ordem do RGB. Dessa forma, temos 0 de Red, 0 de Green e 0 de
Blue. Na luz, a ausência de cores é PRETO!

Gabarito: C

(FGV – 2014 – PROCEMPA – Analista de Sistemas) Durante o carregamento e


renderização de uma página web em navegadores como Google Chrome e

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 99 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Mozilla Firefox, a formatação e o posicionamento dos elementos é definida por


arquivos:

a) JavaScript.
b) DOM.
c) XHTML.
d) CSS.
e) CMS.

Comentários:

Agora vocês têm uma dimensão do problema? Pois é, a mistura de estruturação e


apresentação tornou-se uma dificuldade notória. Era, então, preciso dissociar a
linguagem de estruturação/conteúdo da linguagem de apresentação/formatação. E
assim surgiu o CSS (Cascading Style Sheets ou Folhas de Estilo em Cascata). A partir
de agora, tags HTML serão utilizadas apenas para estruturar o código, nada mais.

Conforme vimos em aula, trata-se do CSS!

Gabarito: D

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 100 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


HTML

(CESPE - 2012 - TRE-RJ - Técnico Judiciário - Programação de Sistemas) HTML


(hypertext markup language) é uma linguagem de programação, atualmente na
versão 5, muito utilizada para ambientes desktop.

(CESPE - 2010 - BRB – Analista de Sistemas A linguagem HTML é utilizada para


formatar o conteúdo de uma página da Internet e pode ser editada com o uso
de qualquer editor de texto.

(CESPE - 2013 – STF – Analista de Sistemas HTML5 é uma linguagem


multiplataforma que permitiu o desenvolvimento de aplicações web executadas
off-line e incorporou novos elementos de conteúdo específico, como <article>,
<footer>, <nav> e <section>.

ESPE - 2013 – FMP/RS – Analista de Sistemas A linguagem HTML em sua


versão 5 apresenta diversas novas características em relação às versões
anteriores dando uma maior potencialidade à linguagem. Dentre as
características abaixo qual delas NÃO é advinda da proposta de HTML5?

a) Implementação padrão em todos os browsers e com funcionalidade também


padrão e consistente em todos.

b) Define uma forma padrão de incorporar video e áudio.

c) Introdução de diversas APIs, entre elas a API Canvas que permite criar gráficos,
16712855225

desenhos, jogos e aplicações web.

d) Fornece maior interatividade sem a necessidade de Plugins.

e) Define novos tipos para o atributo type do comando INPUT usados em


formulários, tais como data/hora, números, autofocus e faixa de valores, entre
outros.

(CESPE - 2012 – UFBA – Analista de Sistemas O trecho de código HTML — <a


url=“http://www.ufba.br”>UFBA — permite criar um link no site.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 101 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(CESPE - 2014 – ANTAQ – Analista de Sistemas Alguns elementos do HTML5,


tais como o center e o font, são considerados obsoletos por serem utilizados
meramente para formatação, função que pode ser realizada por meio de CSS.

(CESPE – 2013 – BACEN – Analista de Sistemas O exemplo abaixo está escrito


corretamente em HTML 5 e o atributo required obriga o usuário a escolher uma
cor para que o formulário seja enviado.

<label>Cor:
<select name=cor required>
<option value="">Escolha um
<option>Vermelho
<option>Verde
<option>Azul
</select>
</label>

(CESPE – 2014 – ANATEL – Analista de Sistemas Na linguagem HTML, para


inserir uma imagem, utiliza-se a tag <img />, que pode ser aberta e fechada no
mesmo bloco da tag, sendo também necessário usar o comando src para que o
navegador obtenha o endereço da imagem.

(CESPE – 2014 – ANATEL – Analista de Sistemas No HTML 5, a tag <rp> é usada


para definir o que deve ser mostrado na hipótese de determinado browser não
suportar anotações ruby.

10. (CESPE – – STF – Analista de Sistemas) Para o elemento form da linguagem


HTML, são válidos os atributos onsubmit, action e method. "GET" e "POST" são
valores válidos para o atributo method.
16712855225

11. (CESPE – 2013 – MPOG – Analista de Sistemas) Elementos em formato SVG


podem ser embutidos diretamente em uma página HTML usando HTML5.

12. (CESPE – 2013 – UNIPAMPA – Analista de Sistemas) A partir do advento do


HTML5 (Hypertext Markup Language versão 5), todos os servidores web tiveram
de ser atualizados para suportar novas características introduzidas por essa nova
versão de páginas web.

13. (CESPE – 2007 – IEMA – Analista de Sistemas) O termo html corresponde a uma
linguagem de programação que permite a elaboração de páginas da Web que

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 102 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

não tenham figura, mas não permite elaborar páginas da Web que contenham
figuras, tabelas ou hyperlinks.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 103 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


HTML

(FCC - 2012 - TRT - 11ª Região (AM) - Técnico Judiciário - Tecnologia da


Informação Em HTML, elementos <Option> descrevem as possíveis opções de
escolha para uma lista criada pelo elemento <Select>. Dentre os atributos do
elemento <Option>, é INCORRETO dizer que consta o atributo:

a) label.
b) name.
c) disabled.
d) selected.
e) value.

(FCC - 2011 - TRT - 14ª Região (RO e AC) - Analista Judiciário - Tecnologia da
Informação) É uma tag HTML que conta com os atributos href e name para
possibilitar o estabelecimento de hiperligações (link), para outro trecho de um
documento, para outra página de Internet ou mesmo um endereço de e-mail:

a) <a>
b) <b>
c) <meta>
d) <head>
e) <i>

(FCC - 2010 - - - Agente Legislativo de Serviços Técnicos e Administrativos


- Processamento de Dados A sintaxe correta da instrução utilizada para inserir
16712855225

comentário em um código HTML é:

a) echo comentário
b) // comentário
c) /* comentário */
d) <%-- comentário --%>
e) <!-- comentário -->

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 104 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A linguagem HTML, para produzir páginas na Web, trata- se de uma
linguagem do tipo:

a) de marcação.
b) de script.
c) procedural.
d) orientada a eventos.
e) orientada a objetos.

(FCC – 2014 – TRT/1 – Analista de Sistemas) Considere o programa a seguir,


elaborado na linguagem HTML:

<html>
<body>
<p><a href="#heading1">Parte 1</a></p>
<h1 id="heading1">Parte 1 do site</h1>
<p>Texto da Parte 1</p>
</body>
</html>

A função da 3ª e 4ª linhas é:

a) criar um link interno, para a região com o nome "Parte 1 do site".


b) criar o título "Parte 1" que apareça da barra do navegador.
c) abrir o arquivo texto "Parte 1" e exibi-lo após o cabeçalho "Parte 1 do site".
d) exibir a imagem Parte1.jpg como plano de fundo da página.
e) escrever na tela "Parte 1" em letras grandes e "Parte 1 do site" em letras
pequenas.

(FCC – 2014 – TRT/1 – Analista de Sistemas) Deseja-se que uma página criada a
partir da linguagem HTML, apresente o seguinte texto e figura:
16712855225

Para tanto, elaborou-se o seguinte programa:

<html>
<body>
comando x

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 105 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
<p>Casa térrea em terreno de 500 m2, 180 m2 de área construída, com 3 quartos (1
suite), banheiro, salas para
3 ambientes, lavabo, copa-cozinha, área de serviço, quintal e vaga para 3 carros.</p>
</body>
</html>

Supondo que a imagem da casa se encontre no arquivo casa123.jpg, um


comando que poderia ser colocado no lugar do comando x, para apresentar o
resultado desejado é:

a) <img =casa123.jpg style right/>


b) <img src="casa123.jpg" style= "float:right;" />
c) <img src=casa123.jpg style= place:right; />
d) <img=”casa123.jpg” place=”right”/>
e) <img=casa123.jpg style align =right/>

(FCC - 2010 - - - Agente Legislativo de Serviços Técnicos e Administrativos


- Processamento de Dados Muitos atributos de tags nas novas versões da
linguagem HTML foram depreciados em favor do uso de:

a) scripts executados do lado do cliente.


b) folhas de estilo.
c) scripts executados do lado do servidor.
d) linguagens de marcação extensíveis.
e) novas bibliotecas de tags.

(FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da


Informação As tabelas são compostas de linhas, dentro das quais são colocadas
células que são responsáveis pelo controle do conteúdo envolvido pela tabela.
A tag TH é responsável por:
16712855225

a) determinar a largura da tabela ou da célula.


b) determinar a altura da tabela ou da célula.
c) determinar a linha.
d) marcar o texto da célula com negrito e posicioná-lo no centro do alinhamento
horizontal.
e) determinar os atributos da tabela.

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web) Em HTML, as tags <UL> e <LI> permitem criar listas:

a) de interrogação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 106 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

b) ordenadas.
c) não-ordenadas.
d) de definição.
e) de frames.

10. (FCC - 2010 - TRE-RS - Técnico Judiciário - Programação de Sistemas) Assinale a


tag HTML correta:

a) <a href=”http://www.tre-rs.gov.br”<b>TRE-RS</b></a>
b) <a href=”http://www.tre-rs.gov.br”><B>TRE-RS</b></A>
c) <link: “http://www.tre-rs.gov.br”><title>TRE-RS</b></a>
d) <a href=http://www.tre-rs.gov.br><b>TRE-RS</b></a>
e) <a href:link=http://www.tre-rs.gov.br”><b>TRE-RS</b></a>

11. (FCC - 2014 – TRT/RJ - Advogado) Deseja-se elaborar uma página com a
linguagem HTML, cuja estrutura do programa é apresentada a seguir:

<html>
<head>
</head>
<body>
</body>
</html>

Para que o título "Pagina 1" apareça na barra do navegador, a tag que deve ser
inserida, é:

a) < title>Pagina 1</title>, entre as linhas 1 e 2.


b) < title>Pagina 1</title>, entre as linhas 2 e 3.
c) < title>Pagina 1</title>, entre as linhas 3 e 4.
d) < p> Pagina 1</p>, entre as linhas 1 e 2.
16712855225

e) < p> Pagina 1</p>, entre as linhas 2 e 3.

12. (FCC – 2014 – TRT/RJ – Analista de Sistemas Analise o programa a seguir,


elaborado na linguagem HTML.

<html>
<body>
<p>Albert Einstein disse:
<q>A imaginação é mais importante
que o conhecimento.< /q></p>
</body>
</html>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 107 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Quando ele for aberto por um navegador que suporte HTML, será exibido na tela o
texto:

a) Albert Einstein disse: A imaginação é mais importante que o conhecimento.


b) Albert Einstein disse: A imaginação é mais importante que o conhecimento.
c) Albert Einstein disse: "A imaginação é mais importante que o conhecimento."
d) Albert Einstein disse: "A imaginação é mais importante que o conhecimento."
e) "Albert Einstein disse:A imaginação é mais importante que o conhecimento."

13. (FCC - 2012 – MPE/AP – Analista de Sistemas A linguagem HTML5 traz um


conjunto de novos valores possíveis para o atributo type do elemento <input>,
com objetivo de definir melhor os tipos de dados de entrada nos campos dos
formulários. Fazem parte desses novos valores: tel, url, email, date, time, number,

a) char, search, range, meter, color, week e month.


b) datetime, datetime-local, string, search e color.
c) search, datetime, month, week, datetime-local, range e color.
d) date-time, range, color, month, week e boolean.
e) datetime, month, week, meter, range, search, boolean e color.

14. (FCC - 2014 - SABESP – Analista de Sistemas São elementos da linguagem HTML
4.01 que não fazem mais parte da HTML5, ou seja, não são suportados em HTML:

a) applet e iframe.
b) font e frame.
c) center e option.
d) acronym e button.
e) frameset e fieldset.
16712855225

15. (FCC - 2014 – TRT/4ª – Analista de Sistemas A especificação da W3C para a


versão 5 da linguagem HTML NÃO traz um conjunto de elementos que eram
utilizados na versão anterior, e que são considerados obsoletos, como, por
exemplo, os elementos:

a) < frame>, < frameset >, < noframes > e < font >.
b) < table >, < th >, < tr > e < td>.
c) < meta >, < big >, < link > e < center >.
d) < acronym >, < applet >, < b> e < div >.
e) < frame >, < frameset >, < iframe> e < i >.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 108 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

16. (FCC - 2012 – AFTM/SP – Analista de Sistemas Na HTML5, o elemento <wbr>:

a) faz parte do grupo de novos elementos para definição de idioma. O texto no


interior do elemento <wbr> é interpretado como sendo escrito em português
brasileiro.

b) substitui o elemento <br> que define uma quebra de linha no local onde o
elemento for inserido.

c) especifica uma oportunidade de quebra de linha, ou seja, onde no texto será


adequado ter uma quebra de linha caso seja necessário.

d) indica que um texto não deve ser vinculado à direção de escrita do restante
do documento e permite indicar a direção de escrita desse texto.

e) indica que um texto deve ser circundado pelo restante do documento. Esse
texto deve ser relacionado com o restante do documento.

17. (FCC - 2012 – TRT/2ª – Analista de Sistemas Pedro está criando a página de um
artigo de revista utilizando HTML5 e deseja colocar um pequeno texto
relacionado ao assunto principal do artigo à esquerda, circundado pelo texto
principal. Consultando a documentação oficial da HTML5, Pedro decidiu usar o
elemento cuja descrição é apresentada a seguir:

This element represents a section of a page that consists of content that is


tangentially related to the content around the element, and which could be
considered separate from that content. Such sections are often represented as
sidebars in printed typography.
16712855225

Com base na descrição é possível concluir que o elemento escolhido por Pedro
foi:

a) <acronym>
b) <article>
c) <sidebar>
d) <aside>
e) <section>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 109 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

18. (FCC - 2012 – TRT/2ª – Analista de Sistemas No que concerne aos elementos da
HTML5 e suas funções, assinale a opção correta.

a) O elemento wbr permite representar um grupo de introdução ou elementos


de navegação, o que possibilita agrupar índices de conteúdos ou campos de
formulários.

b) O elemento datalist representa uma parte da página que pode ser distribuída
e reutilizada em serviços de RSS.

c) O elemento aside é um bloco de conteúdo que pode ser representado em


textos impressos, em anúncios de publicidade ou mesmo na criação de um
grupo de elementos nav e outras informações separadas do conteúdo principal
do website.

d) O elemento summary define uma nova seção genérica no documento,


possibilitado a divisão da página em várias seções, como introdução, destaque,
novidades, informação de contato ou chamadas para conteúdo interno.

e) O elemento track consiste em um grupo de títulos, que permite agrupar


elementos de título de H1 a H6 em múltiplos níveis, como título e subtítulos.

19. (FCC – 2015 – TCM/GO – Analista de Sistemas Um desenvolvedor está criando


um formulário em uma página web e deseja utilizar um novo elemento de
formulário adicionado na versão 5 da linguagem HTML, que especifica uma lista
drop-down de opções pré-definidas para um elemento <input>. O elemento
que este desenvolvedor deve utilizar é o:

a) <output> 16712855225

b) <ol>
c) <keygen>
d) <ul>
e) <datalist>

(FCC – 2015 – CNMP – Analista de Sistemas Um programa elaborado na


linguagem HTML apresenta a seguinte linha:

<!DOCTYPE HTML>

Sobre essa linha, é correto afirmar que ela:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 110 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

a) deve vir sempre após a tag <html>.


b) é uma tag que define o nome do arquivo que possui o programa.
c) especifica ao navegador o tipo de documento HTML que ele vai renderizar.
d) não atende corretamente a linguagem HTML, que não aceita o símbolo ! em
seus comandos.
e) indica que o arquivo com o programa-fonte possui a extensão doc.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 111 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


HTML

(FEPESE - 2014 – MPE/SC – Analista de Sistemas Identifique quais dos seguintes


elementos HTML não são suportados pelo HTML5 (possuem substitutos que
realizam a mesma função ou função similar no HTML).

1. <caption>
2. <center>
3. <font>
4. <frame>
5. <img>

Assinale a alternativa que indica todos os itens corretos.

a) São corretos apenas os itens 1, 2 e 3.


b) São corretos apenas os itens 1, 3 e 5.
c) São corretos apenas os itens 2, 3 e 4.
d) São corretos apenas os itens 2, 3 e 5.
e) São corretos apenas os itens 3, 4 e 5.

(VUNESP - 2012 – TJ/SP– Analista de Sistemas Em uma página Web escrita


utilizando a linguagem de marcação HTML (Hypertext Markup Language),
devem existir pelo menos quatro pares de TAGs. O TAG que deve iniciar o
arquivo da página é:

a) <HEAD> 16712855225

b) <HTML>
c) <TITLE>
d) <BEGIN>
e) <BODY>

(NCE – – UFRJ – Analista de Sistemas A linguagem mais utilizada na


construção de páginas de Internet é:

a) HTML;
b) C;
c) HTTP;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 112 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

d) Pascal;
e) SQL.

(ESAF – 2010 – CVM – Analista de Sistemas A linguagem de formatação


destinada a criar hipertextos pesquisáveis na Rede Mundial de Computadores e
que hoje é uma verdadeira norma de editoração multimídia em linha, é
conhecida pela sigla:

a) SIMD.
b) HTTPS.
c) IMPEL.
d) HTML.
e) MIMD.

(CESGRANRIO – 2012 – CMB – Analista de Sistemas) Um programador deseja


desenhar, utilizando HTML, três retângulos e um círculo. Que elemento HTML
permite criar uma área apropriada para esse desenho?

a) 2DShapes
b) canvas
c) header
d) p
e) xgraphbody

(CESGRANRIO – 2013 – IBGE – Analista de Sistemas) O elemento (tag) HTML


responsável por dar ênfase a um texto apresentado em um navegador web é o:

a) strong
b) footer 16712855225

c) th
d) thead
e) label

(CESGRANRIO – 0 – CMB – Analista de Sistemas) Um programador Web está


estudando a adoção de novas tecnologias e percebe que o HTML 5 introduziu
o elemento:

a) <canvas>
b) <ul>
c) <meta>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 113 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

d) <style>
e) <script>

(FGV – 2015 – TJ/SC – Analista de Sistemas) Em uma página HTML, deseja-se


colocar a figura contida no arquivo "x.png" como link para "www.site.com". O
comando HTML a ser usado é:

a) < a href="www.site.com">"x.png"< /a>;


b) < a href="www.site.com"> < img src="x.png"/>< /a>;
c) < a link="www.site.com">"x.png"< /a>;
d) < a link="www.site.com"> < img "x.png"/>< /a>;
e) < a http="www.site.com">< img file="x.png"/>< /a>.

(FGV – 2014 – PROCEMPA – Analista de Sistemas) A estrutura semântica das


páginas representa um dos principais cuidados com a acessibilidade de
conteúdo nos websites.

Para saber se a estrutura semântica nas páginas está correta, é necessário


verificar o código em:

a) HTML.
b) CSS.
c) JavaScript.
d) Flash.
e) jQuery.

10. (FGV – 2010 – DETRAN/RN – Analista de Sistemas) Assinale a alternativa que


contém, na linguagem HTML, a tag que delimita a área onde serão inseridas as
informações que serão exibidas no browser:
16712855225

a) <BODY>
b) </HEAD>
c) <LINK>
d) <META>
e) <HTML>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 114 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


CSS

(CESPE – 2006 – SGA/AC – Analista de Sistemas) Com relação a características


da tecnologia de folhas de estilo, CSS, assinale a opção incorreta.

a) Uma folha de estilo pode aplicar-se a mais de uma página HTML.

b) O indicador !important é usado em folhas de estilo para indicar que


determinada regra de estilo aplicável a um elemento específico deve ser
priorizada em detrimento de outras aplicáveis ao mesmo elemento.

c) O uso de cores em folhas de estilo pode usar a notação de cores por nome
(black, white, blue) bem como por valor RGB.

d) Folhas de estilo não permitem a seleção de elementos conforme o valor de


seus atributos.

(CESPE – – HEMOBRÁS – Analista de Sistemas) As CSS favorecem a


acessibilidade porque, entre outros aspectos, permitem aos usuários visualizar
documentos com as fontes e cores por eles definidas.

(CESPE – – HEMOBRÁS – Analista de Sistemas) O usuário pode ressaltar


informações usando o CSS por meio da criação de molduras dinâmicas em volta
do conteúdo.

(CESPE – – HEMOBRÁS – Analista de Sistemas) Os designers podem


16712855225

controlar o posicionamento absoluto e relativo de textos em uma página web


utilizando as CSS.

(CESPE – – HEMOBRÁS – Analista de Sistemas) A propriedade de


ordenação do CSS — list-style — descreve como são formados os itens de uma
lista e equivale ao elemento EM no HTML.

(CESPE – – HEMOBRÁS – Analista de Sistemas) É recomendado o uso da


propriedade CSS2 font-size em vez do atributo em desuso size.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 115 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

(CESPE – – SERPRO – Analista de Sistemas) O CSS é uma linguagem de


estilo para apresentação de documentos HTML ou XML, suportada por todas as
versões de navegadores, sem necessidade de teste.

(CESPE – 2009 – UNIPAMPA – Analista de Sistemas) Cascading style sheets (CSS)


é uma recomendação do consórcio W3C para adicionar estilo a documentos
web.

(CESPE – 2010 – TRE/BA – Analista de Sistemas) Para a construção de páginas


web, pode-se combinar a linguagem HTML com diferentes tecnologias, entre
elas a CSS, que permite melhorar a apresentação do sítio.

10. (CESPE – 2013 – CNJ – Analista de Sistemas) O CSS é uma linguagem de estilo
que permite separar o formato e o conteúdo de documentos. Entretanto, as
definições do CSS não são suportadas igualmente por todos os navegadores.

11. (CESPE – 2014 – TJ/SE – Analista de Sistemas) A organização de páginas web


deve distinguir conteúdo de apresentação mediante uso, por exemplo, das
linguagens HTML e CSS, respectivamente.

12. (CESPE – 2014 – TJ/SE – Analista de Sistemas) Entre as maneiras de inclusão do


CSS em uma página HTML, a forma inline é a mais recomendada.

13. (CESPE – – TRE/ES - Analista de Sistemas Os estilos em CSS são


especificados como uma lista de pares de atributos de nome/valor, separados
por dois pontos, em que cada nome é separado por ponto e vírgula.

14. (CESPE – 2013 – CNJ - Analista de Sistemas O CSS (cascading style sheets) é
uma linguagem de script interativa, orientada aos objetos contidos em uma
16712855225

página HTML.

15. (CESPE – 2013 – BACEN - Analista de Sistemas O CSS3 permite criar animações
e transições de estilo sem a necessidade de utilizar Flash ou Javascripts.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 116 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


CSS

(FCC – 2 – TRE/SP– Analista de Sistemas) Uma das características


fundamentais do CSS é:

a) o gerenciador de stylesheets XLS.


b) a biblioteca de vínculos dinâmicos.
c) o encadeamento de estilos.
d) o modelo de objetos de documentos.
e) a linguagem unificada de dados.

(FCC – 2 – MPE/RS – Analista de Sistemas) Sobre o CSS, considere:

I. Os códigos de estilo só podem ser armazenados em arquivos separados.


II. Estilos podem ser definidos como atributo de um elemento, os quais se
sobrepõem aos estilos do documento.
III. A associação de uma folha de estilo armazenada em um arquivo pode ser
feita por meio do elemento <LINK>.

Está correto o que consta APENAS em:

a) II e III.
b) I e II.
c) I e III.
d) III.
e) I.

(FCC – 2009 – TJ/SE – Analista de Sistemas) NÃO é uma propriedade para fonte
16712855225

que se possa aplicar em uma folha de estilo CSS:

a) font-family.
b) font-variant.
c) font-style.
d) font-face.
e) font-size.

(FCC – – TJ/SE – Analista de Sistemas) As regras de CSS especificadas


dentro da tag de HTML que referem-se ao estilo inline:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 117 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

a) podem ser aplicadas por link em alguma página HTML.


b) afetam outros documentos da página HTML.
c) podem ser aplicadas por link no cabeçalho da página HTML.
d) afetam outras tags da página HTML.
e) afetam somente a tag atual da página HTML.

(FCC – – TJ/SE – Analista de Sistemas) A propriedade CSS background-


repeat controla o comportamento de repetição da imagem de fundo da tela e
NÃO possibilita assumir valor para que a imagem:

a) não se repita.
b) se repita tanto na horizontal quanto na vertical.
c) se repita na horizontal.
d) se repita na vertical.
e) se repita na diagonal.

(FCC – – TRT/RS – Analista de Sistemas) Na implementação do CSS em um


website, a declaração <style type=”text/css”> é do tipo:

a) interno.
b) externo.
c) incorporado.
d) atributo.
e) referenciado.

(FCC - 2012 - TST - Técnico Judiciário - Programação O fragmento do código I


apresenta um arquivo:
16712855225

Fragmento de Código I:

......
CATALOG
{
background-color: #ffffff;
width: 100%;
}
CD
{
display: block;
margin-bottom: 30pt;
margin-left: 0;
}
TITLE
{
color: #FF0000;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 118 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07
font-size: 20pt;
}
ARTIST
{
color: #0000FF;
font-size: 20pt;
}
COUNTRY, PRICE, YEAR, COMPANY
{
display: block;
color: #000000;
margin-left: 20pt;
}
......

Fragmento de código II:

...
<?xml version="1.0" encoding="ISO8859-1" ?>
<CATALOG>
<CD>
<TITLE>Minas</TITLE>
<ARTISTA>Milton Nascimento</ARTISTA>
<PAIS>BRAZIL</PAIS>
<COMPANIA>Columbia</COMPANIA>
<PRECO>15.90</PRECO>
<ANO>1985</ANO>
</CD>
</CATALOG>
...

Fragmento de Código III:

...
Minas Milton Nascimento Brazil Columbia 15.90 1985
...

a) CSS; o fragmento II, um arquivo XML; e o fragmento III, o resultado do


processamento do arquivo XML com a aplicação de um arquivo CSS,
apresentado no fragmento de código I. 16712855225

b) CSS; o fragmento II, um arquivo XML; e o fragmento III, apresenta o resultado


do processamento do arquivo XML com a aplicação de um arquivo CSS, mas
não o apresentado no fragmento de código I.

c) XML; o fragmento II, um arquivo CSS; e o fragmento III, o resultado do


processamento do arquivo XML com a aplicação de um arquivo CSS,
apresentado no fragmento de código I.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 119 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

d) XML; o fragmento II, um arquivo CSS; e o fragmento III, apresenta o resultado


do processamento do arquivo XML com a aplicação de um arquivo CSS,
apresentado acima no fragmento de código I.

e) CSS; o fragmento II, um arquivo XML; e o fragmento III, apresenta o resultado


do processamento que não envolve nenhum dos arquivos tratados nos
exemplos.

(FCC - 2013 - TRT - 12ª Região (SC) - Analista Judiciário - Tecnologia da


Informação Considere:

Arquivo Clientes.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>


<!DOCTYPE clientes[
<!ELEMENT clientes (cliente+)>
<!ELEMENT cliente (nome,telefone*,email?) >
<!ELEMENT nome (#PCDATA) >
<!ELEMENT telefone (#PCDATA) >
<!ELEMENT email (#PCDATA) >
]>

...I...

<clientes>
<cliente>
<nome>Pedro Henrique</nome>
<email>ph@email.com.br</email>
</cliente>
<cliente>
<nome>Ana Luiza Hossaka</nome>
<telefone>5567-9087</telefone>
<telefone>9.7865-9896</telefone>
<email>mpfreitas@email.com.br</email>
</cliente>
<cliente>
<nome>Maria Paula Freitas</nome>
<telefone>9.4318-9432</telefone>
<email>mpfreitas@email.com.br</email>
</cliente> 16712855225

</clientes>

Arquivo exibe_dados.css:

clientes{padding-left: 20px; width: 100%;text-align:left}


cliente{display:block;width:100%;padding: 5px}
nome{color: #000000;font-size: 15pt;text-decoration:underline}
telefone,email{display:block;margin-top: 5pt}
telefone{color: #27408B;font-size: 14pt}
email{color: #8B1A1A;font-size: 12pt;font-style:italic}

Para que o arquivo exibe_dados.css seja utilizado para formatar e exibir o conteúdo do
arquivo Clientes.xml no navegador Internet Explorer, é necessário colocar na lacuna
I a instrução:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 120 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

a) <link rel=”stylesheet” type=”text/css” href=”exibe_dados.css”/>


b) <@import type=”text/css” file=”exibe_dados”/>
c) <?xml-stylesheet type=”text/css” href=”exibe_dados.css”>
d) <%@include type=”text/css” file=”exibe_dados.css”%>
e) <?stylesheet type=”text/css” import=”exibe_dados.css”>

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas Com a


utilização de Cascading Style Sheets (CSS), é possível configurar que a fonte de
um elemento HTML seja exibida em itálico, essa configuração é feita com a
utilização da propriedade:

a) font-weight.
b) font-variant.
c) font-stretch.
d) font-style.
e) font-size.

10. (FCC - 2011 - TRT - 23ª REGIÃO (MT) - Analista Judiciário - Tecnologia da
Informação Se a imagem de fundo ficará fixa ou se rolará ao usar a barra de
rolagem, é definida na linguagem CSS pela propriedade background-

a) scroll.
b) fixed.
c) attachment.
d) position.
e) image.

11. (FCC - 2011 - TRT - 4ª REGIÃO (RS) - Analista Judiciário - Tecnologia da


Informação Considere: 16712855225

I. Definida pela IETF-RFC1866, é usada para estruturar conteúdos.

II. Pode conter, simultaneamente, dados e descrição da estrutura do documento.

III. Usada para formatar conteúdos estruturados, é linguagem própria para estilos
que define o layout de documentos.

IV. Utiliza DTD como gramática.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 121 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

As considerações apresentam características aplicáveis à tecnologia WEB e


correspondem, respectivamente, a

a) CSS, HTML, CSS e XML.


b) XML, XML, CSS e XML.
c) CSS, XML, CSS e XML.
d) XML, XML, HTML e CSS.
e) HTML, XML, CSS e XML.

12. (FCC - 2010 - TRE-RS - Analista Judiciário - Analista de Sistemas Suporte Analise
os blocos de código seguintes:

Bloco 1:

<head>
<link rel="stylesheet" type="text/css" href="config.css">
</head>

Bloco 2:

<head>
<style type="text/css">
body {background-color:red}
p {margin-left: 20px}
</style>
</head>

Bloco 3:

<p style="color: red; margin-left: 20px">


Este é um parágrafo
</p>

Esses blocos representam, respectivamente, as maneiras de inserir folhas de estilo:

a) interna, externa e inline.


b) inline, interna e externa.
16712855225

c) externa, interna e inline.


d) externa e interna, somente.
e) interna, somente.

13. (FCC - 2010 - TRE-RS - Técnico Judiciário - Programação de Sistemas Considere


o trecho de folha de estilo do CSS, abaixo:

<style type="text/css">
body {
color: purple;
background-color: #d8da3d }
</style>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 122 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

Em relação às regras de folhas de estilo do CSS, o trecho acima apresenta o número


de ocorrências de seletor, propriedade e valor, equivalente, respectivamente, a:

a) 2, 1, 3.
b) 2, 2, 2.
c) 2, 1, 1.
d) 1, 2, 2.
e) 3, 2, 1.

14. (FCC - 2010 - BAHIAGÁS - Analista de Processos Organizacionais - Análise de


Sistemas As regras CSS no cabeçalho do documento, que afetam somente a
página HTML atual, são definidas no método denominado:

a) inline.
b) offline.
c) externo.
d) incorporado.
e) personalizado.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 123 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


CSS

(ESAF - 2010 - CVM - Analista de Sistemas - prova 2 O CSS é:

a) o padrão MVC para modificação da representação audiovisual para as páginas


web.

b) o padrão W3C de definição da apresentação visual para as páginas web.

c) o mesmo que cascading spread system.

d) o agente de definição da programação de páginas web.

e) o componente WMW de gestão de páginas de monitoramento.

(FGV – 2013 – ALEMA – Analista de Sistemas) Cascading Style Sheet (CSS) é uma
linguagem de estilo, usada para descrever a apresentação de um documento
escrito em uma linguagem de marcação como HTML, XHTML ou XML. Nesse
contexto, as cores são um aspecto importante na apresentação de conteúdo de
forma visual. Na web aplicam‐se cores ao texto e ao background, por exemplo.

No CSS, {color: #000000} e {color: rgb(0,255,0)} criam texto, respectivamente, nas


cores:

a) preta e azul.
b) branca e azul. 16712855225

c) preta e verde.
d) branca e verde.
e) preta e vermelha.

(FGV – 2014 – PROCEMPA – Analista de Sistemas) Durante o carregamento e


renderização de uma página web em navegadores como Google Chrome e
Mozilla Firefox, a formatação e o posicionamento dos elementos é definida por
arquivos:

a) JavaScript.
b) DOM.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 124 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

c) XHTML.
d) CSS.
e) CMS.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 125 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


HTML

1 2 3 4 5 6 7 8 9 10
E C C A E C C C C C
11 12 13 14 15 16 17 18 19 20
C E E

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


HTML

1 2 3 4 5 6 7 8 9 10
B A E A A B B D C B
11 12 13 14 15 16 17 18 19 20
B C C B A C D C E C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


HTML

1 2 3 4 5 6 7 8 9 10
C B A D B A A B A A

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


16712855225

CSS

1 2 3 4 5 6 7 8 9 10
D C C C E E X C C C
11 12 13 14 15 16 17 18 19 20
C E E E C

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 126 de 127


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 07

CSS

1 2 3 4 5 6 7 8 9 10
C A D E E A B C D C
11 12 13 14 15 16 17 18 19 20
E C D D

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


CSS

1 2 3 4 5 6 7 8 9 10
B C D

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 127 de 127


Aula 08

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

AULA 08

SUMÁRIO PÁGINA
Apresentação 01
- Javascript 02
- Jquery 35
- AJAX (Asynchronous Javascript And XML) 44
Lista de Exercícios Comentados 68
Gabarito 94

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

JAVASCRIPT

A linguagem de marcação HTML destina-se a estruturar uma página web, não se


devendo empregá-la para adicionar estilos ou apresentação visual aos elementos
que constituem a página, sendo tais tarefas função das folhas de estilo em cascata.
Ela também não possui funcionalidades que permitam adicionar interatividade
avançada à página, sendo tal tarefa função das linguagens de programação.

Javascript foi criado pela Netscape em parceria com a Sun Microsystems, com a
finalidade de fornecer um meio de adicionar interatividade a uma página web. A
primeira versão, denominada JavaScript 1.0, foi lançada em 1995 e implementada
em março de 1996 no navegador Netscape Navigator 2.0 quando o mercado era
dominado pela Netscape.

Logo a seguir, veio a época da chamada guerra dos browsers, cujos efeitos nocivos
se fazem sentir até os dias atuais. Para não fugir à regra, a Microsoft, em resposta à
Netscape, criou a linguagem JScript baseada em Visual Basic cuja primeira versão
denominada JScript 1.0 e foi lançada com o navegador Internet Explorer 3.0. Não há
como fazer funcionar um formulário HTML com o uso de elementos HTML.

A HTML limita-se a criar os rótulos e campos de um formulário para serem


preenchidos pelo usuário e nada mais. Com HTML, não conseguimos processar os
dados nem mesmo enviá-los ao servidor ou a outra máquina qualquer. Para cumprir
essas tarefas, é necessário utilizar um programa que consiga manipular e processar
os dados. Entendido?

Um desenvolvedor web moderno deve saber três linguagens de programação:


16712855225

HTML, para definir o conteúdo das páginas; CSS para especificar o layout das
páginas; e Javascript para programar o comportamento das páginas. Trata-se de
uma linguagem extremamente abrangente, funcionando em computadores,
servidores, laptops, tablets, smartphones, entre outros1.

Existe um conceito muito importante chamado Document Object Model (DOM), que
é uma especificação W3C para representar e interagir com objetos em HTML,
XHTML e XML. Pois é, a primeira grande vantagem do Javascript é a sua capacidade

1
Javascript é a linguagem de script padrão de todos os navegadores modernos e do HTML5. Apesar disso, ela
não é utilizada apenas em Páginas HTML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

de manipular o DOM de Páginas HTML por meio de diversos métodos. Ele torna
possível criar, alterar, deletar e copiar vários elementos HTML.

Como ele faz isso? Ele é capaz de modificar valores de atributos de um Documento
HTML. Ademais, ele é capaz de modificar Folhas de Estilos do CSS. Incrível, não? Ele
também é bastante utilizado para validar entradas de dados do usuário. Como
assim, professor? Eventualmente, um formulário pede sua Data de Nascimento! Ele
é capaz de receber seus dados e verificar se está no formato correto (dd/mm/aaaa).

Podemos dizer que HTML é para conteúdo; CSS é para


apresentação; e Javascript é para Interatividade!
Professor, ouvi dizer que Javascript faz parte da
Plataforma Java! Ouviu errado! O primeiro é uma
linguagem de scripts de propósito específico,
dinamicamente tipada, baseada em protótipos, com
escopo de função, que não precisa ser compilada. O
segundo é uma linguagem de programação de
propósito geral, estaticamente tipada, baseada em
classes, com escopo de bloco, que precisa ser compilada.

IMPORTANTE

Javascript é uma linguagem de uso específico! Ela foi desenvolvida para aprimorar a
experiência dos usuários nos navegadores. Ela nunca foi uma linguagem de propósito geral
(Ex: Java, capaz de criar aplicações inteiras). No entanto, recentemente o Javascript tem se
enveredado para esse propósito, por meio das JSLibs. Perceba: "JSLibs is a standalone
Javascript development runtime environment for using Javascript as a general-purpose
scripting language"! 16712855225

Há uma frase em inglês que eu acredito que defina bem a diferença entre ambas
as linguagens: “Java and Javascript are as similar as Car and Carpet”. Isso quer dizer
que as linguagens são completamente diferentes e uma das poucas coisas em
comum é o prefixo do seu nome (Java), e só! Captaram a mensagem? Pois é, não
caiam em pegadinha de banca alguma agora.

JavaScript é uma linguagem client-side (desenvolvida para rodar no lado do cliente),


i.e., a interpretação e o funcionamento da linguagem dependem de funcionalidades
hospedadas no navegador do usuário (ele contém um interpretador JavaScript).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Com o JavaScript, pode-se manipular conteúdo e apresentação; manipular o


navegador; interagir com formulários; e interagir com outras linguagens dinâmicas.

 Javascript: Escopo

Para escrever código Javascript, não há necessidade de instalar um software


especial. Escrevemos com um editor de textos simples e visualizamos o resultado
em um navegador. Arquivos escritos com o uso dessa linguagem devem ser
separados com a extensão .js e são criados para serem executados dentro de um
Arquivo HTML. O código deve sempre vir entre as tags <script> e </script>:

Existem três maneiras de inserir Javascript em HTML:

 Externo: escrever o script em um arquivo externo com extensão .js e inserir com
um link na tag <script> dentro da seção <body> ou <head> do documento2.

 Incorporado: também conhecida como interna, insere-se o script na seção


<head> do documento. 16712855225

2
A

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

 Inline: insere-se o script diretamente na seção <body> do documento. Não é


recomendada, pelo princípio da separação das camadas.

16712855225

As modernas práticas de desenvolvimento preconizam o uso de scripts externos a


serem linkados ao documento. Cria-se um ou mais arquivos contendo os scripts e
gravados com a extensão .js e usa-se o elemento script na seção head do
documento para linká-lo à página. Essa técnica permite linkar o script a várias
páginas do site, facilitando a manutenção.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Inserir script inline é uma prática que pertence ao passado e deve ser evitada pelo
desenvolvedor comprometido com os Padrões Web. Ao escrevermos scripts dentro
da marcação HTML, estaremos misturando as camadas de marcação e
comportamento, dificultando a manutenção e o entendimento dos códigos.
Observem um exemplo abaixo:

 Javascript: Case-Sensitive

O Javascript é sensível ao tamanho da caixa (Case-Sensitive). Portanto, os nomes de


variáveis, funções e demais identificadores são diferenciados quando escritos com
letras maiúsculas ou minúsculas. Por exemplo: as variáveis total, Total, toTal e TOTAL
são diferentes. O método write() deve ser escrito em minúscula, pois escrever Write()
ou WRITE() causará um erro no script.

 Javascript: Comentários

Comentários são pequenos textos que o desenvolvedor insere ao longo do script


com a finalidade de facilitar o entendimento e a manutenção do código. A
linguagem Javascript admite dois tipos de marcadores para comentários:
comentários de linha única e comentários de múltiplas linhas. Abaixo, podemos ver
como funcionam cada uma.

Comentários de linha única:

Comentários de múltiplas linhas:


16712855225

 Javascript: Declarações

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Um script consiste em uma série de instruções escritas segundo uma sintaxe própria
e rígida. As instruções determinam a realização de tarefas com a finalidade de obter
um resultado final. Cada uma das instruções de um script constitui uma declaração
independente e existem duas sintaxes para separar as declarações. Separe-as com
ponto-e-vírgula ou coloque cada declaração em uma linha separada.

É o mesmo que...

A sintaxe determina que o ponto-e-vírgula seja obrigatório para separar declarações


em uma mesma linha e facultativo para separar declarações em linhas diferentes,
contudo é uma boa prática usar ponto-e-vírgula para separar declarações em linhas
diferentes. Estou passando rapidamente por esses aspectos, porque isso não é nada
diferente da maioria das linguagens de programação.

 Javascript: Espaços em Branco e Quebras de Linha

Quebras de linhas e espaços em branco, quando inseridos entre nomes de variáveis,


nomes de funções, números e entidades similares da linguagem, são ignorados na
sintaxe Javascript. Contudo, para strings e expressões regulares, tais espaçamentos
são considerados. No exemplo abaixo, ignoram-se os espaços extras fora da string!
Se for dentro da string, não se ignoram os espaços.

16712855225

Nesse exemplo, quebra-se a linha de código dentro de uma string:

 Javascript: Literais

Na terminologia Javascript, a palavra literal designa qualquer dado – valor fixo (não
variável) – que se insere no código do script. Podem ser de diversos tipos, tais como:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

inteiros (Ex: 250), decimais (Ex: 3.1415), booleanos (Ex: true e false), strings3 (Ex:
“Edson Arantes do Nascimento”), arrays (Ex: frutas = [“laranja”, “pera”, “goiaba”,
“morango”]) e objetos (Ex: Carro).

 Javascript: Vetores (Arrays)

Os literais arrays, na sintaxe Javascript, são os conjuntos de zero ou mais valores,


separados por vírgula e envolvidos por colchetes ([ ]). Os valores contidos em um
array recebem um índice sequencial começando com zero. A sintaxe é:

Um exemplo concreto seria:

Mas essa não é a única maneira de se criar um vetor, podemos também utilizar o
operador new:

 Javascript: Saída de Dados

Professor, como eu faço para manipular os elementos HTML? Para acessar, devemos
utilizar o método document.getElementById(id). O atributo deve ser usado para
identificar o elemento HTML e innerHTML deve ser usado para se referir ao
conteúdo do elemento. Observem a tag <script> no exemplo abaixo! Ela busca pelo
elemento HTML cujo id=”demo”. 16712855225

3
Strings podem vir com aspas simples ou duplas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Trata-se do elemento <p>. Ele pega o conteúdo interno desse elemento e modifica
o valor de seu atributo id para “Paragragh changed”. É possível também escrever
diretamente no Documento HTML por meio do método write( ). É recomendável
utilizá-lo apenas para realizar testes, na medida em que ele sobrescreve todos os
elementos HTML. Bacana?

 Javascript: Eventos
16712855225

O Javascript é bastante utilizado com eventos. Como assim, professor? Um evento é


uma ação capaz de disparar uma reação. Clicar em um link ou colocar o ponteiro
do mouse sobre um elemento podem ser considerados eventos. Ao clicar em um
link, desencadeamos uma reação que poderá ser a de abrir uma nova página. Ao
colocar o ponteiro do mouse sobre um elemento, podemos alterar sua opacidade.

Eventos são bastante utilizados em Javascript e viabilizam a interatividade em uma


página web. Na verdade, eventos viabilizam a própria existência do Javascript. Sem
eles, não teríamos como fazer funcionar os scripts. Há uma gama imensa de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

possibilidades de eventos4! Ele permite a execução de funções quando eventos são


detectados. Vamos ver como ele funciona:

No exemplo acima, quando o usuário clicar no botão, será informada a data e hora
atual. O resultado é mostrado abaixo:

Observem que o Javascript modifica o conteúdo do elemento com id=”demo”.

Por fim, vamos falar rapidamente do Unobstrusive JavaScript. Antes do CSS,


colocavam-se elementos de apresentação dentro dos elementos HTML. O CSS veio
e mudou esse paradigma, separando a apresentação da estruturação, em um
arquivo separado. Da mesma forma, antes do JavaScript, colocavam-se eventos e
outros elementos de integração dentro dos elementos HTML.

O Unobstrusive JavaScript veio e mudou esse paradigma, separando a integração


da estruturação, em um arquivo separado. Dessa forma, é possível separar o
comportamento da marcação, reutilizar código, realizar melhoria contínua,
melhorou a detecção do código JavaScript e o suporte a cache. Dessa forma,
desenvolvedores podem escrever códigos mais fáceis de manter e depurar.

Há uma biblioteca JavaScript que ajuda a criar interfaces de usuário ricas e


responsivas relacionadas a um modelo de dados subjacente: chama-se Knockout!
16712855225

Ele permite associar facilmente elementos DOM com um modelo de dados usando
uma sintaxe concisa e legível. Ademais, quando qualquer coisa muda o estado de
seu modelo de dados, a interface de usuário é atualizada automaticamente.

Ele permite também configurar implicitamente cadeias de relacionamentos entre


dados do modelo para transformá-los e combiná-los; e é capaz de gerar
rapidamente sofisticadas interfaces de usuário aninhadas em função de seu modelo
de dados. Galera, ele implementa o padrão MVC, é livre, bem documentado,
pequeno, leve e suportado pelos navegadores mais populares.
4
Eventos podem ser disparados pelo usuário (Ex: onclick usuário clica em um elemento qualquer da página)
ou independente de interferência do usuário (Ex: onload quando um documento é carregado).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Eu sei, isso é tudo muito abstrato. Vamos ver um exemplo para vocês entenderem
melhor: imagine um carrinho de compras de uma página de e-commerce (Ex:
Netshoes). Quando o usuário deleta um item do carrinho, você tem que remover o
item do modelo de dados (back-end), remover o elemento HTML associado no
carrinho de compras (front-end), além de atualizar o preço total.

Podemos escrever event handlers e event listeners para rastrear essas dependências
ou simplesmente podemos utilizar o Knockout. Ele fornece uma maneira simples e
conveniente para gerenciar esse tipo complexo de interface orientada a dados. Em
vez de rastrear mudanças no estado do modelo de dados manualmente, cada
elemento do HTML automaticamente atualiza o DOM.

Apesar de ter muitas similaridades com tecnologias como jQuery, Prototype,


MooTools e Ajax, seu objeto não é apresentar animações, manipular eventos ou
criar funcionalidades assíncronas. Seu foco principal está em projetar interfaces de
usuário escaláveis e orientadas a dados, em que eu posso manipular modelo de
dados e visão sem perda de referências. Chega de plug-ins...

A imensa maioria das questões de JavaScript pergunta sobre tags. Não vou passá-
las aqui antes, vou passá-las durante os exercícios. Dessa forma, vocês aprendem
na prática e descobrem quais são as mais frequentes. Bacana?

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(CESPE – – TCE/PE – Analista de Sistemas Uma diferença entre as


linguagens Java e JavaScript é que a linguagem Java é fortemente tipada,
enquanto a linguagem JavaScript tem um sistema de tipos fracos.

Comentários:

Perfeito! Essa é apenas uma das dezenas de diferenças.

Gabarito: C

(CESPE – – SERPRO – Analista de Sistemas) O Javascript expande as


capacidades de uma página HTML e, unido ao CSS, formou o DHTML.

Comentários:

Perfeito! DHTML não é uma linguagem, mas um conjunto de tecnologias como


HTML, CSS e Javascript.

Gabarito: C

(CESPE – 9 – TCE/AC – Analista de Sistemas) Um dos principais problemas


da Internet, a disseminação de vírus pode ser solucionado com a instalação de
javascripts nos computadores dos usuários.
16712855225

Comentários:

Einh? Fiquei até tonto! Instalação de Javascript não irá solucionar a disseminação de
vírus na internet – não faz o menor sentido.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(CESPE – 2010 – MPU – Analista de Sistemas) JavaScript é uma linguagem de


criação de scripts de uso geral, projetada para ser embutida em aplicativos que
executam em um navegador Web. Os aplicativos Ajax são escritos em JavaScript.

Comentários:

Por definição, Javascript é uma linguagem de propósito específico e, não, geral


(apesar das JSLibs), portanto eu discordo do gabarito!

Gabarito: C

(CESPE – 2010 – TRE/BA – Analista de Sistemas) O código Javascript existente em


um documento HTML é executado no navegador que está acessando esse
documento.

Comentários:

Perfeito, é exatamente isso! Qualquer um pode desabilitar o JavaScript em seu


navegador.

Gabarito: C

(CESPE - 2012 - TCE-ES - Auditor de Controle Externo - Tecnologia da


Informação É necessário que as variáveis tenham a definição de um tipo antes
de serem utilizadas em um programa JavaScript.

Comentários:

Não! Trata-se de uma linguagem fracamente tipada!


16712855225

Gabarito: E

(CESPE – 2011 – TJ/ES – Analista de Sistemas) Derivada da linguagem Java, a


Javascript é uma linguagem utilizada exclusivamente para navegadores web.

Comentários:

JavaScript não derivada da linguagem Java.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(CESPE – 2013 – SERPRO – Analista de Sistemas) A função eval do JavaScript


executa comandos de linguagens que estejam escritos em uma string.

Comentários:

Perfeito, é exatamente isso! “The eval() function evaluates or executes an argument.


If the argument is an expression, eval() evaluates the expression. If the argument is
one or more JavaScript statements, eval() executes the statements”.

Portanto, ela avalia e executa códigos dentro de uma string e apresenta o resultado.

Gabarito: C

(CESPE – 2013 – CNJ – Analista de Sistemas) Uma maneira de criar um código


HTML dinâmico é a partir da definição de objetos JavaScript dentro da tag
<head>.

Comentários:

Perfeito! Trata-se do Escopo Externo ou Incorporado.

Gabarito: C

10. (CESPE – 2013 – TRE/MS – Analista de Sistemas) Na linguagem Javascript, uma


variável declarada que possa ser acessada a qualquer momento é denominada
variável:

a) de método. 16712855225

b) de script.
c) global.
d) local.
e) de função.

Comentários:

Trata-se da variável global! Questão tranquila...

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

11. (CESPE – 2015 – TCU – Analista de Sistemas) No trecho do código JavaScript a


seguir, o valor retornado em this, da função minhaMsg, será CampoRequerido.

var minhaMsg ={ m1: "Campo", m2:"Requerido", mensagem: function () {


return this; } }
minhaMsg.mensagem();

Comentários:

Na questão, temos o objeto minhaMsg, contendo três pares de nomes de


propriedades do objeto e valores associados. O último é uma função que retorna o
objeto global. O JavaScript permite definir uma função como método de um objeto,
que é o que ocorreu na questão, i.e., o objeto minhaMsg tem duas propriedades
(m1 e m2) e um método (mensagem). A palavra-chave this retorna sempre o 'dono'
do código. Esse método pertence ao objeto minhaMsg, logo retornará [object
Object]. Para retornar "CampoRequerido", o código seria return this.m1 + this.m2;

Gabarito: E

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(FCC – – TRT/11 – Analista de Sistemas) Em JavaScript, para declarar nomes


de identificadores válidos utiliza-se:

a) somente número no primeiro caractere.


b) somente letra ou underscore no primeiro caractere.
c) qualquer tipo de caractere a partir do segundo caractere.
d) espaço entre caracteres a partir do segundo caractere.
e) uma palavra reservada do JavaScript

Comentários:

Para declarar nomes de identificadores, utiliza-se apenas letra ou underscore no


primeiro caractere.

Gabarito: B

(FCC – 7 – TRE/SE – Analista de Sistemas) O cliente JavaScript, quando se


soltar um botão do mouse pressionado, invocará o evento:

a) MouseOver.
b) MouseDown.
c) MouseUp. 16712855225

d) MouseMove.
e) MouseOut.

Comentários:

Propriedades Descrição
onmouseover O ponteiro é movido a um elemento ou a seus filhos.
onmousedown O usuário pressiona o botão do mouse em um elemento.
onmouseup O usuário solta o botão sobre um elemento.
onmousemove O ponteiro se move quando se está sobre um elemento.
onmouseout O usuário retira o ponteiro de um elemento ou de seus filhos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Gabarito: C

(FCC – 2008 – MPE/RS – Analista de Sistemas) Uma função embutida na


linguagem JavaScript que calcula o conteúdo de uma string denomina-se:

a) string.
b) eval.
c) number.
d) parseInt.
e) parseFloat.

Comentários:

“The eval() function evaluates or executes an argument. If the argument is an


expression, eval() evaluates the expression. If the argument is one or more JavaScript
statements, eval() executes the statements”. Portanto, ela avalia e executa códigos
dentro de uma string e apresenta o resultado, como podemos ver abaixo:

O Resultado será: 200, 4 e 27.

Gabarito: B
16712855225

(FCC – 2014 – TRT/1 – Analista de Sistemas) O trecho de programa a seguir foi


elaborado na linguagem HTML com JavaScript e será aberto por um navegador
que as suporte.

<html>
<body>
<h1>Página Principal</h1>
<form>
comando y
</form>
</body>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

</html>

O comando que deve ser colocado no lugar do comando y, de modo que, ao


se pressionar o botão Nova Página, seja aberta a página P1.html, é:

a) <input type = "button" text="Nova Página" click="window.location='P1.html'">

b) <input type="button" text="Nova Página" onclick =


"window.location='P1.html'">

c) <input type="onbutton" text="Nova Página" onclick =


"window.location='P1.html'">

d) <input type="button" value="Nova Página" onclick =


"window.location='P1.html'">

e) <input type="onbutton" value="Nova Página" click =


"window.location='P1.html'">

Comentários:

Bem, basta saber usar a tag <input>! Ela serve para receber dados. O atributo com
valor type=”button” especifica um botão cujo nome é value=”Nova Página” e o
16712855225

evento onclick = "window.location='P1.html'" leva o usuário que clica nesse botão à


página P1.html.

Gabarito: D

(FCC – – TRT/18 – Analista de Sistemas) Na linguagem JavaScript, os


métodos de interface com o usuário que fazem parte do objeto window são
apenas os denominados:

a) select, submit e confirm.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

b) open, alert e write.


c) click, select e write.
d) open, submit e close.
e) alert, confirm e prompt.

Comentários:

Trata-se da última opção: alert, confirm e prompt.

Métodos Descrição
alert( ) Exibe uma janela de alerta com um Botão Ok.
confirm ( ) Exibe uma janela de diálogo com uma mensagem e os botões Ok e Cancel.
prompt ( ) Exibe uma janela de diálogo à espera de uma entrada do usuário.

Gabarito: E

(FCC – 2010 – DPE/SP – Analista de Sistemas) As tecnologias Web utilizam


linguagem de scripting JavaScript, linguagem de scripting ASP e applets Java
para incluir aplicações, respectivamente, no lado:

a) servidor, cliente e servidor.


b) cliente, servidor e cliente.
c) servidor, servidor e cliente.
d) cliente, cliente e servidor.
e) cliente, cliente e cliente.

Comentários:

JavaScript e Applets rodam no cliente e Scripting ASP roda no servidor.


16712855225

Gabarito: B

(FCC – 1 – TRT/20 – Analista de Sistemas) No JavaScript, a caixa de mensagem


“Confirm”:

a) permite que o usuário insira um nome e/ou um número dentro da caixa de


texto.
b) Exibe apenas uma informação para o usuário.
c) Permite que o usuário insira um nome dentro da caixa de texto.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

d) Permite que o usuário insira um número dentro da caixa de texto.


e) Solicita uma confirmação do usuário, positiva ou negativa.

Comentários:

As caixas de diálogo de confirmação visam apenas exibir uma mensagem e pedir


uma confirmação positiva ou negativa.

Gabarito: E

(FCC – 1 – TRT/20 – Analista de Sistemas) É um método do objeto History:

a) Case.
b) Left.
c) Open.
d) Forward
e) Hostname.

Comentários:

O objeto History contém as URLs visitadas por um usuário.

Métodos Descrição
16712855225

back() Carrega a URL anterior do histórico.


forward() Carrega a próxima URL do histórico.
go() Carrega uma URL específica do histórico.

Gabarito: D

(FCC – 1 – TRT/20 – Analista de Sistemas) O evento Onblur em JavaScript


ocorre quando o:

a) objeto perde o foco, independente de ter havido mudança de conteúdo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

b) objeto recebe o foco.


c) objeto é selecionado.
d) ponteiro do mouse passa por sobre o objeto.
e) objeto perde o foco e houve mudança de conteúdo.

Comentários:

“The onblur event occurs when an object loses focus. Onblur is most often used with
form validation code (e.g. when the user leaves a form field)”. Portanto, o objeto
perde o foco independe se o conteúdo foi modificado ou não.

Gabarito: A

10. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A função JavaScript utilizada para calcular os caracteres dentro de uma
String e mostrar seu resultado para o usuário é denominada:

a) parseInt.
b) parseFloat.
c) toString.
d) Eval.
e) toResult.

Comentários:

“The eval() function evaluates or executes an argument. If the argument is an


expression, eval() evaluates the expression. If the argument is one or more JavaScript
statements, eval() executes the statements”. Portanto, ela avalia e executa códigos
dentro de uma string e apresenta o resultado, como podemos ver abaixo:
16712855225

O Resultado será: 200, 4 e 27.

Gabarito: D

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

11. (FCC - 2008 - METRÔ- - Analista Treinee - Análise de Sistemas Em Javascript,


os delimitadores naturais para uma string são " ou '. Caso seja necessária a
utilização destes caracteres como parte da string, deve ser utilizado, precedendo
a " ou ', o controle especial:

a) /*.
b) //.
c) \\.
d) /.
e) \.

Comentários:

Vocês entenderam essa situação? Utilizam-se aspas simples e duplas para delimitar
strings, mas se a minha string tiver aspas simples ou duplas dentro dela? O parser
iria se confundir. Portanto, utiliza-se \ antes das aspas para representá-las dentro de
uma string: alert(“Cuidado com o uso de \” ou \’ em uma string”).

Gabarito: E

12. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da
Informação O parseInt do JavaScript é um método que:

a) converte um número inteiro para uma string, numa base predefinida.


b) retorna o número inteiro de uma função.
c) calcula o valor inteiro de uma expressão.
d) calcula o valor inteiro dos caracteres de uma string.
e) converte uma string numa base predefinida, para um número inteiro.
16712855225

Comentários:

“The parseInt() function parses a string and returns an integer”, portanto ele
transforma uma string de caracteres em um número (integer, como padrão), numa
determinada base numérica. A sintaxe é parseInt(string,radix), sendo radix opcional
e que representa o sistema numérico utilizado.

Parâmetros Descrição
string Obrigatório. A string que sofrerá parsing.
radix Opcional. Número que representa o sistema numérico usado.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Gabarito: E

13. CC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web) Em JavaScript, o evento onChange será ativado sempre que um objeto
perder o foco e:

a) sair da página HTML.


b) alternar com outro foco específico.
c) deixar em destaque o texto.
d) houver mudança de janela.
e) houver mudança de conteúdo.

Comentários:

O Evento onChange ocorre quando o valor de um elemento foi modificado, i.e., seu
conteúdo.

Gabarito: E

14. (FCC - 2009 - -SE - Técnico Judiciário - Programação de Sistemas) Quando


navegadores não tiverem suporte ao JavaScript ou estiverem com a execução
de script bloqueada será exibido o conteúdo alternativo:

a) contido dentro da tag SCRIPT.


b) contido dentro da tag NOSCRIPT.
c) por meio do atributo LANGUAGE na tag NOSCRIPT.
d) por meio do atributo LANGUAGE na tag SCRIPT.
e) por meio do atributo TYPE na tag SCRIPT.
16712855225

Comentários:

Galera, se você desabilitar o Javascript de seu navegador, exibe-se o conteúdo


alternativo contido na tag <noscript>, por exemplo:

Gabarito: B

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

15. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A conversão de todos os caracteres contidos em uma string para letras
maiúsculas é realizada pelo método JavaScript do objeto string:

a) toUpper.
b) toUpperCase.
c) toLower.
d) toLowerCase.
e) toMascCase.

Comentários:

Trata-se do método toUpperCase( ).

Métodos Descrição
toUpperCase() Converte uma string em letras maiúsculas.
toLowerCase() Converte uma string em letras minúsculas.

Gabarito: B

16. (FCC - 2010 - AL- - Agente Legislativo de Serviços Técnicos e Administrativos


- Processamento de Dados Considere que códigos de programa desenvolvidos
com JavaScript podem ser executados:

I. somente no lado do cliente.


II. somente no lado do servidor.
III. tanto no lado do cliente quanto no lado do servidor.
16712855225

Está correto o que se afirma APENAS em

a) I, II e III.
b) I e III.
c) II e III.
d) II.
e) III.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Ele começou como uma linguagem client-side, i.e., só rodava do lado do cliente.
Com o advento do Ajax, JavaScript teve sua popularidade de volta e recebeu mais
atenção profissional. O resultado foi a proliferação de frameworks e bibliotecas,
práticas de programação melhoradas e o aumento no uso do JavaScript fora do
ambiente de navegadores bem como o uso de plataformas de JavaScript server-
side. Portanto, roda tanto do lado do cliente quanto do lado do servidor.

Gabarito: E

17. (FCC - 2010 - METRÔ- - Analista - Tecnologia da Informação No JavaScript,


é um método do objeto History:

a) open.
b) forward.
c) hostname.
d) case.
e) left.

Comentários:

O objeto History contém as URLs visitadas por um usuário.

Métodos Descrição
back() Carrega a URL anterior do histórico.
forward() Carrega a próxima URL do histórico.
go() Carrega uma URL específica do histórico.

Gabarito: B
16712855225

18. (FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação Em


JavaScript, o operador representado por três sinais de igual consecutivos retorna
true se os operandos envolvidos forem:

a) iguais e do mesmo tipo.


b) iguais e do tipo numérico, apenas.
c) iguais, mas não do mesmo tipo.
d) diferentes e de tipos diferentes.
e) diferentes, mas do mesmo tipo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Comentários:

a = 5 // Atribui 5 à variável a
a ==5 // Compara o valor de a com 5
a === 5 // Compara o valor e o tipo de a com valor e tipo de 5

Portanto, retorna true se os operandos envolvidos forem iguais e do mesmo tipo.

Gabarito: A

19. (FCC - - -SE - Técnico Judiciário - Programação de Sistemas A função


parsenlnt( ) da biblioteca JavaScript tem o objetivo de:

a) transformar uma string de caracteres em um número, numa determinada base


numérica.
b) informar a quantidade de caracteres que compõem uma string.
c) extrair uma determinada quantidade de caracteres de uma string.
d) substituir partes dos caracteres de uma string por uma sequência de outros
caracteres.
e) dividir uma string de caracteres em partes menores de tamanho fixo.

Comentários:

“The parseInt() function parses a string and returns an integer”, portanto ele
transforma uma string de caracteres em um número (integer, como padrão), numa
determinada base numérica. A sintaxe é parseInt(string,radix), sendo radix opcional
e que representa o sistema numérico utilizado.

Parâmetros 16712855225

Descrição
string Obrigatório. A string que sofrerá parsing.
radix Opcional. Número que representa o sistema numérico usado.

Gabarito: A

(FCC - 2009 - -SE - Técnico Judiciário - Programação de Sistemas Para abrir


uma janela do navegador com o JavaScript utiliza-se a sentença:

a) window.open( )

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

b) page.open( )
c) document.open( )
d) page.init( )
e) window.init( )

Comentários:

O Método open( ) abre um website em uma nova janela do navegador. Outros


métodos são:

Métodos Descrição
open( ) Abre uma nova janela.
close( ) Fecha a janela atual.
moveTo( ) Move a janela atual.
resizeTo( ) Redimensiona a janela atual.

Gabarito: A

21. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web Em JavaScript, as estruturas de repetição utilizadas podem ser:

a) for, while e do while.


b) for, if e do while.
c) if, while e do while.
d) for, while e if.
e) for, if e else.

Comentários:
16712855225

Todas as opções contêm if, exceto a primeira! Galera, if é estrutura de repetição?


Não, é estrutura de seleção! As estruturas são for, while e do-while.

Gabarito: A

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A raiz quadrada de um número é retornada pela função JavaScript
denominada:

a) Math.exp()

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

b) Math.round()
c) Math.sqrt.round()
d) Math.sqrt()
e) Math.circle()

Comentários:

Math.sqrt(x) é a função que retorna a raiz quadrada de x.

Métodos Descrição
abs( ) Retorna o valor absoluto de x.
acos( ) Retorna o arcocosseno de x, em radianos.
asin( ) Retorna o arcosseno de x, em radianos.
atan( ) Retorna o arcotangente de x como um valor numérico.
atan2(y,x) Retorna o arcotangente do quociente de seus argumentos.
ceil(x) Retorna x, arredondado para o inteiro acima.
cos(x) Retorna o cosseno de x, em radianos.
exp(x) Retorna o valor de ex.
floor(x) Retorna x, arredondado para o inteiro abaixo.
log(x) Retorna o logaritmo natural de x (base e).
max(x,y,z,...,n) Retorna o número máximo de um conjunto de valores.
min(x,y,z,...,n) Retorna o número mínimo de um conjunto de valores.
pow(x,y) Retorna o valor de x elevado a y.
random( ) Retorna um número aleatório entre 0 e 1.
round( ) Retorna x, arredondado ao inteiro mais próximo.
sin(x) Retorna o seno de x, em radianos.
sqrt(x) Retorna a raiz quadrada de x.
tan(x) Retorna a tangente de um ângulo.
16712855225

Gabarito: D

(FCC – 1 – DPE/S – Analista de Sistemas) No javascript, a caixa de mensagem


"Alert":

a) permite que o usuário insira um nome dentro da caixa de texto.


b) permite que o usuário insira um número dentro da caixa de texto.
c) solicita uma confirmação do usuário, positiva ou negativa.
d) permite que o usuário insira um nome e/ou um número dentro da caixa de
texto.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

e) exibe apenas uma informação para o usuário.

Comentários:

As caixas de diálogo de alerta são simples e informativas. Elas, geralmente, são


utilizadas em validação de formulários ou bloqueio de ações. Sua função é mostrar
apenas uma mensagem com um botão de confirmação para que esta seja fechada.

Gabarito: E

24. (FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da
Informação O método getMonth() pode retornar o seguinte intervalo de valores:

a) [0 a 36]
b) [1 a 12]
c) [0 a 11]
d) [0 a 23]
e) [0 a 24]

Comentários:

“The getMonth() method returns the month (from 0 to 11) for the specified date,
16712855225

according to local time. Note: January is 0, February is 1, and so on”. Portanto, o


intervalo é de [0 a 11].

Gabarito: C

(FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da


Informação O evento Onblur ocorre quando o objeto:

a) perde o foco, independentemente de ter havido mudança de conteúdo.


b) perde o foco e há mudança de conteúdo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

c) muda o foco.
d) recebe o foco.
e) é selecionado.

Comentários:

“The onblur event occurs when an object loses focus. Onblur is most often used with
form validation code (e.g. when the user leaves a form field)”. Portanto, ocorre
quando um objeto perde o foco, independentemente de ter havido mudança de
conteúdo.

Gabarito: A

(FCC – 2012 – TCE/AM – Analista de Sistemas) Em JavaScript, um objeto Array é


usado para armazenar vários valores em uma única variável. Sobre a criação de
objetos Array em JavaScript, considere:

I. var nomes=new Array();


nomes[0] ="Ana";
nomes[1] ="Pedro";
nomes[2] ="Jorge";
II. var nomes=new Array("Ana","Pedro","Jorge");
III. var nomes= ["Ana","Pedro","Jorge"];
IV. String nomes[3] = new String["Ana","Pedro","Jorge"];

Uma forma correta de criar um objeto Array chamado nomes que armazena o
nome de três pessoas, pode ser encontrada em:

a) I, II, III e IV. 16712855225

b) I, II e III, apenas.
c) I e II, apenas.
d) III e IV, apenas.
e) I, apenas.

Comentários:

(I) Perfeito, utiliza-se o operador new e depois inicializa com valores; (II) Perfeito,
exatamente como o anterior, mas já inicializam os valores na declaração do vetor;
(III) Perfeito, declaração sem operador new e já inicializa os valores; (IV) Não, ele

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

está indo em um índice específico string nomes[3], depois atribui três valores a um
único índice, não faz sentido.

Gabarito: B

27. (FCC – 2013 – AL/RN – Analista de Sistemas) Aprender programação avançada


em JavaScript é normalmente muito difícil e demorado. Por esse motivo, muitas
empresas optam por utilizar bibliotecas chamadas de frameworks JavaScript, que
disponibilizam muitas funções prontas para tarefas comuns.

NÃO é um framework JavaScript:

a) MooTools
b) jQuery
c) Prototype
d) Log4J
e) Dojo

Comentários:

Pessoal, há algumas bibliotecas famosas de funções Javascript! Entre elas: MooTools,


jQuery, Prototype e Dojo. O Log4J é uma biblioteca para construção de log de
dados em aplicações.

Gabarito: D

(FCC – 2014 – AL/PE – Analista de Sistemas) Em JavaScript, há vários métodos


pré-definidos para manipular valores em arrays. Dois destes métodos permitem
adicionar e remover um elemento no final de uma array, respectivamente.
16712855225

Considere a array a seguir:

var carros = ["Gol", "Palio", "Fiesta", "Onix"];

Para inserir o valor "HB20" no final da array carros e depois removê-lo utiliza-se,
respectivamente, as instruções:

a) carros.slice("HB20"); e carros.remove();
b) carros.put("HB20"); e carros.drop();
c) carros.push("HB20"); e carros.pop();

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

d) carros.set("HB20"); e carros.get();
e) carros.slice("HB20"); e carros.unshift();

Comentários:

É similar a pilhas: utiliza-se carros.push(“HB20”) e carros.pop(“HB20”).

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(ESAF – – CGU – alista de Sistemas) Variáveis JavaScript contêm:

a) um identificador, escopo e um tipo de dados específico.


b) um contextualizador, localizador e um tipo de dados específico.
c) um identificador, parâmetro e um tipo de escopo.
d) um delimitador, escopo e um referenciador.
e) um identificador, extensão e um ponteiro.

Comentários:

Em JavaScript, as variáveis têm identificador, escopo e tipo. Qual a pegadinha? A


pegadinha é que o tipo não é obrigatório – JavaScript é fracamente tipada!

Gabarito: A

(FGV – – Senado Federal – Analista de Sistemas) Em relação ao JavaScript,


não é correto afirmar que:

a) é uma linguagem script que só pode ser usada em páginas HTML.


b) proporciona aos desenvolvedores de páginas web uma linguagem de
programação.
c) é uma linguagem interpretada. 16712855225

d) pode ser usada para criar cookies.


e) pode adicionar interatividade nas páginas html.

Comentários:

(a) Errado, ela pode ser utilizada com outras linguagens; (b) Correto, é mais uma
alternativa para os desenvolvedores; (c) Correto, Javascript é uma linguagem de
script e interpretada; (d) Correto, pode criar, ler e deletar cookies; (e) Correto, ele
ajuda bastante a melhorar a interatividade das páginas HTML.

Gabarito: A

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(FGV – 2015 – DPE/RO – Analista de Sistemas) As linguagens de programação


utilizadas em programação frontend e back-end são, respectivamente:

a) Javascript e Java;
b) PHP e Javascript;
c) Python e Javascript;
d) PHP e Java;
e) C++ e PHP.

Comentários:

Grosso modo, o front-end trata da interface de interação com o usuário e o back-


end trata das regras de negócio do sistema. Portanto, vamos julgar: (a) Front-end e
Back-end; (b) Back-end e Front-end; (c) Back-end e Front-end; (d) Back-end e Back-
end; (e) Back-end e Back-end;

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

JQUERY

Pessoal, é muito comum construir uma página web utilizando HTML e estilizá-la
utilizando CSS! As páginas ficam realmente muito bonitas, mas não são muito
interativas, i.e., nós não conseguimos arrastar elementos pela página, abrir ou fechar
painéis deslizantes, animar elementos HTML ou adicionar novos elementos a nossa
página simplesmente clicando em um botão.

E é para isso que surgiu o jQuery! Ele se trata de uma biblioteca JavaScript cross-
browser, de código aberto, pequena, leve, rápida, fácil e muito rica. Ela foi
desenvolvida para simplificar scripts client-side que interagem com HTML, criar
animações, manipular eventos e desenvolver aplicações AJAX. Galera, agora fica
muito fácil utilizar JavaScript em seu website.

Por que, professor? Porque ele pega um bocado de tarefas muito comuns que
requerem várias linhas de código em JavaScript e envolve tudo em métodos que
podem ser chamados com uma única linha de código. Ele também simplifica um
monte de coisas complicadas do JavaScript, como manipulação de AJAX, DOM, CSS,
AJAX, entre outras utilidades, eventos e chamadas (e ainda suporta plug-ins).

Pode parecer contra intuitivo aprender a usar uma biblioteca antes de aprender a
linguagem de fato, mas há algumas excelentes razões para fazer isso. Em primeiro
lugar, demora um pouco até que se fique familiarizado e confortável com JavaScript,
e é mais difícil manipular elementos HTML diretamente por JavaScript do que por
jQuery.

Em segundo lugar, jQuery oferece uma interface simples para o básico de JavaScript.
16712855225

Para muitos usuários é mais fácil aprender jQuery primeiro e então mergulhar nos
detalhes profundos de JavaScript mais tarde. Em terceiro lugar, podemos dizer que
jQuery é muito melhor no que diz respeito a dar resultados visuais imediatos d
que JavaScript.

Professor, o que é DOM? É uma convenção multiplataforma que representa como


as marcações em HTML, XHTML e XML são organizadas e lidas pelo navegador.
Uma vez indexadas, estas marcações se transformam em elementos de uma árvore
que você pode manipular via API – que é o que fazemos quando usamos programas
ou scripts para conteúdo, estrutura ou folha de estilo de uma página.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

O DOM possui uma estrutura de árvore (assim como HTML, XHTML e XML). É assim
que o navegador monta! Professor, não é isso que eu vejo quando acesso uma
página HTML! É verdade, o DOM é somente a base para uma outra árvore que é o
que realmente um browser monta em tela – é a Árvore de Renderização (ou Render
Tree). Abaixo, podemos ver uma Árvore DOM (de um HTML).

Isso tudo foi para dizer que é por meio da interação com o DOM que o jQuery
consegue acessar e modificar HTML. Pessoal, quem já viu jQuery funcionando sabe!
É muito legal, ele simplesmente consegue mudar a estrutura de uma página
dinamicamente. Infelizmente, por PDF é impossível demonstrar animações
funcionando, eu recomendo que vocês busquem compiladores online.

Vamos falar de sintaxe! Para utilizar o jQuery, é preciso fazer um link da nossa página
HTML para o nosso script em jQuery (similar ao que fazemos com HTML/CSS). Para
16712855225

tal, podemos utilizar o elemento <script></script>, como é apresentado abaixo.


entanto, para fazer a linguagem efetivamente funcionar, é necessário utilizar uma
sintaxe básica também apresenta a seguir:

<script type= text javascript src= script js ><script>

$(seletor).ação()

Isso significa que o jQuery realizará uma ação sobre um determinado seletor. No
entanto, a primeira sintaxe de um arquivo .js é sempre a mesma:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08
$(document).ready(ação);

O que isso quer dizer? Isso significa: quando o Documento HTML (document) estiver
pronto (ready), faça algo (ação). Isso serve para prevenir que qualquer código
jQuery rode antes de o documento estar completamente carregado. É uma boa
prática esperar para, então, trabalhar com ele. Isso também permite que você tenha
seu código JavaScript antes do corpo do seu documento (na seção head).

Bacana, agora vamos colocar alguma coisa na função ready( ). Quando eu digo
função, pensem em ação. Funções são a unidade básica para trabalhar com jQuery.
r essa razão, ele inclui uma palavra reservada function. Segue a sintaxe:

function(){
Faça algo;
}

Se adicionarmos essa função dentro da função ready(), o jQuery executará o código


da nossa função assim que o documento HTML for carregado. Vamos destrinchar a
sintaxe a seguir: $( ) é uma função disfarçada que transforma document em um objeto
jQuery; .ready( ) é um tipo de função que ajuda a executar o código dentro dos
parênteses assim que o documento estiver pronto.

$(document).ready(function(){
Faça algo;
});

Ainda não acabou: function( ) { } é uma ação que .ready( ) desempenhará assim que o
Documento HTML estiver carregado. Em nosso exemplo, a função substituirá o Faça
algo. Beleza! Então se eu quiser fazer um cabeçalho div do HTML ser ocultado
imediatamente, basta que eu escreva um jQuery seguindo a sintaxe apresentada a
seguir (tentem entender!). 16712855225

$(document).ready(function(){
div hide
});

Vocês estão acompanhando? Imaginem que eu tenho um documento HTML que


cria um div vermelho em uma tela em branco. O código acima está dizendo que
assim que o documento estiver pronto, será executada a função hide( ) sobre o
elemento div do documento HTML. E o que essa função faz? Ela faz o elemento sumir
(ocultar) imediatamente após sua execução. Simples, não?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Agora chegamos a uma parte importante da aula: Seletores! Nós utilizamos o div
como exemplo, mas poderíamos usar qualquer seletor CSS entre aspas e passá-lo
para $( ), inclusive classes. Vocês se lembram que nós podemos selecionar classes em
CSS utilizando um ponto? Pois é, se temos class=”xpto” em HTML, podemos selecioná-
la em CSS com o operador ponto: .xpto.

SINTAXE DESCRIÇÃO

$("*") Seleciona todos os elementos.

$(this) Seleciona o elemento HTML atual.

$("p.intro") Seleciona todos os elementos <p> com classe intro.

$("p:first") Seleciona o primeiro elemento <p>.

$("ul li:first") Seleciona o primeiro elemento <li> do primeiro <ul>.

$("ul li:first-child") Seleciona o primeiro elemento <li> de todos <ul>.

$("[href]") Seleciona todos os elementos com um atributo href.

$("a[target='_blank']") Seleciona todos os elementos <a> com atributo target com valor igual a
“_blank”.
$("a[target!='_blank']") Seleciona todos os elementos <a> com um atributo target com valor diferente
de “_blank”.
$(":button") Seleciona todos os elementos <button> e elementos <input> do tipo button.

Em jQuery, tudo o que precisamos fazer é colocar o seletor entre aspas e, então,
16712855225

podemos passá-lo para $( ) para criar um objeto jQuery. Há acima uma lista com
todos os possíveis seletores. Lembrando que existe também diversos efeitos, mas
que são impossíveis de demonstrar em texto (Hide/Show, Fade, Slide, Animate, Stop,
Callback, Chaining), recomendo que vocês testem em um compilador online.

Existe uma biblioteca chamada JQuery UI que contém um conjunto de widgets de


interface gráfica, efeitos visuais animados e diversos temas implementados com
JQuery. Trata-se de uma biblioteca que facilita a criação de elementos de interface
de usuário com um mínimo de código e sintaxe idêntica à da biblioteca jQuery,
compatível com padrões web. É usada pelo Paypal, IMDB e Netflix.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Por fim, vamos falar rapidamente sobre um importante plug-in: JQGrid. Ele é um
controle JQuery ativado por Ajax que fornece soluções para representar e manipular
dados tabulares (tabelas) na web. Uma vez que a grid é uma solução client-side
carregando dados dinamicamente por chamadas AJAX, ela pode ser integrada com
qualquer tecnologia server-side (PHP, ASP, JSP, Servlet, etc).

Galera, há um concorrente do JQuery chamado Dojo! Ele também é uma biblioteca,


tem código-aberto, é modular, possui sintaxe simplificada, apresenta funções para
chamadas AJAX, é capaz de manipular o DOM, contém diversos componentes
gráficos e efeitos visuais e pode realizar diversas validações – proporcionando um
código mais legível e menor.

O Dojo é menos extensível que o JQuery, mas seu escopo é bem maior, isto é, ele
faz praticamente tudo que o JQuery faz e mais um pouco. O JQuery é mais leve
para o navegador, mas não esqueçamos que ele é extremamente extensível, logo
eu posso encher ele de plug-ins – ficando, assim, mais pesado. Se você quer fazer
aplicações web ricas, você estará bem servido com qualquer um desses.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(FCC - 2012 – MPE/AP - Analista de Sistemas) O seletor jQuery:

a) $("[href!='#']") seleciona todos os elementos cujo atributo href não contenha


'#'.

b) $("[href$='.jpg']") seleciona todos os elementos cuja propriedade href


contenha '.jpg'.

c) $("div#intro .head") seleciona todos os elementos com id="head" dentro de


um elemento <div> com class="intro".

d) $("p#intro:first") seleciona o primeiro elemento <p> com class="intro".

e) $("ul li:first-child") seleciona todos os elementos <li> do primeiro elemento


<ul>.

Comentários:

SINTAXE DESCRIÇÃO

$("[href]") Seleciona todos os elementos com um atributo href.


16712855225

$("ul li:first-child") Seleciona o primeiro elemento <li> de todos <ul>.

Vamos por partes: $("[href!='#']"). Trata-se de um seletor, que vai selecionar todos
os elementos que contenham o atributo href diferente (por conta do operador ‘!=’)
de ‘#’. Já a última opção seleciona o primeiro elemento <li> de todos os elementos
<ul>. Todas as outras opções não fazem nenhum sentido.

Gabarito: A

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(VUNESP – 2015 – TCE/SP - Analista de Sistemas) O método do jQuery que


permite ocultar um elemento selecionado é:

a) .show(false)
b) .hide()
c) .mask()
d) .visible(false)
e) .display(false)

Comentários:

Vocês estão acompanhando? Imaginem que eu tenho um documento HTML que cria
um div vermelho em uma tela em branco. O código acima está dizendo que assim
que o documento estiver pronto, será executada a função hide( ) sobre o elemento div
do documento HTML. E o que essa função faz? Ela faz o elemento sumir (ocultar)
imediatamente após sua execução. Simples, não?

Conforme vimos em aula, trata-se do hide( ).

Gabarito: B

(FCC – 2014 – TRT/13 - Analista de Sistemas) Considere a página abaixo,


construída utilizando jQuery:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Home</title>
<script type="text/javascript"
src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
<script type="text/javascript">16712855225

$(document).ready(function() {
..I...
});
</script>
</head>
<body>
<button type="button">Esconder</button>
<p class="par">Texto do parágrafo.</p>
</body>
</html>

Para que, ao se clicar no botão Esconder, o texto do parágrafo se torne oculto,


deve-se preencher a lacuna I com:

a) $('button').click(function(){$('p#par').hide();});

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

b) $('button:eq(0)').click(function().defineProperty('p.par').hide());
c) $('button').click(function(){$('p.par').hidden();});
d) $('button:eq(1)').click(function(){$('p#par').hide();});
e) $('button').click(function(){$('p.par').hide();});

Comentários:

- Para selecionar o elemento button: $(‘button’);


- Para tratar de um clique: .click( );
- Para tratar da ação em si: function( );
- Para selecionar o parágrafo: $(‘p.par’);
- Para ocultar o parágrafo: .hide( );

O que aconteceu, galera? Vamos ler de trás para frente: o código está dizendo que
é para ocultar .hide( ) o parágrafo $(‘p.par’) quando clicarem function( ).click( ) no botão
$(‘button’).

Gabarito: E

(CESPE – 2012 – ANAC - Analista de Sistemas) Em jQuery, o método hide( )


permite ocultar elementos HTML. Assim, a sintaxe correta para ocultar o
elemento corrente é $(this).hide() e, para ocultar todos os elementos <p> da
página, é $(“<p>”).hide( ).

Comentários:

Vocês estão acompanhando? Imaginem que eu tenho um documento HTML que cria
um div vermelho em uma tela em branco. O código acima está dizendo que assim
que o documento estiver pronto, será executada a função hide( ) sobre o elemento div
16712855225

do documento HTML. E o que essa função faz? Ela faz o elemento sumir (ocultar)
imediatamente após sua execução. Simples, não?

Conforme vimos em aula, há um erro nessa questão: não é necessário colocar <p>,
mas apenas p, i.e., jQuery interpreta apenas o elemento - $(“p”).hide( ).

Gabarito: E

(ESAF – 2012 – CGU - Analista de Sistemas) São plug-ins da biblioteca jQuery


destinados a criar funcionalidade para a interface do usuário:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

a) Plug-ins nativos para interação. Widgets. Effects.

b) Plug-ins interativos tipo slider. Wide-rangers. Effects.

c) Plug-ins nativos da família datepicker. MainWidgets. Efforts.

d) Widgets nativos para marcação. Widgets de monitoramento. Plug-ins de


localização.

e) Plug-ins nativos para interação. Upload widgets. Effective plug-ins.

Comentários:

Existem plug-ins nativos de interação, widgets e effects.

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

AJAX (ASYNCHRONOUS JAVASCRIPT AND XML)

O desenvolvimento de aplicações desktop apresenta uma riqueza que, por muito


tempo, pareceu fora do alcance das aplicações web, gerando um gap no nível de
experiência do usuário com a aplicação. A riqueza de interação e o grau de
responsividade das aplicações desktop davam um banho nas aplicações web, mas
esse gap diminuiu com a criação do AJAX!

Professor, AJAX é uma tecnologia? Não, é um conjunto de tecnologias, cada uma


com seu propósito, que se juntam harmonicamente para melhorar a experiência do
usuário, tornando páginas web mais ricas e interativas. Professor, que tecnologias
são essas? Jessé Garret, criador do AJAX, afirmou em um artigo que ela incorpora
as seguintes tecnologias:

 Apresentação: utiliza XHTML e CSS;


 Interação e Exibição dinâmicas: utiliza DOM;
 Manipulação e Intercâmbio de Dados: utiliza XML e XSLT;
 Recuperação Assíncrona de Dados: utiliza XMLHttpRequest;
 e JavaScript para reunir todas essas tecnologias.

Vamos ver rapidamente cada uma dessas tecnologias:

TECNOLOGIAS DESCRIÇÃO

XHTML trata-se de uma linguagem de marcação que estende o HTML para criação de páginas
web de forma mais acessível e interoperável;
CSS trata-se de uma linguagem de folhas de estilo utilizada para definir a apresentação de
16712855225

documentos escritos em uma linguagem de marcação;


DOM trata-se de um modelo de objetos de documentos para criação de interfaces dinâmicas
e editáveis independentes de linguagem e plataforma;
XML trata-se de uma linguagem de marcação para propósitos especiais de intercâmbio e
compartilhamento de dados;
XSLT trata-se de uma linguagem de marcação usada para transformar documentos XML em
outros documentos ou objetos.
XMLHttpRequest trata-se de um objeto utilizado para enviar e receber requisições HTTP
assincronamente.
JavaScript trata-se de uma linguagem de programação de scripts interpretada e client-side.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Galera, um modelo de aplicação web clássica funciona mais ou menos assim: o


usuário envia uma Requisição HTTP ao Servidor Web. Esse realiza algum tipo de
processamento (recupera dados, manipula números, etc) e retorna uma Página
HTML ao cliente. Essa abordagem faz muito sentido, mas não oferece uma boa
experiência ao usuário.

O que faz o usuário enquanto o servidor está realizando seus processamentos? Nada,
só espera! E, a cada nova tarefa, espera novamente. Quem aí gosta de esperar?
Quem curte um belo chá-de-cadeira? Ninguém! Por que toda vez que o usuário
requisitar algo é obrigatório que haja uma interrupção na interface? Ora, uma vez
que a interface foi carregada, o usuário está pouco se importando com o resto.

As Aplicações AJAX eliminam esse inicia-interrompe-inicia-interrompe ao introduzir


uma camada chamada Engine AJAX entre o usuário e o servidor! Em vez de carregar
uma página web, ao iniciar a sessão, o navegador carrega a Engine AJAX (escrita em
JavaScript). Ela permite que a interação do usuário com a aplicação ocorra de forma
assíncrona – independente de comunicação com o servidor.
16712855225

Portanto, o usuário jamais fica olhando para uma tela branca do navegador, sem
fazer nada e esperando que o servidor faça seu trabalho. Toda ação do usuário que
normalmente gera uma Requisição HTTP se transforma em uma chamada JavaScript
à Engine AJAX. Qualquer resposta que não requeira uma viagem de volta ao servidor
(Ex: validação de dados, etc) é manipulada pela própria Engine AJAX.

Se ela necessitar de alguma coisa do servidor, a Engine AJAX realiza as requisições


assincronamente, geralmente utilizando XML – sem enrolar a interação do usuário
com a aplicação. A imagem abaixo apresenta a diferença entre uma aplicação web

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

clássica que utiliza uma comunicação síncrona com o servidor e uma aplicação web
AJAX que utiliza uma comunicação assíncrona com o servidor.

O Objeto XMLHttpRequest é utilizado para trocar dados com o servidor de forma


assíncrona. Alguns dizem que ele é o sonho de um desenvolvedor, porque pode-
se atualizar uma parte de uma página web sem precisar recarregar a página inteira;
é possível requerer e receber dados do servidor após a página ser carregada; e é
possível enviar dados ao servidor em background.

Todos os navegadores modernos (IE7+, Firefox, Chrome, Safari e Opera) possuem


uma Objeto XMLHttpRequest embutido. A sintaxe para criá-lo é bem simples:
16712855225

xmlhttp = new XMLHttpRequest();

Todos navegadores modernos possuem um Parser XML! Ele converte um


documento XML em um DOM, que pode ser manipulado com JavaScript. Ele define
uma forma padrão de acessar e manipular documentos XML de maneira
hierárquica. Dessa forma, todos os elementos podem ser acessados por meio da
Árvore DOM!

Para capturar a resposta do servidor, existem duas possibilidades: utilizar as


propriedades responseXML ou responseText. O segundo recupera dados como uma
string, em forma de texto; e o primeiro recupera dados como um Objeto DOM, em

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

formato XML! É possível, ainda, capturar dados em outros formatos, tais como:
HTML e JSON!

No AJAX, o objeto XMLHttpRequest possui diversas propriedades importantes para


realizar a comunicação com o servidor. Quando uma solicitação para um servidor é
enviada, normalmente deseja-se executar algumas ações com base na resposta.
Existe um evento chamado onreadystatechange, responsável por especificar o que
vai acontecer quando o servidor processar a resposta. Há três propriedades:

 Onreadystatechange: armazena uma função a ser chamada de forma


automática cada vez que a propriedade readyState mudar;

 readyState: armazena o status do XMLHttpRequest.

o 0: Requisição não iniciada;


o 1: Conexão com servidor estabelecida;
o 2: Requisição recebida;
o 3: Requisição processada;
o 4: Requisição finalizada e resposta pronta.

 Status:

o 200: “Ok”.
o 404: Página não-encontrada.

AJAX apresenta uma grande desvantagem: se o usuário desativar o JavaScript de


seu navegador, a aplicação pode parar de funcionar. No entanto, há diversas
vantagens: executa processos em paralelo às requisições/respostas; manipula XML
nas aplicações para desktop de forma simples; troca mensagens de forma
16712855225

assíncrona; entre outras.

Por fim, alguns desenvolvedores utilizam iFrames para embutir aplicações interativas
em páginas web, incluindo aquelas que empregam AJAX (Ex: Google Maps).
iFrame é utilizado para embutir um Documento HTML em outro Documento HTML.
Ele é frequentemente utilizado também para inserir conteúdo de outra fonte (como
uma propaganda) em uma página web.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(CESPE - 2007 – IE/MA – Analista de Sistemas) A segunda geração de páginas


para Internet (Web 2.0) permite ao usuário uma maior interatividade com os
portais Web. Isso é possível graças a tecnologias como Ajax e CSS, que permitem
o processamento do código da página no lado do cliente.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

(CESPE - 2007 – SERPRO – Analista de Sistemas) O Ajax basicamente oferece


uma metodologia para desenvolvimento de aplicações na Web que une
Javascript e XML, mas que só pode ser executado em browsers lançados após
2001.

Comentários:

Não, começou em 1999 (com IE5)! Cobrar data em prova? Questão ridícula!

Gabarito: E

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(CESPE - – INMETRO – Analista de Sistemas) Sempre que o usuário


pressionar uma tecla nos campos nome e hora do formulário de nome
formulario, será apresentada uma janela pop-up ao usuário com a expressão:
Seu browser suporta Ajax!

Comentários:

Bem, será apresentada uma mensagem apenas se o browser utilizado suportar o


objeto XMLHttpRequest. Ademais, isso só ocorrerá caso uma tecla seja pressionada
no campo nome e, não, hora.

Gabarito: E

(CESPE - 2009 – INMETRO – Analista de Sistemas) Um novo pedido HTTP será


enviado pelo browser ao servidor HTTP que enviou a página sempre que a
função ajaxFunction for executada com sucesso.

Comentários: 16712855225

Não! A função ajaxFunction() não utiliza o objeto XMLHttpRequest para realizar


chamadas a um servidor web. Todo o processamento fica no cliente e, portanto,
nenhuma solicitação HTTP é enviada ao servidor.

Gabarito: E

(CESPE - – TCE/RN – Analista de Sistemas) AJAX permite a construção de


aplicações web dinâmicas e interativas com o usuário, utilizando-se de
solicitações assíncronas de informações. Para isso, o AJAX engloba, em seu

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

modelo, os protocolos XHTML, CSS, DOM, XML, XSLT, XMLHttpRequest e


JavaScript, integrando todas as demais tecnologias.

Comentários:

Essa questão foi anulada, mas deveria estar errada! Por que, professor? Porque essas
tecnologias não são protocolos! A justificativa foi: “O emprego do termo “protocolo”
prejudicou o julgamento objetivo do item, motivo suficiente para sua anulação”.

Gabarito: X

(CESPE - – UNIPAMPA – Analista de Sistemas) Para se implementar uma


aplicação Ajax do lado cliente, podem-se utilizar, além do JavaScript, outras
linguagens de script, como VBScript, que também é capaz de fornecer a
funcionalidade requerida.

Comentários:

Essa questão foi polêmica, no entanto está correta! Ajax preconiza a utilização de
XML e JavaScript, todavia é possível utilizar em substituição as tecnologias JSON e
VBScript, por exemplo! O JavaScript foi desenvolvido pela Netscape, é somente
client-side e roda em diversos navegadores e o VBScript é desenvolvido pela
Microsoft, é client-side e server-side e roda apenas no Internet Explorer.

Gabarito: C

(CESPE - 2010 – BASA – Analista de Sistemas) Por meio da tecnologia AJAX, é


possível fazer o envio de formulários HTML por meio de estruturas de dados
baseadas em XML, sem a necessidade de recarregar novas páginas no
16712855225

navegador.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

(CESPE - 2010 – MPU – Analista de Sistemas) JavaScript é uma linguagem de


criação de scripts de uso geral, projetada para ser embutida em aplicativos que
executam em um navegador Web. Os aplicativos Ajax são escritos em JavaScript.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

(CESPE - 2010 – MPU – Analista de Sistemas) O objeto XMLHttpRequest


apresenta a estrutura das páginas web como um conjunto de objetos
programáveis que pode ser manipulado com JavaScript.

Comentários:

Não, quem faz isso é o DOM! Ele apresenta uma estrutura de páginas web como
um conjunto de objetos programáveis que pode ser manipulado com JavaScript,
permitindo modificar a interface instantaneamente e programaticamente,
redesenhando partes da página.

Gabarito: E

10. (CESPE - 2010 – MPU – Analista de Sistemas) Uma página web que utiliza a
tecnologia Ajax depende de navegadores que implementaram o objeto
XMLHttpRequest e faz uso de JavaScript.

Comentários:

Perfeito, é exatamente isso!

16712855225

Gabarito: C

11. (CESPE - 2010 – SERPRO – Analista de Sistemas) Considerando as tecnologias


atualmente disponíveis para o desenvolvimento de sistemas, o analista Pedro
deverá escolher ferramentas a serem utilizadas em um projeto. Se a aplicação
for on-line e com grande interação entre o usuário e o sítio na Web, Pedro
poderá escolher o Ajax, por incorporar um conjunto de tecnologias necessárias
(JavaScript, CSS e XML).

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Perfeito! AJAX é um conjunto de tecnologias, tais como: XML, JSON, XSTL, HTML,
XHTML, DOM, JavaScript, CSS e XMLHttpRequest.

Gabarito: C

12. (CESPE - 2010 – – Analista de Sistemas) Para suportar a construção de


aplicações com Ajax e JSF, recomenda-se aos desenvolvedores de páginas que
usem a tag <f:ajax>, relacionada ao processamento de pedidos http assíncronos.

Comentários:

Perfeito! A partir da versão 2.0, JSF passou a suportar AJAX de forma nativa. Por
meio da tag <f:ajax>.

Gabarito: C

13. (CESPE - 1 – ECT – Analista de Sistemas) O Ajax incorpora diferentes


tecnologias, como o DOM, o XML, o XSLT, o objeto XMLHttpRequest, o objeto
XMLHttpResponse e o Javascript, cuja função é fazer a junção entre os
elementos.

Comentários:

Não existe o objeto XMLHttpResponse! Não sei o que é, não se de onde a banca
tirou isso, só sei que está completamente errado, porém foi dada como verdadeira.

Gabarito: C

14. (CESPE - 2012 – MPE/PI – Analista de Sistemas) Nas aplicações desenvolvidas


16712855225

com AJAX, a comunicação entre as aplicações na Web e o servidor é feita de


forma síncrona.

Comentários:

Não, de forma assíncrona.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

15. (CESPE - 2012 – TJ/AC – Analista de Sistemas) Ao utilizar a tecnologia Ajax para
verificar o objeto window.ActiveXObject por meio de um teste lógico no Opera,
obtém-se o resultado booliano true.

Comentários:

Não! Se o teste ocorre no Opera, o resultado é false, visto que esse objeto verifica
compatibilidade com o Internet Explorer.

Gabarito: E

16. (CESPE - 2012 – TJ/AC – Analista de Sistemas) No objeto do Ajax


XMLHttpRequest, permite-se verificar o código do status da solicitação por meio
de uma função que utilize o evento onreadstatechange.

Comentários:

Na verdade, é o evento se chama onreadystatechange, mas a banca marcou a


questão como verdadeira.

Gabarito: C

17. (CESPE - 2012 – TJ/AL – Analista de Sistemas – B) O uso do objeto


XMLHttpRequest em AJAX faz com que seja necessário recarregar a página
inteira, impossibilitando que atualizações de partes específicas sejam realizadas
separadamente.

Comentários:
16712855225

Pelo contrário, recarrega-se apenas uma parte da página!

Gabarito: E

18. (CESPE - 2012 – TJ/RO – Analista de Sistemas – A) O Ajax utiliza, entre outros
componentes, o XMLHttpRequest, armazenando os dados no lado servidor da
aplicação, sem interação com o lado cliente.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Há grande interação com o cliente, visto que o JavaScript controla o navegador do


cliente.

Gabarito: E

19. (CESPE - – TJ/RO – Analista de Sistemas – E) O Ajax é um padrão JEE que


permite desenvolver aplicações web e recursos semelhantes às aplicações
desktop, sem necessidade de atualização (reload) da página. Por utilizar recursos
de Javascript e CSS, o Ajax permite encapsular regras de negócio e workflow.

Comentários:

AJAX não é um Padrão JEE!

Gabarito: E

(CESPE - 2012 – T J – Analista de Sistemas) O Ajax tem como base os padrões


da Internet, como Javascript, CSS e XML. Os aplicativos AJAX dependem de
plataforma específica para rodarem.

Comentários:

Não, são multiplataforma!

Gabarito: E

21. (CESPE - 2012 – TRE/RJ – Analista de Sistemas) O objeto XMLHttpRequest do


AJAX — utilizado para trocar dados com o servidor — pode atualizar partes de
uma página web, sem que seja preciso carregá-la por inteiro.
16712855225

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

(CESPE - 3 – CNJ – Analista de Sistemas) Ajax é uma nova linguagem de


programação cujo objetivo é implementar características de iteratividade
encontradas na Web 3.0.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Comentários:

Ajax não é uma linguagem de programa, mas uma coleção de tecnologias.

Gabarito: E

(CESPE - 2013 – CPRM – Analista de Sistemas) Ajax é uma tecnologia utilizada


para criar páginas web dinâmicas e com conteúdo assíncrono. É composto
unicamente por JavaScript e por XML. Quando uma função em JavaScript envia
uma requisição do cliente para o servidor, a resposta do servidor ocorre por
meio do document object model (DOM), exclusivamente em XML. O cliente
processa esse XML e retorna para o servidor sem a necessidade de renderizar
novamente a página web.

Comentários:

Na verdade, é composto por diversas tecnologias como: XML, JSON, XSTL, HTML,
XHTML, DOM, JavaScript, CSS e XMLHttpRequest. Além disso, a resposta pode vir
em XML, JSON, HTML ou Texto Puro!

Gabarito: E

24. (CESPE - 2013 – MPOG – Analista de Sistemas) O Ajax — que carrega e renderiza
uma página utilizando recursos de scripts que estão rodando pelo lado do cliente
(navegador) — utiliza um objeto XMLHttpRequest e o método open para abrir
um documento em uma linguagem de marcação, bem como para passar
argumentos e capturar uma resposta.

Comentários: 16712855225

Perfeito, é exatamente isso!

Gabarito: C

(CESPE - 2013 – MPU – Analista de Sistemas) As caraterísticas do objeto


XMLHttpRequest, que é utilizado para trocar dados com o servidor, incluem
atualizar a página web sem a necessidade de recarregar a página; enviar dados
para o servidor depois de a página web ser carregada; e receber dados do
servidor depois da página já carregada.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Comentário

Perfeito, é exatamente isso!

Gabarito: C

(CESPE - 2013 – SERPRO – Analista de Sistemas) Com o uso de Ajax no início de


cada seção, é carregado um engine Ajax que permite que a interação da
aplicação cliente com a aplicação servidor seja feita de forma síncrona.

Comentários:

Na verdade, é assíncrona!

Gabarito: E

27. (CESPE - 2013 – TCE/RO – Analista de Sistemas) Ajax é o uso metodológico de


tecnologias como Javascript e XML. Para a recuperação assíncrona de dados, o
Ajax utiliza o objeto XMLHttpsRequest; a comunicação deve realizar-se por meio
de requisições HTTPS; e o retorno dos dados deve ocorrer em formato XML.

Comentários:

Na verdade, é XMLHttpRequest e, não, XMLHttpsRequest. De fato, a comunicação


até pode ocorrer por meio de HTTPS, mas continua utilizando-se o mesmo objeto!
Por fim, o retorno dos dados pode ocorrer em XML, HTML, JSON ou Texto Puro.

Gabarito: E
16712855225

(CESPE - 2013 – TRE/MS – Analista de Sistemas) A tecnologia web AJAX, muito


utilizada em sites, incorpora a tecnologia:

a) ActionScript.
b) WAP.
c) XSLT.
d) Telnet.
e) VoIP.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Trata-se do XSLT!

Gabarito: C

(CESPE - 2013 – TRT/17 – Analista de Sistemas) O objeto XMLHttpRequest


permite recuperar dados do servidor web em segundo plano. Esses dados
podem ser recebidos do servidor por meio de JSON, XML, HTML ou como texto
puro.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(FCC – 7 – TRE/MS – Analista de Sistemas) Asynchronous Javascript and XML


(Ajax) é uma técnica de desenvolvimento de aplicações web cujo objetivo é a
troca de pequenas porções de dados entre um browser e um servidor web de
modo a evitar a recarga de toda a página cada vez que um cliente solicita uma
mudança. Sobre Ajax considere as afirmativas abaixo.

I. É uma técnica indicada para melhorar a experiência do usuário, reduzir a


utilização de banda e claramente separar dados, formatação, estilo e
funcionalidade.

II. O modelo de objetos html/xml (DOM) é acessado e transformado por


linguagens de script como JavaScript.

III. O objeto XMLHttpRequest e/ou o objeto iFrame são utilizados para troca de
dados assíncrona com o servidor.

É correto o que se afirma em:

a) I, apenas.
b) II, apenas.
c) III, apenas.
d) I e III, apenas.
e) I, II e III.
16712855225

Comentários:

(I) Perfeito, perfeito, perfeito, nada a acrescentar; (II) Sim, item perfeito também; (III)
Também está correto! Pode-se utilizar o iFrame (Inline Frame) para embarcar
aplicações interativas em páginas web.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(FCC - – MPE/RS – Analista de Sistemas) Para capturar as respostas de uma


aplicação Web dinâmica em AJAX básico utiliza-se somente:

a) responseText e responseXML.
b) responseText e responseHTML.
c) responseText.
d) responseXML.
e) responseHTML.

Comentários:

Trata-se da primeira opção: responseText e responseXML.

barito: A

(FCC - – MPE/RS – Analista de Sistemas) Dentre as tecnologias que


compõem o AJAX, aquelas que têm como principal função fazer o intercâmbio
e a manipulação de dados são:

a) JavaScript e XMLHttpRequest.
b) XML e XSLT.
c) HTML e XHTML.
d) JavaScript e CSS.
e) DOM e CSS.

Comentários:

- Apresentação: HTML/XHTML e CSS;


- Exposição e Interação Dinâmica: DOM; 16712855225

- Intercâmbio de Dados: XML ou JSON;


- Manipulação de Dados: XSLT;
- Recuperação Assíncrona de Dados: XMLHttpRequest;
* JavaScript é o responsável por reunir todas essas tecnologias.

Gabarito: B

(FCC - – MPE/RS – Tecnólogo Para fazer o intercâmbio e a manipulação


de dados em uma aplicação Web, o modelo AJAX normalmente utiliza:

a) XML e XSLT.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

b) HTML, XHTML e CSS.


c) XMLHttpRequest.
d) JavaScript.
e) DOM.

Comentários:

- Apresentação: HTML/XHTML e CSS;


- Exposição e Interação Dinâmica: DOM;
- Intercâmbio de Dados: XML ou JSON;
- Manipulação de Dados: XSLT;
- Recuperação Assíncrona de Dados: XMLHttpRequest;
* JavaScript é o responsável por reunir todas essas tecnologias.

Gabarito: A

(FCC - – / – Analista de Sistemas) Esse objeto é o ponto chave do AJAX.


Pode ser considerado um objeto Javascript que torna possível a comunicação
assíncrona com o servidor. O objeto citado é do tipo:

a) XMLRequest.
b) XMLAjaxActiveXObject.
c) HttpServletResponse.
d) HttpServletRequest.
e) XMLHttpRequest.

Comentários:

O objeto responsável pela comunicação assíncrona com o servidor é chamado:


16712855225

XMLHttpRequest.

Gabarito: E

(FCC - – TCE/PR – Analista de Sistemas) No AJAX, o objeto XMLHttpRequest


possui diversas propriedades importantes para realizar a comunicação com o
servidor. Quando uma solicitação para um servidor é enviada, normalmente
deseja-se executar algumas ações com base na resposta. O evento utilizado para
especificar o que vai acontecer quando a resposta do servidor está pronta para
ser processada é o:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

a) oncompletedrequest.
b) onserverreturn.
c) onendstatus.
d) onreadystatechange.
e) onreadystate.

Comentários:

Trata-se do onreadystatechange.

Gabarito: D

(FCC - – INFRAERO – Analista de Sistemas) Representa uma desvantagem


do uso de AJAX:

a) Troca mensagens entre o cliente e o servidor de forma assíncrona, ou seja,


envia requisições e continua o processamento sem precisar aguardar a resposta.

b) Trata-se principalmente de JavaScript que executa no navegador do usuário.


Se for desativado o processamento do JavaScript no navegador, a aplicação
pode falhar.

c) Recebe respostas às requisições na mesma página sem a necessidade de


refresh.

d) Executa os processos em paralelo às requisições/respostas.

e) Manipula o conteúdo XML nas aplicações para desktop de forma simples.


16712855225

Comentários:

Todas apresentam vantagens, exceto a segunda opção! De fato, se o usuário


desativar o JavaScript em seu navegador, a aplicação pode falhar e essa é uma
grande desvantagem do AJAX.

Gabarito: B

(FCC - – TRE/RN – Analista de Sistemas) Agrega um conjunto de tecnologias


conhecidas trabalhando juntas para tornar páginas Web mais interativas com o
usuário, utilizando-se de solicitações assíncronas de informações:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

a) XML.
b) JavaScript.
c) XHTML.
d) AJAX.
e) CSS.

Comentários:

Trata-se obviamente do AJAX!


Gabarito: D

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(CESGRANRIO - – DNPM – Analista de Sistemas) AJAX é um termo que se


refere a um conjunto de tecnologias para desenvolvimento de aplicações WEB.
Assinale a opção que contempla uma dessas tecnologias.

a) Ant
b) XML
c) WiMAX
d) VoIP
e) Jakarta

Comentários:

AJAX contempla JavaScript e XML!

Gabarito: B

(CESGRANRIO - 2007 – EPE – Analista de Sistemas) Que conjunto de tecnologias


é utilizado em aplicações WEB na Internet para propiciar forte interatividade e
dinamismo?

a) CSS
b) SMTP 16712855225

c) AJAX
d) FTP
e) UTF-8

Comentários:

Trata-se do AJAX! Ele é um conjunto de tecnologias que propiciam forte


interatividade e dinamismo.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(CESGRANRIO - – CMB – Analista de Sistemas) AJAX (do inglês


Asynchronous Javascript And XML) tem sido largamente utilizado no
desenvolvimento de aplicações WEB. Um dos conceitos centrais do AJAX é a
possibilidade de serem feitas requisições ao servidor através de código
Javascript, rodando no navegador do usuário. Esse recurso é empregado
principalmente para permitir que:

a) o processamento das regras de negócio da aplicação seja distribuído aos


clientes, minimizando a carga do servidor.

b) o usuário envie uma requisição assíncrona e verifique o resultado da mesma


mais tarde, sem precisar aguardar pela resposta imediata do servidor.

c) as páginas carreguem mais rapidamente, pois as requisições são paralelizadas


e compactadas durante o trânsito.

d) as páginas compostas diretamente em XML, ao invés de XHTML ou HTML,


sejam apresentadas no navegador do usuário.

e) partes de uma página web sejam atualizadas, sem que o browser recarregue
a página inteira do servidor, proporcionando uma interface com melhor
usabilidade.

Comentários:

(a) Não, o processamento das regras de negócio continua sendo no Servidor; (b)
Não há nada de errado com esse item, no entanto o recurso não é empregado
principalmente para isso! Eu posso verificar o resultado mais tarde? Sim, mas o Ajax
é utilizado principalmente para que eu possa verificar o resultado imediatamente
16712855225

sem a necessidade de recarregar a página inteira; (c) Não, é para que partes das
páginas recarreguem de forma dinâmica e interativa; (d) Não, são apresentadas
como XHTML ou HTML; (e) Perfeito, é exatamente isso!

Gabarito: E

(CESGRANRIO - 1 – IBGE – Analista de Sistemas) O código HTML, em


construção, abaixo demonstra a utilização de AJAX.

<html>
<head>
script language JavaScript

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08
function submitForm()
{
var xhr=null;
try
{ xhr = new object(); }
catch(e) {}
xhr.onreadystatechange = function()
{
document ajax dyn value Wait server
if(xhr.readyState == 4)
{
if(xhr.status == 200)
document ajax dyn value Recebido xhr responseText
else
document ajax dyn value Erro xhr status xhr statusText
}
}
};
xhr open GET data xml true
xhr.send(null);
}
</script>
</head>
<body>
FORM method POST name ajax action
INPUT type submit value Submit ONCLICK submitForm
INPUT type text name dyn value
</FORM>
</body>
</html>

Para que esse código possa utilizar a tecnologia AJAX, na linha “xhr = new
object();”, “xhr” deve receber um objeto Javascript que torna possível a
comunicação assíncrona com o servidor, sem a necessidade de recarregar a
página por completo. Para tanto, no código acima, “object” deve ser substituído
por:

a) responseXML.
b) MIME.
c) XMLHttpRequest.
d) DOMParser.
16712855225

e) setRequestReader.

Comentários:

Trata-se do Objeto XMLHttpRequest.

Gabarito: C

(CESGRANRIO - 1 – PETROBRÁS – Analista de Sistemas) Ajax não é


meramente uma tecnologia. É uma abordagem moderna para desenvolvimento

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

de sites iterativos. A abordagem de desenvolvimento tradicional tem


semelhanças e diferenças em relação ao Ajax. Uma característica exclusiva de
Ajax em relação à abordagem tradicional é que:

a) executa as requisições através do protocolo HTTP.


b) usa javascript como linguagem para desenvolver código no lado do cliente.
c) usa (x)html / css para definir o aspecto visual da página.
d) permite recuperação assíncrona de dados usando XMLHttpRequest.
e) representa os objetos no lado cliente com DOM.

Comentários:

A única opção que apresenta uma característica de fato exclusiva em relação à


abordagem tradicional é quarta opção: permite recuperação assíncrona de dados
usando XMLHttpRequest.

Gabarito: D

(CESGRANRIO - 1 – LIQUIGÁS – Analista de Sistemas) Duas das tecnologias


que compõem o Ajax são:

a) DOM e CSS
b) ASP e XML
c) Java e XML
d) Java e CSS
e) JavaScript e ASP

Comentários:
16712855225

DOM? Sim! CSS? Sim! ASP? Não! XML? Sim! Java? Não! JavaScript? Sim! Portanto, é
a primeira opção: DOM e CSS!

Gabarito: A

(CESGRANRIO - 2013 – LIQUIGÁS – Analista de Sistemas) Considere as


afirmativas a seguir sobre a tecnologia AJAX.

I – Uma das aplicações mais frequentes da tecnologia AJAX é na atualização


assíncrona do conteúdo de páginas HTML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

II – Boa parte da funcionalidade da tecnologia AJAX é viabilizada pelo objeto


XMLHttpRequest, que é capaz de transmitir requisições HTTP de modo
assíncrono.

III – A tecnologia AJAX utiliza código Java para a manipulação do conteúdo de


páginas HTML.

Está correto o que se afirma em:

a) I, apenas
b) II, apenas
c) I e II, apenas
d) II e III, apenas
e) I, II e III

Comentários:

(I) Sim, perfeito! (II) Sim, perfeito! (III) Não, utiliza DOM!

Gabarito: C

(CESGRANRIO - 2014 – IBGE – Analista de Sistemas) Com o objetivo de criar


páginas dinâmicas para o desenvolvimento de aplicações web, AJAX é um termo
que descreve um(a):

a) protocolo
b) banco de dados
c) coleção de tecnologias
d) linguagem de programação 16712855225

e) linguagem de marcação

Comentários:

AJAX é um conjunto de tecnologias, tais como: XML, JSON, XSTL, HTML, XHTML,
DOM, JavaScript, CSS e XMLHttpRequest.

Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


JAVASCRIPT

(CESPE – – TCE/PE – Analista de Sistemas Uma diferença entre as


linguagens Java e JavaScript é que a linguagem Java é fortemente tipada,
enquanto a linguagem JavaScript tem um sistema de tipos fracos.

(CESPE – – SERPRO – Analista de Sistemas) O Javascript expande as


capacidades de uma página HTML e, unido ao CSS, formou o DHTML.

(CESPE – 9 – TCE/AC – Analista de Sistemas) Um dos principais problemas


da Internet, a disseminação de vírus pode ser solucionado com a instalação de
javascripts nos computadores dos usuários.

(CESPE – 2010 – MPU – Analista de Sistemas) JavaScript é uma linguagem de


criação de scripts de uso geral, projetada para ser embutida em aplicativos que
executam em um navegador Web. Os aplicativos Ajax são escritos em JavaScript.

(CESPE – 2010 – TRE/BA – Analista de Sistemas) O código Javascript existente em


um documento HTML é executado no navegador que está acessando esse
documento.

(CESPE - 2012 - TCE-ES - Auditor de Controle Externo - Tecnologia da


Informação É necessário que as variáveis tenham a definição de um tipo antes
de serem utilizadas em um programa JavaScript.

(CESPE – 2011 – TJ/ES – Analista de Sistemas) Derivada da linguagem Java, a


16712855225

Javascript é uma linguagem utilizada exclusivamente para navegadores web.

(CESPE – 2013 – SERPRO – Analista de Sistemas) A função eval do JavaScript


executa comandos de linguagens que estejam escritos em uma string.

(CESPE – 2013 – CNJ – Analista de Sistemas) Uma maneira de criar um código


HTML dinâmico é a partir da definição de objetos JavaScript dentro da tag
<head>.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

10. (CESPE – 2013 – TRE/MS – Analista de Sistemas) Na linguagem Javascript, uma


variável declarada que possa ser acessada a qualquer momento é denominada
variável:

a) de método.
b) de script.
c) global.
d) local.
e) de função.

11. (CESPE – 2015 – TCU – Analista de Sistemas) No trecho do código JavaScript a


seguir, o valor retornado em this, da função minhaMsg, será CampoRequerido.

var minhaMsg ={ m1: "Campo", m2:"Requerido", mensagem: function () {


return this; } }
minhaMsg.mensagem();

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


JAVASCRIPT

(FCC – – TRT/11 – Analista de Sistemas) Em JavaScript, para declarar nomes


de identificadores válidos utiliza-se:

a) somente número no primeiro caractere.


b) somente letra ou underscore no primeiro caractere.
c) qualquer tipo de caractere a partir do segundo caractere.
d) espaço entre caracteres a partir do segundo caractere.
e) uma palavra reservada do JavaScript

(FCC – 7 – TRE/SE – Analista de Sistemas) O cliente JavaScript, quando se


soltar um botão do mouse pressionado, invocará o evento:

a) MouseOver.
b) MouseDown.
c) MouseUp.
d) MouseMove.
e) MouseOut.

(FCC – 2008 – MPE/RS – Analista de Sistemas) Uma função embutida na


linguagem JavaScript que calcula o conteúdo de uma string denomina-se:

a) string.
b) eval.
c) number. 16712855225

d) parseInt.
e) parseFloat.

(FCC – 2014 – TRT/1 – Analista de Sistemas) O trecho de programa a seguir foi


elaborado na linguagem HTML com JavaScript e será aberto por um navegador
que as suporte.

<html>
<body>
<h1>Página Principal</h1>
<form>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

comando y
</form>
</body>
</html>

O comando que deve ser colocado no lugar do comando y, de modo que, ao


se pressionar o botão Nova Página, seja aberta a página P1.html, é:

a) <input type = "button" text="Nova Página" click="window.location='P1.html'">

b) <input type="button" text="Nova Página" onclick =


"window.location='P1.html'">

c) <input type="onbutton" text="Nova Página" onclick =


"window.location='P1.html'">

d) <input type="button" value="Nova Página" onclick =


"window.location='P1.html'">

e) <input type="onbutton" value="Nova Página" click =


"window.location='P1.html'">

(FCC – – TRT/18 – Analista de Sistemas) Na linguagem JavaScript, os


16712855225

métodos de interface com o usuário que fazem parte do objeto window são
apenas os denominados:

a) select, submit e confirm.


b) open, alert e write.
c) click, select e write.
d) open, submit e close.
e) alert, confirm e prompt.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(FCC – 2010 – DPE/SP – Analista de Sistemas) As tecnologias Web utilizam


linguagem de scripting JavaScript, linguagem de scripting ASP e applets Java
para incluir aplicações, respectivamente, no lado:

a) servidor, cliente e servidor.


b) cliente, servidor e cliente.
c) servidor, servidor e cliente.
d) cliente, cliente e servidor.
e) cliente, cliente e cliente.

(FCC – 1 – TRT/20 – Analista de Sistemas) No JavaScript, a caixa de mensagem


“Confirm”:

a) permite que o usuário insira um nome e/ou um número dentro da caixa de


texto.
b) Exibe apenas uma informação para o usuário.
c) Permite que o usuário insira um nome dentro da caixa de texto.
d) Permite que o usuário insira um número dentro da caixa de texto.
e) Solicita uma confirmação do usuário, positiva ou negativa.

(FCC – 1 – TRT/20 – Analista de Sistemas) É um método do objeto History:

a) Case.
b) Left.
c) Open.
d) Forward
e) Hostname.

(FCC – 1 – TRT/20 – Analista de Sistemas) O evento Onblur em JavaScript


16712855225

ocorre quando o:

a) objeto perde o foco, independente de ter havido mudança de conteúdo.


b) objeto recebe o foco.
c) objeto é selecionado.
d) ponteiro do mouse passa por sobre o objeto.
e) objeto perde o foco e houve mudança de conteúdo.

10. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A função JavaScript utilizada para calcular os caracteres dentro de uma
String e mostrar seu resultado para o usuário é denominada:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

a) parseInt.
b) parseFloat.
c) toString.
d) Eval.
e) toResult.

11. (FCC - 2008 - METRÔ- - Analista Treinee - Análise de Sistemas Em Javascript,


os delimitadores naturais para uma string são " ou '. Caso seja necessária a
utilização destes caracteres como parte da string, deve ser utilizado, precedendo
a " ou ', o controle especial:

a) /*.
b) //.
c) \\.
d) /.
e) \.

12. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da
Informação O parseInt do JavaScript é um método que:

a) converte um número inteiro para uma string, numa base predefinida.


b) retorna o número inteiro de uma função.
c) calcula o valor inteiro de uma expressão.
d) calcula o valor inteiro dos caracteres de uma string.
e) converte uma string numa base predefinida, para um número inteiro.

13. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web) Em JavaScript, o evento onChange será ativado sempre que um objeto
16712855225

perder o foco e:

a) sair da página HTML.


b) alternar com outro foco específico.
c) deixar em destaque o texto.
d) houver mudança de janela.
e) houver mudança de conteúdo.

14. (FCC - 2009 - -SE - Técnico Judiciário - Programação de Sistemas) Quando


navegadores não tiverem suporte ao JavaScript ou estiverem com a execução
de script bloqueada será exibido o conteúdo alternativo:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

a) contido dentro da tag SCRIPT.


b) contido dentro da tag NOSCRIPT.
c) por meio do atributo LANGUAGE na tag NOSCRIPT.
d) por meio do atributo LANGUAGE na tag SCRIPT.
e) por meio do atributo TYPE na tag SCRIPT.

15. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A conversão de todos os caracteres contidos em uma string para letras
maiúsculas é realizada pelo método JavaScript do objeto string:

a) toUpper.
b) toUpperCase.
c) toLower.
d) toLowerCase.
e) toMascCase.

16. (FCC - 2010 - - - Agente Legislativo de Serviços Técnicos e Administrativos


- Processamento de Dados Considere que códigos de programa desenvolvidos
com JavaScript podem ser executados:

I. somente no lado do cliente.


II. somente no lado do servidor.
III. tanto no lado do cliente quanto no lado do servidor.

Está correto o que se afirma APENAS em

a) I, II e III.
b) I e III. 16712855225

c) II e III.
d) II.
e) III.

17. (FCC - 2010 - METRÔ- - Analista - Tecnologia da Informação No JavaScript,


é um método do objeto History:

a) open.
b) forward.
c) hostname.
d) case.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

e) left.

18. (FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação Em


JavaScript, o operador representado por três sinais de igual consecutivos retorna
true se os operandos envolvidos forem:

a) iguais e do mesmo tipo.


b) iguais e do tipo numérico, apenas.
c) iguais, mas não do mesmo tipo.
d) diferentes e de tipos diferentes.
e) diferentes, mas do mesmo tipo.

19. (FCC - - -SE - Técnico Judiciário - Programação de Sistemas A função


parsenlnt( ) da biblioteca JavaScript tem o objetivo de:

a) transformar uma string de caracteres em um número, numa determinada base


numérica.
b) informar a quantidade de caracteres que compõem uma string.
c) extrair uma determinada quantidade de caracteres de uma string.
d) substituir partes dos caracteres de uma string por uma sequência de outros
caracteres.
e) dividir uma string de caracteres em partes menores de tamanho fixo.

(FCC - 2009 - -SE - Técnico Judiciário - Programação de Sistemas Para abrir


uma janela do navegador com o JavaScript utiliza-se a sentença:

a) window.open( )
b) page.open( )
c) document.open( ) 16712855225

d) page.init( )
e) window.init( )

21. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web Em JavaScript, as estruturas de repetição utilizadas podem ser:

a) for, while e do while.


b) for, if e do while.
c) if, while e do while.
d) for, while e if.
e) for, if e else.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web A raiz quadrada de um número é retornada pela função JavaScript
denominada:

a) Math.exp()
b) Math.round()
c) Math.sqrt.round()
d) Math.sqrt()
e) Math.circle()

(FCC – 1 – DPE/SP – Analista de Sistemas) No javascript, a caixa de mensagem


"Alert":

a) permite que o usuário insira um nome dentro da caixa de texto.


b) permite que o usuário insira um número dentro da caixa de texto.
c) solicita uma confirmação do usuário, positiva ou negativa.
d) permite que o usuário insira um nome e/ou um número dentro da caixa de
texto.
e) exibe apenas uma informação para o usuário.

24. (FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da
Informação O método getMonth() pode retornar o seguinte intervalo de valores:

a) [0 a 36]
b) [1 a 12]
c) [0 a 11]
d) [0 a 23]
e) [0 a 24] 16712855225

(FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da


Informação O evento Onblur ocorre quando o objeto:

a) perde o foco, independentemente de ter havido mudança de conteúdo.


b) perde o foco e há mudança de conteúdo.
c) muda o foco.
d) recebe o foco.
e) é selecionado.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(FCC – 2012 – TCE/AM – Analista de Sistemas) Em JavaScript, um objeto Array é


usado para armazenar vários valores em uma única variável. Sobre a criação de
objetos Array em JavaScript, considere:

I. var nomes=new Array();


nomes[0] ="Ana";
nomes[1] ="Pedro";
nomes[2] ="Jorge";
II. var nomes=new Array("Ana","Pedro","Jorge");
III. var nomes= ["Ana","Pedro","Jorge"];
IV. String nomes[3] = new String["Ana","Pedro","Jorge"];

Uma forma correta de criar um objeto Array chamado nomes que armazena o
nome de três pessoas, pode ser encontrada em:

a) I, II, III e IV.


b) I, II e III, apenas.
c) I e II, apenas.
d) III e IV, apenas.
e) I, apenas.

27. (FCC – 2013 – AL/RN – Analista de Sistemas) Aprender programação avançada


em JavaScript é normalmente muito difícil e demorado. Por esse motivo, muitas
empresas optam por utilizar bibliotecas chamadas de frameworks JavaScript, que
disponibilizam muitas funções prontas para tarefas comuns.

NÃO é um framework JavaScript:

a) MooTools 16712855225

b) jQuery
c) Prototype
d) Log4J
e) Dojo

(FCC – 2014 – AL/PE – Analista de Sistemas) Em JavaScript, há vários métodos


pré-definidos para manipular valores em arrays. Dois destes métodos permitem
adicionar e remover um elemento no final de uma array, respectivamente.

Considere a array a seguir:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

var carros = ["Gol", "Palio", "Fiesta", "Onix"];

Para inserir o valor "HB20" no final da array carros e depois removê-lo utiliza-se,
respectivamente, as instruções:

a) carros.slice("HB20"); e carros.remove();
b) carros.put("HB20"); e carros.drop();
c) carros.push("HB20"); e carros.pop();
d) carros.set("HB20"); e carros.get();
e) carros.slice("HB20"); e carros.unshift();

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JAVASCRIPT

(ESAF – – CGU – Analista de Sistemas) Variáveis JavaScript contêm:

a) um identificador, escopo e um tipo de dados específico.


b) um contextualizador, localizador e um tipo de dados específico.
c) um identificador, parâmetro e um tipo de escopo.
d) um delimitador, escopo e um referenciador.
e) um identificador, extensão e um ponteiro.

(FGV – – Senado Federal – Analista de Sistemas) Em relação ao JavaScript,


não é correto afirmar que:

a) é uma linguagem script que só pode ser usada em páginas HTML.


b) proporciona aos desenvolvedores de páginas web uma linguagem de
programação.
c) é uma linguagem interpretada.
d) pode ser usada para criar cookies.
e) pode adicionar interatividade nas páginas html.

(FGV – 2015 – DPE/RO – Analista de Sistemas) As linguagens de programação


utilizadas em programação frontend e back-end são, respectivamente:

a) Javascript e Java;
b) PHP e Javascript;
c) Python e Javascript; 16712855225

d) PHP e Java;
e) C++ e PHP.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JQUERY
(FCC - 2012 – MPE/AP - Analista de Sistemas) O seletor jQuery:

a) $("[href!='#']") seleciona todos os elementos cujo atributo href não contenha


'#'.

b) $("[href$='.jpg']") seleciona todos os elementos cuja propriedade href


contenha '.jpg'.

c) $("div#intro .head") seleciona todos os elementos com id="head" dentro de


um elemento <div> com class="intro".

d) $("p#intro:first") seleciona o primeiro elemento <p> com class="intro".

e) $("ul li:first-child") seleciona todos os elementos <li> do primeiro elemento


<ul>.

(VUNESP – 2015 – TCE/SP - Analista de Sistemas) O método do jQuery que


permite ocultar um elemento selecionado é:

b) .show(false)
b) .hide()
c) .mask()
d) .visible(false)
e) .display(false) 16712855225

(FCC – 2014 – TRT/13 - Analista de Sistemas) Considere a página abaixo,


construída utilizando jQuery:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Home</title>
<script type="text/javascript"
src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
..I...
});
</script>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08
</head>
<body>
<button type="button">Esconder</button>
<p class="par">Texto do parágrafo.</p>
</body>
</html>

Para que, ao se clicar no botão Esconder, o texto do parágrafo se torne oculto,


deve-se preencher a lacuna I com:

a) $('button').click(function(){$('p#par').hide();});
b) $('button:eq(0)').click(function().defineProperty('p.par').hide());
c) $('button').click(function(){$('p.par').hidden();});
d) $('button:eq(1)').click(function(){$('p#par').hide();});
e) $('button').click(function(){$('p.par').hide();});

(CESPE – 2012 – ANAC - Analista de Sistemas) Em jQuery, o método hide( )


permite ocultar elementos HTML. Assim, a sintaxe correta para ocultar o
elemento corrente é $(this).hide() e, para ocultar todos os elementos <p> da
página, é $(“<p>”).hide( ).

(ESAF – 2012 – CGU - Analista de Sistemas) São plug-ins da biblioteca jQuery


destinados a criar funcionalidade para a interface do usuário:

a) Plug-ins nativos para interação. Widgets. Effects.

b) Plug-ins interativos tipo slider. Wide-rangers. Effects.

c) Plug-ins nativos da família datepicker. MainWidgets. Efforts.

d) Widgets nativos para marcação. Widgets de monitoramento. Plug-ins de


16712855225

localização.

e) Plug-ins nativos para interação. Upload widgets. Effective plug-ins.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


AJAX
(CESPE - 2007 – IE/MA – Analista de Sistemas) A segunda geração de páginas
para Internet (Web 2.0) permite ao usuário uma maior interatividade com os
portais Web. Isso é possível graças a tecnologias como Ajax e CSS, que permitem
o processamento do código da página no lado do cliente.

(CESPE - 2007 – SERPRO – Analista de Sistemas) O Ajax basicamente oferece


uma metodologia para desenvolvimento de aplicações na Web que une
Javascript e XML, mas que só pode ser executado em browsers lançados após
2001.

(CESPE - – INMETRO – Analista de Sistemas) Sempre que o usuário


pressionar uma tecla nos campos nome e hora do formulário de nome
formulario, será apresentada uma janela pop-up ao usuário com a expressão:
Seu browser suporta Ajax! 16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(CESPE - 2009 – INMETRO – Analista de Sistemas) Um novo pedido HTTP será


enviado pelo browser ao servidor HTTP que enviou a página sempre que a
função ajaxFunction for executada com sucesso.

(CESPE - – TCE/RN – Analista de Sistemas) AJAX permite a construção de


aplicações web dinâmicas e interativas com o usuário, utilizando-se de
solicitações assíncronas de informações. Para isso, o AJAX engloba, em seu
modelo, os protocolos XHTML, CSS, DOM, XML, XSLT, XMLHttpRequest e
JavaScript, integrando todas as demais tecnologias.

(CESPE - – UNIPAMPA – Analista de Sistemas) Para se implementar uma


aplicação Ajax do lado cliente, podem-se utilizar, além do JavaScript, outras
linguagens de script, como VBScript, que também é capaz de fornecer a
funcionalidade requerida.

(CESPE - 2010 – BASA – Analista de Sistemas) Por meio da tecnologia AJAX, é


possível fazer o envio de formulários HTML por meio de estruturas de dados
baseadas em XML, sem a necessidade de recarregar novas páginas no
navegador.

(CESPE - 2010 – MPU – Analista de Sistemas) JavaScript é uma linguagem de


criação de scripts de uso geral, projetada para ser embutida em aplicativos que
executam em um navegador Web. Os aplicativos Ajax são escritos em JavaScript.

(CESPE - 2010 – MPU – Analista de Sistemas) O objeto XMLHttpRequest


apresenta a estrutura das páginas web como um conjunto de objetos
programáveis que pode ser manipulado com JavaScript.
16712855225

10. (CESPE - 2010 – MPU – Analista de Sistemas) Uma página web que utiliza a
tecnologia Ajax depende de navegadores que implementaram o objeto
XMLHttpRequest e faz uso de JavaScript.

11. (CESPE - 2010 – RPRO – Analista de Sistemas) Considerando as tecnologias


atualmente disponíveis para o desenvolvimento de sistemas, o analista Pedro
deverá escolher ferramentas a serem utilizadas em um projeto. Se a aplicação
for on-line e com grande interação entre o usuário e o sítio na Web, Pedro
poderá escolher o Ajax, por incorporar um conjunto de tecnologias necessárias
(JavaScript, CSS e XML).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

12. (CESPE - 2010 – TCU – Analista de Sistemas) Para suportar a construção de


aplicações com Ajax e JSF, recomenda-se aos desenvolvedores de páginas que
usem a tag <f:ajax>, relacionada ao processamento de pedidos http assíncronos.

13. (CESPE - 1 – ECT – Analista de Sistemas) O Ajax incorpora diferentes


tecnologias, como o DOM, o XML, o XSLT, o objeto XMLHttpRequest, o objeto
XMLHttpResponse e o Javascript, cuja função é fazer a junção entre os
elementos.

14. (CESPE - 2012 – MPE/PI – Analista de Sistemas) Nas aplicações desenvolvidas


com AJAX, a comunicação entre as aplicações na Web e o servidor é feita de
forma síncrona.

15. (CESPE - 2012 – TJ/AC – Analista de Sistemas) Ao utilizar a tecnologia Ajax para
verificar o objeto window.ActiveXObject por meio de um teste lógico no Opera,
obtém-se o resultado booliano true.

16. (CESPE - 2012 – TJ/AC – Analista de Sistemas) No objeto do Ajax


XMLHttpRequest, permite-se verificar o código do status da solicitação por meio
de uma função que utilize o evento onreadstatechange.

17. (CESPE - 2012 – TJ/AL – Analista de Sistemas – B) O uso do objeto


XMLHttpRequest em AJAX faz com que seja necessário recarregar a página
inteira, impossibilitando que atualizações de partes específicas sejam realizadas
separadamente.

18. (CESPE - 2012 – TJ/RO – Analista de Sistemas – A) O Ajax utiliza, entre outros
componentes, o XMLHttpRequest, armazenando os dados no lado servidor da
aplicação, sem interação com o lado cliente.
16712855225

19. (CESPE - 2012 – TJ/RO – Analista de Sistemas – E) O Ajax é um padrão JEE que
permite desenvolver aplicações web e recursos semelhantes às aplicações
desktop, sem necessidade de atualização (reload) da página. Por utilizar recursos
de Javascript e CSS, o Ajax permite encapsular regras de negócio e workflow.

(CESPE - 2012 – T J – Analista de Sistemas) O Ajax tem como base os padrões


da Internet, como Javascript, CSS e XML. Os aplicativos AJAX dependem de
plataforma específica para rodarem.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

21. (CESPE - 2012 – TRE/RJ – Analista de Sistemas) O objeto XMLHttpRequest do


AJAX — utilizado para trocar dados com o servidor — pode atualizar partes de
uma página web, sem que seja preciso carregá-la por inteiro.

(CESPE - 3 – CNJ – Analista de Sistemas) Ajax é uma nova linguagem de


programação cujo objetivo é implementar características de iteratividade
encontradas na Web 3.0.

(CESPE - 2013 – CPRM – Analista de Sistemas) Ajax é uma tecnologia utilizada


para criar páginas web dinâmicas e com conteúdo assíncrono. É composto
unicamente por JavaScript e por XML. Quando uma função em JavaScript envia
uma requisição do cliente para o servidor, a resposta do servidor ocorre por
meio do document object model (DOM), exclusivamente em XML. O cliente
processa esse XML e retorna para o servidor sem a necessidade de renderizar
novamente a página web.

24. (CESPE - 2013 – MPOG – Analista de Sistemas) O Ajax — que carrega e renderiza
uma página utilizando recursos de scripts que estão rodando pelo lado do cliente
(navegador) — utiliza um objeto XMLHttpRequest e o método open para abrir
um documento em uma linguagem de marcação, bem como para passar
argumentos e capturar uma resposta.

(CESPE - 2013 – MPU – Analista de Sistemas) As caraterísticas do objeto


XMLHttpRequest, que é utilizado para trocar dados com o servidor, incluem
atualizar a página web sem a necessidade de recarregar a página; enviar dados
para o servidor depois de a página web ser carregada; e receber dados do
servidor depois da página já carregada.

(CESPE - 2013 – SERPRO – Analista de Sistemas) Com o uso de Ajax no início de


16712855225

cada seção, é carregado um engine Ajax que permite que a interação da


aplicação cliente com a aplicação servidor seja feita de forma síncrona.

27. (CESPE - 2013 – TCE/RO – Analista de Sistemas) Ajax é o uso metodológico de


tecnologias como Javascript e XML. Para a recuperação assíncrona de dados, o
Ajax utiliza o objeto XMLHttpsRequest; a comunicação deve realizar-se por meio
de requisições HTTPS; e o retorno dos dados deve ocorrer em formato XML.

(CESPE - 2013 – TRE/MS – Analista de Sistemas) A tecnologia web AJAX, muito


utilizada em sites, incorpora a tecnologia:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

a) ActionScript.
b) WAP.
c) XSLT.
d) Telnet.
e) VoIP.

(CESPE - 2013 – TRT/17 – Analista de Sistemas) O objeto XMLHttpRequest


permite recuperar dados do servidor web em segundo plano. Esses dados
podem ser recebidos do servidor por meio de JSON, XML, HTML ou como texto
puro.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


AJAX
(FCC – 7 – TRE/MS – Analista de Sistemas) Asynchronous Javascript and XML
(Ajax) é uma técnica de desenvolvimento de aplicações web cujo objetivo é a
troca de pequenas porções de dados entre um browser e um servidor web de
modo a evitar a recarga de toda a página cada vez que um cliente solicita uma
mudança. Sobre Ajax considere as afirmativas abaixo.

I. É uma técnica indicada para melhorar a experiência do usuário, reduzir a


utilização de banda e claramente separar dados, formatação, estilo e
funcionalidade.

II. O modelo de objetos html/xml (DOM) é acessado e transformado por


linguagens de script como JavaScript.

III. O objeto XMLHttpRequest e/ou o objeto iFrame são utilizados para troca de
dados assíncrona com o servidor.

É correto o que se afirma em:

a) I, apenas.
b) II, apenas.
c) III, apenas.
d) I e III, apenas.
e) I, II e III.

– MPE/RS – Analista de Sistemas) Para capturar as respostas de uma


16712855225

(FCC -
aplicação Web dinâmica em AJAX básico utiliza-se somente:

a) responseText e responseXML.
b) responseText e responseHTML.
c) responseText.
d) responseXML.
e) responseHTML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

(FCC - – MPE/RS – Analista de Sistemas) Dentre as tecnologias que


compõem o AJAX, aquelas que têm como principal função fazer o intercâmbio
e a manipulação de dados são:

a) JavaScript e XMLHttpRequest.
b) XML e XSLT.
c) HTML e XHTML.
d) JavaScript e CSS.
e) DOM e CSS.

(FCC - – MPE/RS – Tecnólogo Para fazer o intercâmbio e a manipulação


de dados em uma aplicação Web, o modelo AJAX normalmente utiliza:

a) XML e XSLT.
b) HTML, XHTML e CSS.
c) XMLHttpRequest.
d) JavaScript.
e) DOM.

(FCC - – / – Analista de Sistemas) Esse objeto é o ponto chave do AJAX.


Pode ser considerado um objeto Javascript que torna possível a comunicação
assíncrona com o servidor. O objeto citado é do tipo:

a) XMLRequest.
b) XMLAjaxActiveXObject.
c) HttpServletResponse.
d) HttpServletRequest.
e) XMLHttpRequest.
16712855225

(FCC - – TCE/PR – Analista de Sistemas) No AJAX, o objeto XMLHttpRequest


possui diversas propriedades importantes para realizar a comunicação com o
servidor. Quando uma solicitação para um servidor é enviada, normalmente
deseja-se executar algumas ações com base na resposta. O evento utilizado para
especificar o que vai acontecer quando a resposta do servidor está pronta para
ser processada é o:

a) oncompletedrequest.
b) onserverreturn.
c) onendstatus.
d) onreadystatechange.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

e) onreadystate.

(FCC - – INFRAERO – Analista de Sistemas) Representa uma desvantagem


do uso de AJAX:

a) Troca mensagens entre o cliente e o servidor de forma assíncrona, ou seja,


envia requisições e continua o processamento sem precisar aguardar a resposta.

b) Trata-se principalmente de JavaScript que executa no navegador do usuário.


Se for desativado o processamento do JavaScript no navegador, a aplicação
pode falhar.

c) Recebe respostas às requisições na mesma página sem a necessidade de


refresh.

d) Executa os processos em paralelo às requisições/respostas.

e) Manipula o conteúdo XML nas aplicações para desktop de forma simples.

(FCC - – TRE/RN – Analista de Sistemas) Agrega um conjunto de tecnologias


conhecidas trabalhando juntas para tornar páginas Web mais interativas com o
usuário, utilizando-se de solicitações assíncronas de informações:

a) XML.
b) JavaScript.
c) XHTML.
d) AJAX.
e) CSS.
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


AJAX

(CESGRANRIO - – DNPM – Analista de Sistemas) AJAX é um termo que se


refere a um conjunto de tecnologias para desenvolvimento de aplicações WEB.
Assinale a opção que contempla uma dessas tecnologias.

a) Ant
b) XML
c) WiMAX
d) VoIP
e) Jakarta

(CESGRANRIO - 2007 – EPE – Analista de Sistemas) Que conjunto de tecnologias


é utilizado em aplicações WEB na Internet para propiciar forte interatividade e
dinamismo?

a) CSS
b) SMTP
c) AJAX
d) FTP
e) UTF-8

(CESGRANRIO - – CMB – Analista de Sistemas) AJAX (do inglês


Asynchronous Javascript And XML) tem sido largamente utilizado no
desenvolvimento de aplicações WEB. Um dos conceitos centrais do AJAX é a
possibilidade de serem feitas requisições ao servidor através de código
16712855225

Javascript, rodando no navegador do usuário. Esse recurso é empregado


principalmente para permitir que:

a) o processamento das regras de negócio da aplicação seja distribuído aos


clientes, minimizando a carga do servidor.

b) o usuário envie uma requisição assíncrona e verifique o resultado da mesma


mais tarde, sem precisar aguardar pela resposta imediata do servidor.

c) as páginas carreguem mais rapidamente, pois as requisições são paralelizadas


e compactadas durante o trânsito.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

d) as páginas compostas diretamente em XML, ao invés de XHTML ou HTML,


sejam apresentadas no navegador do usuário.

e) partes de uma página web sejam atualizadas, sem que o browser recarregue
a página inteira do servidor, proporcionando uma interface com melhor
usabilidade.

(CESGRANRIO - 1 – IBGE – Analista de Sistemas) O código HTML, em


construção, abaixo demonstra a utilização de AJAX.

<html>
<head>
<script language=”JavaScript”>
function submitForm()
{
var xhr=null;
try
{ xhr = new object(); }
catch(e) {}
xhr.onreadystatechange = function()
{
document.ajax.dyn.value=”Wait server...”;
if(xhr.readyState == 4)
{
if(xhr.status == 200)
{ document.ajax.dyn.value=”Recebido:” + xhr.responseText; }
else
{ document.ajax.dyn.value=”Erro: “ + xhr.status + “ “ + xhr.statusText; }
}
};
xhr.open(“GET”, “data.xml”, true); 16712855225

xhr.send(null);
}
</script>
</head>
<body>
<FORM method=”POST” name=”ajax” action=””>
<INPUT type=”submit” value=”Submit” ONCLICK=”submitForm()”>
<INPUT type=”text” name=”dyn” value=””>
</FORM>
</body>
</html>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 91 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

Para que esse código possa utilizar a tecnologia AJAX, na linha “xhr = new
object();”, “xhr” deve receber um objeto Javascript que torna possível a
comunicação assíncrona com o servidor, sem a necessidade de recarregar a
página por completo. Para tanto, no código acima, “object” deve ser substituído
por:

a) responseXML.
b) MIME.
c) XMLHttpRequest.
d) DOMParser.
e) setRequestReader.

(CESGRANRIO - 1 – PETROBRÁS – Analista de Sistemas) Ajax não é


meramente uma tecnologia. É uma abordagem moderna para desenvolvimento
de sites iterativos. A abordagem de desenvolvimento tradicional tem
semelhanças e diferenças em relação ao Ajax. Uma característica exclusiva de
Ajax em relação à abordagem tradicional é que:

a) executa as requisições através do protocolo HTTP.


b) usa javascript como linguagem para desenvolver código no lado do cliente.
c) usa (x)html / css para definir o aspecto visual da página.
d) permite recuperação assíncrona de dados usando XMLHttpRequest.
e) representa os objetos no lado cliente com DOM.

(CESGRANRIO - 1 – LIQUIGÁS – Analista de Sistemas) Duas das tecnologias


que compõem o Ajax são:

a) DOM e CSS
b) ASP e XML 16712855225

c) Java e XML
d) Java e CSS
e) JavaScript e ASP

(CESGRANRIO - 2013 – LIQUIGÁS – Analista de Sistemas) Considere as


afirmativas a seguir sobre a tecnologia AJAX.

I – Uma das aplicações mais frequentes da tecnologia AJAX é na atualização


assíncrona do conteúdo de páginas HTML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 92 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

II – Boa parte da funcionalidade da tecnologia AJAX é viabilizada pelo objeto


XMLHttpRequest, que é capaz de transmitir requisições HTTP de modo
assíncrono.

III – A tecnologia AJAX utiliza código Java para a manipulação do conteúdo de


páginas HTML.

Está correto o que se afirma em:

a) I, apenas
b) II, apenas
c) I e II, apenas
d) II e III, apenas
e) I, II e III

(CESGRANRIO - 14 – IBGE – Analista de Sistemas) Com o objetivo de criar


páginas dinâmicas para o desenvolvimento de aplicações web, AJAX é um termo
que descreve um(a):

a) protocolo
b) banco de dados
c) coleção de tecnologias
d) linguagem de programação
e) linguagem de marcação

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 93 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


JAVASCRIPT

1 2 3 4 5 6 7 8 9 10
C C E C C E E C C C
11 12 13 14 15 16 17 18 19 20
E

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


JAVASCRIPT

1 2 3 4 5 6 7 8 9 10
B C B D E B E D A D
11 12 13 14 15 16 17 18 19 20
E E E B B E B A A A
21 22 23 24 25 26 27 28 29 30
A D E C A B D C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JAVASCRIPT

1 2 3 4 5 6 7 8 9 10
A A A 16712855225

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JQUERY
1 2 3 4 5 6 7 8 9 10
A B E C A

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 94 de 95


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 08

AJAX

1 2 3 4 5 6 7 8 9 10
C E E E X C C C E C
11 12 13 14 15 16 17 18 19 20
C C C E C C E E E E
21 22 23 24 25 26 27 28 29 30
C E E C C E E C C

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


AJAX

1 2 3 4 5 6 7 8 9 10
E A B A E D B D

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


AJAX

1 2 3 4 5 6 7 8 9 10
B C E C D A C C

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 95 de 95


Aula 09

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

AULA 09

SUMÁRIO PÁGINA
Apresentação 01
- DHTML 02
- XHTML (Extensible Hypertext Markup Language) 05
- XML 11
- XML 38
- XML SCHEMA 52
Lista de Exercícios Comentados 69
Gabarito 89

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

DHTML

O DHTML (Dynamic HTML) é uma coleção de tecnologias utilizadas em conjunto


para criar websites animados e interativos ao utilizar uma combinação de
tecnologias, que incluem: uma linguagem de marcação estática (Ex: HTML), uma
linguagem de script client-side (Ex: JavaScript), uma linguagem de definição de
apresentação (Ex: CSS) e o DOM (Document Object Model).

Ele permite que linguagens de script mudem variáveis em uma linguagem de


definição de páginas web, que permite modificar a aparência do conteúdo de
Páginas HTML estáticas. DHTML torna possível criar páginas web que superam todas
as limitações do HTML englobando muitas técnicas que podem ser realizadas com
uma infinidade de linguagens de programação e programas distintos.

Ele permite dinamizar tudo o que se encontra na página como textos, imagens,
estilos de página, cor das letras, posição de elemento, etc. Em suma, ele é um
conjunto de ingredientes que proporcionam um maior controle sobre a
apresentação do conteúdo de páginas da Web, além de possibilitar a inclusão de
componentes multimídia, como animações, sem a necessidade de plug-ins.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(CESPE - – MPE/RS – Analista de Sistemas) Para produzir websites


"animados", com recursos de acesso dinâmico, a linguagem DHTML é a junção
de tecnologias como:

a) XML, JSP e CSS.


b) XML, JavaScript e CSS.
c) Java, JSP e JavaScript.
d) HTML, JavaScript e folhas de estilo.
e) HTML, XML e folhas de estilo.

Comentários:

DHTML é uma coleção de tecnologias: HTML, JavaScript e Folhas de Estilo (Ex: CSS).

Gabarito: D

(CESPE - 9 – UNIPAMPA – Analista de Sistemas) Dynamic Extensible


HyperText Markup Language (DHTML) é uma linguagem de marcação web e
também uma recomendação do consórcio W3C.

Comentários:
16712855225

Linguagem de marcação? Não, é um conjunto de tecnologias.

Gabarito: E

(CESPE - – SERPRO – Analista de Sistemas) O Javascript expande as


capacidades de uma página HTML e, unido ao CSS, formou o DHTML.

Comentários:

Perfeito, é exatamente isso!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

XHTML (EXTENSIBLE HYPERTEXT MARKUP LANGUAGE)

Galera, vocês já sabem o que é HTML e XML! Agora, então, eu vos pergunto: o que
seria o XHTML?

1. Um HTML com algumas características do XML.


2. Um XML com algumas características do HTML.

Acertou quem respondeu a primeira opção! Vamos entender isso melhor? Galera,
se vocês fuçarem na internet, vão encontrar várias Páginas HTML escritas de forma
(com o perdão da palavra) porca! Como assim, professor? É muito comum códigos
em que se abre uma tag e não se fecha; muitas tags importantes não são utilizadas;
outras tags não são corretamente aninhadas; entre outros.

Por que isso acontece, professor? Porque a Linguagem HTML é muito permissiva –
ela não reclamará e consertará automaticamente1, porém atualmente nós temos
browsers funcionando em diversos lugares: Computador, Tablet, iPad, Smartphone,
iPod, SmarTV, etc – porém isso pode gerar problemas de interpretação. Pensem
comigo, dentre esses dispositivos, alguns são mais poderosos e outros são menos.

Percebam que equipamentos menos poderosos têm mais dificuldades de


interpretar linguagens de marcação, i.e., quando um código está escrito com as tags
abertas/fechadas incorretamente, torna-se muito mais difícil interpretá-lo com os
recursos disponíveis. Logo, é necessária uma padronização para melhorar a
acessibilidade aos mais diversos dispositivos! Entenderam? ;)

O XHTML consegue ser interpretado por qualquer dispositivo, independentemente


16712855225

da plataforma utilizada, pois as marcações possuem sentido semântico para as


máquinas. Rapaziada, hoje em dia, o XHTML é considerado o grande sucessor do
HTML! Apesar de serem extremamente semelhantes, vamos ver o que o HTML
conseguiu absorver do XML:

Em relação à estrutura:

 DOCTYPE é obrigatório;
 O Atributo xmlns no elemento <html> é obrigatória;

1
Cada navegador conserta da sua maneira não uma padronização!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

 Elementos <html>, <head>, <title> e <body> é obrigatória;

Em relação aos elementos:

 Elementos devem estar apropriadamente aninhados;


 Elementos devem sempre ser fechados;
 Elementos devem sempre vir em letra minúscula (é Case-Sensitive);
 Documentos devem ter um único elemento-raiz;

Em relação aos atributos:

 Nomes devem vir em letra minúscula;


 Valores devem vir entre aspas simples/duplas;
 É proibida a minimização de atributos.

Seguindo essas regras (inspiradas no XML), o XHTML garante que uma página web
será exibida exatamente como você desenvolveu, independentemente da
plataforma ou dispositivo. Isso evita o uso de hacks para corrigir problemas de
exibição em determinados navegadores e ainda deixa seu código organizado e fácil
de ler para atualizações futuras.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(FGV - 2010 - FIOCRUZ - Tecnologista em Saúde - TI - Sistemas de Informação


O XHTML é semelhante ao HTML, mas possui algumas diferenças. Nesse sentido,
uma característica do XHTML é:

a) permite a omissão das tags <html>, <head> e <body>.

b) permite o uso de tags com atributos sem aspas e sem atribuição de valor.

c) obriga que todas as tags e atributos sejam grifadas em minúsculo, sendo case
sensitive.

d) elimina a necessidade de que todos os elementos tenham tags iniciais e finais,


como <table> e </table>

e) elimina a tag xml:lang para se fazer presente toda vez que o atributo lang de
HTML é usado, como em xml:lang=”en” lang=”en”.

Comentários:

a) Não, elementos <html>, <head>, <title> e <body> é obrigatória;


b) Não, valores devem vir entre aspas simples/duplas;
c) Sim, elementos devem sempre vir em letra minúscula (é Case-Sensitive);
16712855225

d) Não, elementos devem sempre ser fechados;


e) Não, devem ser usados ambos como se segue:

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

Gabarito: C

(CESPE - - HEMOBRÁS - Web Designer Nos documentos em XHTML,


deve-se utilizar minúsculas para os elementos do HTML, porque a linguagem
XHTML é sensível ao tamanho da letra.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Comentários:

Em relação aos elementos:

 Elementos devem estar apropriadamente aninhados;


 Elementos devem sempre ser fechados;
 Elementos devem sempre vir em letra minúscula (é Case-Sensitive);
 Documentos devem ter um único elemento-raíz;

Gabarito: C

(CESPE - - HEMOBRÁS - Web Designer Diferentemente do HTML4, o


XHTML não precisa ser bem formado, isto é, todos os elementos devem ter suas
tags de fechamento.

Comentários:

Em relação aos elementos:

 Elementos devem estar apropriadamente aninhados;


 Elementos devem sempre ser fechados;
 Elementos devem sempre vir em letra minúscula (é Case-Sensitive);
 Documentos devem ter um único elemento-raíz;

Portanto, pelo contrário: XHTML precisa ser bem formado, diferentemente do


HTML4!

Gabarito: E
16712855225

(CESGRANRIO - 2012 - Petrobras - Analista de Sistemas Júni - Engenharia de


Software Em um documento XHTML bem formado,

a) os elementos devem ser sempre fechados, exceto quando forem elementos


vazios.

b) os valores dos atributos são delimitados por aspas simples.

c) os nomes dos elementos podem ser escritos com letras caixa-alta ou caixa-
baixa.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

d) a existência de um elemento raiz é obrigatória.

e) a declaração DOCTYPE pode, ou não, estar presente.

Comentários:

a) Não, mesmo quando vazios, devem ser fechados;


b) Sim, podem vir entre aspas simples ou duplas;
c) Não, elementos devem sempre vir em caixa-baixa;
d) Sim, deve sempre haver um elemento-raiz;
e) Não, deve sempre estar presente.

Ué, professor! Tem duas questões corretas? Sim, mas a banca considerou correta
apenas a quarta opção. Qual o problema do Item B? Absolutamente nenhum!

Galera, as bancas às vezes pisam na bola! Vejamos um exemplo:

Dado que Diego gosta de Laranja e Maçã, responda:

a) Diego gosta de Laranja – perfeito, ele gosta de Laranja.


b) Diego gosta de Maçã – perfeito, ele gosta de Maçã.
c) Diego gosta só de Laranja – errado, ele também gosta de maçã.
d) Diego gosta só de Maçã – errado, ele também gosta de laranja.
e) Diego gosta só de Laranja e Maça – errado, ele pode gostar de outras coisas.

Portanto, eu discordo da banca!

Gabarito: D
16712855225

(AOCP - 2010 - Colégio Pedro II - Técnico de Tecnologia da Informação Com


relação à estrutura da linguagem XHTML, é indicado que:

a) as tags devem ser escritas em letras maiúsculas.

b) as tags não precisam estar aninhadas.

c) os documentos devem ser salvos obrigatoriamente com a extensão .xhtml

d) o uso de tag de fechamento é obrigatório.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

e) os atributos devem ser escritos em letras minúsculas e os valores dos atributos


devem vir entre aspas simples.

Comentários:

a) Não, letras minúsculas;


b) Não, precisam sim estar aninhadas;
c) Não, não existe essa obrigatoriedade;
d) Sim, de fato é obrigatório;
e) Não, elementos devem vir em letra minúscula e os valores podem vir em aspas
simples ou duplas (quando se diz “deve”, significa que é obrigatório).

Gabarito: D

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

XML

O eXtensible Markup Language (XML) é uma metalinguagem de marcação,


especificada pela W3C, que define um conjunto de regras para codificar
documentos em um formato que seja legível tanto por humanos quanto por
máquinas. Galera, já vi muita gente errando questão de prova por confundir HTML
com XML! Que tal diferenciá-las?

Bem, o propósito principal do primeiro é exibir dados com foco em sua aparência.
Já o segundo busca transportar e armazenar dados, além de ser capaz de
desenvolver e definir outras linguagens2. Portanto – grosso modo – HTML serve
para deixar a página bonita e organizada, e XML serve para transportar e armazenar
dados!

Existe outra diferença extremamente importante! HTML é uma linguagem de


marcação e XML é uma metalinguagem de marcação! Professor, o que quer dizer
marcação? Quer dizer que ela possui tags capazes de marcar início e fim de
instruções, além de definir seus significados. E qual a diferença entre linguagem e
metalinguagem de marcação?

HTML possui tags predefinidas por seus criadores com o objetivo de fazer a
marcação de cada parte do documento. XML não possui tags predefinidas, i.e., você
cria suas próprias tags e o resultado disso é uma nova linguagem de marcação.
Portanto, XML não é uma linguagem em si, mas uma metalinguagem, i.e., uma
linguagem usada para criar outras linguage . Bacana, né?!

Outra característica é que o XML é capaz de prover o intercâmbio de documentos


16712855225

através da web, além de suportar uma grande gama de aplicações, permitindo a


definição de elementos pelo usuário ou aplicação para estruturar o documento.
Curiosidade: XML depende de alguma plataforma? Não, ela é completamente
independente de plataforma – não caiam nessa pegadinha!

Algumas questões dizem que XML é uma evolução, uma melhoria ou um avanço
sobre o HTML! Isso está correto, pessoal? Claro que não! Não é evolução coisa
enhuma, são tecnologias complementares. Outras questões dizem que XML é uma

2
WSDL é um exemplo de linguagem baseada em XML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

linguagem de marcação! Ahh, professor... nessa pegadinha eu não caio – é claro que
está errado; XML é uma metalinguagem de marcação!

Calma aí, pessoal! Vocês não devem brigar com a banca, porque é provável que
vocês perderão! A não ser que o foco da questão seja na dualidade entre linguagem
e metalinguagem, aceitem como uma linguagem, porque a banca não voltará atrás!
Continuando, XML permite busca e processamento de informações de maneira
otimizada, inteligente e simplificada – guardem essa informação!

Vamos definir algumas coisas importantes:

 Elementos: é tudo que se encontra entre a tag inicial e final, incluindo a própria
tag do elemento. Pode conter outros elementos, texto, atributos, etc. Além disso,
pode ser vazio e escrito de duas maneiras diferentes:

 Atributos são informações adicionais sobre um elemento. No exemplo abaixo,


o tipo do arquivo é irrelevante para o dado, mas pode ser importante para o
software que deseja manipular o elemento. Deve vir com aspas ou apóstrofos.

 Namespaces: eventualmente ocorrem conflitos com nomes iguais de elementos


de arquivos diferentes (Ex: XML e HTML). Para tal, utiliza-se um prefixo para
diferenciar os elementos, como mostra a imagem abaixo (h:table ≠ f:table).
16712855225

Ao utilizar um prefixo, um namespace deve ser definido para esse prefixo. Ele é
definido pelo atributo xmlns na tag inicial de um elemento. A declaração do
namespace segue a sintaxe mostrada abaixo (xmlns:prefix=”URI”).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Observem que o atributo xmlns na tag <table> dá aos prefixos h: e f: um namespace


qualificado. Quando um namespace é definido para um elemento, todos os
elementos filhos com o mesmo prefixo são associados àquele namespace. Pode-se
declarar os namespaces nos elementos em que são utilizados (como do exemplo
acima) ou no elemento-raiz do documento (como do exemplo abaixo):

Professor, espera um pouco! Bagunçou tudo na minha cabeça agora! O que é esse
16712855225

site aí? Calma, galera! Isso é um URI (Uniform Resource Identifier), i.e., um
identificador único. É comum a utilização dele para evitar de ter dois identificadores
de namespace com o mesmo nome, no entanto é possível colocar qualquer
identificador – você pode colocar seu CPF por exemplo!

Observem agora no exemplo acima: existem dois namespaces relacionados aos dois
prefixos. Dessa forma, é possível usar o elemento <table> do HTML com o elemento
<table> do XML em um único documento sem dar conflitos! O namespace
referente ao prefixo h: está relacionado aos elementos do HTML e o namespace
referente ao prefixo f: está relacionado aos elementos do XML. Bacana?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

XML apresenta diversas características importantes, tais como: é uma


metalinguagem extremamente extensível; é capaz de separar dados da aparência;
simplifica o compartilhamento de dados; simplifica o transporte de dados; simplifica
asw mudanças de plataforma; torna os dados mais disponíveis; auxilia a criação de
novas linguagens; entre outras vantagens.

O XML não faz nada! Como assim? Ora, ele simplesmente estrutura, armazena e
transporta informações. A imagem acima mostra um exemplo de um recado de
uma pessoa chamada Tove para Jani, armazenada como um XML! O recado é
autodescritivo3: tem um destinatário, um remetente e um corpo, mas não faz nada,
i.e., alguém deve escrever um software para enviá-lo, recebê-lo ou exibi-lo.

A primeira linha contém a Declaração XML! O que é isso, professor? É como um


cabeçalho que apresenta, dentro outras informações, a versão do XML e o tipo de
codificação. A linha seguinte descreve o elemento-raiz do documento (“<note>”):

As quatro linhas seguintes descrevem elementos-filhos do elemento-raiz:


16712855225

Finalmente, a última linha define o fim do elemento-raiz:

Por que o primeiro elemento é chamado elemento-raiz? Ora, porque ele é a raiz de
uma árvore. O elemento-raiz descende até suas folhas em uma hierarquia!
3
Isso significa que suas tags, por si só, fornecem uma ideia do conteúdo do documento.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Professor, o que é um elemento? É tudo que está entre a tag de início e final, incluindo
estas! Professor, não entendi essa parte da árvore! Então vamos ver seu desenho –
o código acima pode ser transformado na árvore abaixo:

Agora vamos mudar um pouco o assunto: diferença entre Documento XML Bem
Formado e Documento XML Válido! Um Documento XML bem formado é aquele
que obedece suas regras de construção! Um documento que não siga
categoricamente essas regras não pode sequer ser chamado de Documento XML.
E que regras são essas? Existem oito regras principais, bastante intuitivas:

Documentos XML devem possuir um único elemento-raiz:

16712855225

ERRADO : POSSUI DUAS RAÍZES

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

CORRETO: POSSUI UMA RAIZ

Todos elementos devem conter uma tag de fechamento:

Em um Documento HTML, é possível ter elementos sem tag de fechamento:

ERRADO : FALTA FECHAR < NOME>

16712855225

CORRETO: TODAS AS TAGS FECHADAS

Professor, espera um pouco! Aquela primeira tag não foi fechada! É verdade, no
entanto considera-se que declaração XML (ou cabeçalho XML) não faz parte do
Documento XML. Captaram minha mensagem? Bacana!

Elementos devem estar corretamente aninhados:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

ERRADO : TAGS FECHADAS NA ORDEM INCORRETA

CORRETO: TAGS FECHADAS NA ORDEM CORRETA

Professor, o que você quer dizer exatamente com elementos corretamente


aninhados? Quero dizer que as tags fecham em ordem oposta a ordem em que
foram abertas, i.e., a primeira tag aberta deve ser a última tag fechada.

Atributos devem possuir valor entre aspas simples ou duplas:

Todos os atributos devem possuir valores. Além disso, esses valores devem vir entre
aspas simples ou duplas.

16712855225

ERRADO : ATRIBUTO <MERCOSUL > NÃO POSSUI VALOR

CORRETO : ATRIBUTO <MERCOSUL > POSSUI VALOR E ENTRE ASPAS

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Nomes de tags e atributos são Case-Sensitive:

ERRADO : <NOME> É DIFERENTE DE <NOME>

CORRETO: <NOME> É IGUAL A <NOME>

Caracteres especiais

Alguns caracteres possuem significado especial em XML. Por exemplo, o caractere


“<” dentro de um elemento irá gerar um erro, porque o parser da linguagem
interpretará o caractere como o início de um novo elemento. Para evitar esse erro,
deve-se substituir o caractere por uma referência de entidade, como mostram as
imagens abaixo:

16712855225

ERRADO : CONTÉM ELEMENTO &

CORRETO: CONTÉM O ELEMENTO &AMP;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Atributos não podem se repetir dentro de um elemento:

Dentro de um mesmo elemento, não é permitido inserir dois elementos com o


mesmo nome. Simples, não?

ERRADO : ATRIBUTOS COM O MESMO NOME

CORRETO: ATRIBUTOS COM NOMES DIFERENTES

Atributos devem seguir regras de nomenclatura:

Nomes de tags não podem conter espaços em branco nem os caracteres


16712855225

!"#$%&'()*+,/;<=>?@[\]^`{|}~. Além disso, não podem começar com um número,


ponto ou hífen.

ERRADO : ATRIBUTO COMEÇA COM NÚMERO

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

CORRETO: ATRIBUTO COM NOMENCLATURA PERFEITA

Galera, nem todo Documento XML bem formado é válido! Isso ocorre porque, para
que ele seja válido, ele deve ser consistente com seu esquema. Como é, professor?
Pois é, um esquema é um modelo que descreve como devem ser os elementos,
atributos, dados, etc. Um Documento XML é validado a partir do momento que ele
obedece às regras de seu esquema.

Vamos abstrair um pouco? Imaginem o seguinte: eu quero construir um carro!


Portanto, para que seja um carro bem formado, é preciso que tenha quatro rodas,
um único volante, um sistema elétrico e hidráulico, entre outras regras ou
características! Qualquer veículo que contenha essas características (entre outras)
será considerado um carro bem formado.

Mas eu não quero qualquer carro... eu


quero uma Ferrari Califórnia! Logo,
para que esse carro seja validado
como uma Ferrari Califórnia, é preciso
que tenha um motor 3.9L de 560 cv,
torque de 77kgfm, 8 cilindros,
suspensão esportiva, design como o
da imagem ao lado! Qualquer veículo
que contenha essas características,
que seja um carro bem formado, será considerado um carro válido.
16712855225

Ora, percebam uma coisa importante: nem todo carro é uma Ferrari Califórnia, no
entanto toda Ferrari Califórnia é um carro. Colocando de outra maneira: nem todo
Documento XML bem formado é válido, todavia todo Documento XML válido é
necessariamente bem formado! Legal, não?! Agora vamos falar um pouco mais
sobre esse tal de esquema!

Antes de tudo: é obrigatória a utilização desse esquema? Não! Em geral, quando se


trabalha com documentos pequenos ou se deseja apenas realizar alguns testes, criar
esquemas pode ser uma perda de tempo. Caso contrário, ele serve para facilitar a

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

vida do desenvolvedor, ajuda a padronizar documentos para diversos usuários,


auxilia o compartilhamento, e fornece uma boa referência para outros.

Existem dois tipos principais de Arquivos de Definição: DTD e XSD! Um Documento


XML válido é um Documento XML bem-formado, que também segue as regras de
um DTD (Document Type Definition)! Arquivos de Definição são obrigatórios? Não!
São declarações opcionais que informam quais tags são válidas no Documento XML
e como elas devem ser estruturadas. Podemos ver um exemplo abaixo:

Documento XML acima apresenta – em vermelho – uma Declaração DOCTYPE.


O que é isso, professor? Cara, essa declaração é uma referência a um Arquivo DTD
externo. O conteúdo do Arquivo DTD é apresentado abaixo:

O propósito de um Arquivo DTD é definir uma estrutura de um Documento XML.


Ele define a estrutura com uma lista de elementos legais. A interpretação do Arquivo
DTD ocorre da seguinte maneira:
16712855225

 !DOCTYPE note define que note é o elemento-raiz


 !ELEMENT note define que note contém quatro elementos
 !ELEMENT to define que to é do tipo #PCDATA
 !ELEMENT from define que from é do tipo #PCDATA
 !ELEMENT heading define que heading é do tipo #PCDATA
 !ELEMENT body define que body é do tipo #PCDATA

Pessoal! O DTD é mais antigo, já está em desuso há bastante tempo e é provável


que nem caia em prova. Já o XSD (XML Schema Document):

 suporta a criação de namespaces;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

 suporta a definição de novos tipos;


 suporta a definição de restrições;
 suporta a conversão de dados;
 permite manipular schemas com DOM;
 permite utilizar o parser do XML;
 permite utilizar o editor XML;
 é escrito em XML (não precisa aprender outra linguagem);
 é bastante extensível por adições;

 <xs:element name=”note”> define um elemento chamado “note”;


 <xs:complexType> “note” é um elemento do tipo complexo;
 <xs:sequence> o tipo complexo é uma sequência de elementos;
 <xs:element name=”to” type=”xs:string”> o elemento é uma string;
 <xs:element name=”from” type=”xs:string”> o elemento é uma string;
 <xs:element name=”heading” type=”xs:string”> o elemento é uma string;
 <xs:element name=”body” type=”xs:string”> o elemento é uma string;

Por fim, vamos falar sobre o Document Object Model (DOM). O que é isso, professor?
É a especificação de uma interface independente de linguagem de programação e
plataforma que permite acessar e alterar dinamicamente a estrutura, conteúdo e
estilo de documentos eletrônicos, permitindo que ele seja mais tarde processado e
os resultados desse processamento, incorporados de volta no próprio documento.
16712855225

O DOM representa como as marcações em HTML, XHTML e XML são organizadas


e lidas pelo navegador que você usa. Uma vez indexadas, estas marcações se
transformam em elementos de uma árvore em que se pode manipular via API – que
é o que se faz quando usamos programas ou scripts para alterar funcionalidades de
uma página: conteúdo, estrutura ou folha de estilo.

Calma, professor! Viajei agora, explica de novo? Vamos lá! Vocês sabem que
linguagens de script (Ex: Javascript) conseguem manipular dinamicamente a
estrutura de uma página. Ela faz isso por meio do DOM – que oferece uma maneira

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

padronizada de se acessar elementos de um documento e manipulá-los


separadamente.

O Javascript por si só não tem capacidade de acessar elementos específicos de um


documento de forma padronizada! E como o DOM permite isso? Por meio de uma
Árvore DOM! Essa árvore é composta por nós que contêm elementos, textos,
atributos, etc. Galera, o grande truque do DOM é que ele permite acessar facilmente
elementos de uma página web. A imagem abaixo apresenta uma Árvore DOM:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(CESPE - 2011 - -ES - Técnico de Informática - Específicos) Na linguagem XML,


o XML Schema é o documento apropriado para a definição de métodos, regras
de validação dos documentos e suas restrições de conteúdo.

Comentários:

Perfeito, é isso mesmo! Ele é utilizado para validar Documentos XML.

Gabarito: C

(CESPE - 2010 - TRT - 21ª Região (RN) - Analista Judiciário - Tecnologia da


Informação) A XSD - XML schema definition permite definir elementos e atributos
que podem aparecer em um documento XML, tal como um DTD (Document
Type Definition).

Comentários:

XML Schema e DTD são linguagens que descrevem a estrutura de um Documento


XML. A gramática (esquema) gerada por essas linguagens especifica, em termos de
metadados, elementos, atributos e os tipos de dados associados a eles. Embora
utilizem sintaxe bastante diferente, ambos têm o mesmo objetivo: definir regras que
determinam a validade de um documento XML.
16712855225

Gabarito: C

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Análise de Sistemas) Usando-se um XML Schema, validam-se os
metadados e os dados de um documento XML.

Comentários:

Perfeito, é isso mesmo! Validam-se a estrutura e os dados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Gabarito: C

(CESPE - 2010 - TRE-B - Analista Judiciário - Análise de Sistemas) Em XML, as


tags definem elementos de dados e o texto fornece o dado real representado
no documento.

Comentários:

Perfeito, é isso mesmo! Definem os elementos e seu conteúdo.

Gabarito: C

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Um


documento XML pode conter definições para o elemento raiz e para os
elementos filhos, podendo também conter elementos vazios.

Comentários:

Perfeito, é isso mesmo! Ele pode conter elementos vazios (Ex: <tag></tag>).

Gabarito: C

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) As marcações


XML não fazem distinção entre letras minúsculas e maiúsculas.

Comentários:

Nomes de tags e atributos são Case-Sensitive:


16712855225

ERRADO: <NOME> É DIFERENTE DE <NOME>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

CORRETO: <NOME> É IGUAL A <NOME>

Na verdade, fazem sim! XML é Case-Sensitive!

Gabarito: E

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Um


documento XML sempre deve ter um elemento principal, também conhecido
como root tag.

Comentários:

Documentos XML devem possuir um único elemento-raiz:

16712855225

ERRADO : POSSUI DUAS RAÍZES

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

CORRETO: POSSUI UMA RAIZ

Perfeito, ele deve ter sempre conter um e somente um elemento raiz.

Gabarito: C

(CESPE - – TST - Analista de Sistemas Em XML (extensible markup


language), a definição dos dados pode utilizar referências a outros tipos de
dados previamente definidos.

Comentários:

Essa é uma questão óbvia! Quando definimos um dado (um novo elemento, por
exemplo), podemos utilizar referências a outros tipos de dados previamente
definidos, como outros elementos no próprio arquivo ou outros dados definidos em
arquivos de definição (Ex: XSD/DTD).

Gabarito: C

(CESPE - 1 – MPU - Analista de Sistemas Todo arquivo XML deve possuir um


16712855225

arquivo DTD correspondente.

Comentários:

Existem dois tipos principais de Arquivos de Definição: DTD e XSD! Um Documento


XML válido é um Documento XML bem-formado, que também segue as regras de
um DTD (Document Type Definition)! Arquivos de Definição são obrigatórios? Não!
São declarações opcionais que informam quais tags são válidas no Documento XML
e como elas devem ser estruturadas. Podemos ver um exemplo abaixo:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Não, arquivos de definição são opcionais!

Gabarito: E

10. (CESPE - – TRT10 - Analista de Sistemas Mediante o esquema XML, são


estabelecidos critérios para o envio de informações, desconsiderando-se a
organização e formato dos dados.

Comentários:

Galera, raciocinem comigo: existe milhares de aplicações de diversas plataformas,


tecnologias, linguagens, distribuídas ou centralizadas enviando e recebendo
informações por XML. É claro que é necessário considerar a organização e o formato
dos dados para evitar ambiguidades, erros de interpretação, etc – para tal, usa-se o
XML Schema.

Gabarit E

11. (CESPE - – TRT10 - Analista de Sistemas O XML torna mais rápido o envio
de dados, embora restrinja os métodos que podem ser utilizados pelo
desenvolvedor na implementação de padrões mais complexos, uma vez que
consiste em uma arquitetura com elementos e marcas rígidas.

Comentários:

Mais rápido em relação ao quê? A questão não ofereceu nenhuma outra informação,
fica difícil de avaliar. Galera, vocês acham que o XML oferece mais rigidez ou
flexibilidade? Você pode criar quantas tags quiser; pode definir esquemas de acordo
com a sua necessidade; pode customizar facilmente as estruturas. E aí?
16712855225

Evidentemente, ele não consiste em uma arquitetura com elementos e marcas


rígidas – pelo contrário, é bastante flexível.

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(FCC - 2012 - TST - Técnico Judiciário - Programação) A linguagem XML:

a) é considerada uma linguagem de marcação que tem uma biblioteca de tags


muito rica e finita, a ponto de atender a todos os segmentos de negócios ligados
a indústria, comércio e serviços.

b) foi concebida para trabalhar com metadados, que descrevem os dados do


documento XML.

c) permite realizar diretamente no código diferentes formatações para exibir os


dados de forma personalizada aos usuários.

d) cria uma DTD - Dados para Transferência de Documentos - que define a


estrutura do documento XML.

e) está na versão 5.0 já que a XML 4.0 estava obsoleta e, gradativamente, sendo
substituída pela WML.

Comentários:

(a) Na verdade, são infinitas; (b) Perfeito, é exatamente isso; (c) Não, permite
formatações sem alterar o código; (d) Não! DTD é Data Type Definition e define a
estrutura do documento XML; (e) Está na Versão 1.0 e não vem sendo substituída
16712855225

pela WML (Wireless Markup Language), que é um formato para dispositivos móveis.

barito: B

(FCC - 2012 - MPE-AP - Analista Ministerial - Tecnologia da Informação Um


documento XML bem formatado é aquele que apresenta uma sintaxe XML
correta. Sobre as regras de sintaxe em documentos XML bem formatados é
correto afirmar:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

a) Os elementos XML não podem ter mais que um atributo e o valor desse
atributo pode estar vazio.

b) Não é necessário que um documento XML tenha um elemento raiz.

c) Os elementos XML não precisam ser fechados por tag, exceto o que define a
versão da XML usada.

d) Tags XML são case sensitive e os valores dos atributos devem aparecer entre
aspas.

e) Elementos XML não precisam ser aninhados corretamente, sendo assim, o


primeiro que abre sempre será o primeiro que fecha.

Comentários:

(a) Pode, sim, ter mais de um atributo; (b) É obrigatório que tenha um elemento
raiz; (c) Precisa, sim, ser fechados por tag; (d) Sim, perfeito! (e) Precisam, sim, ser
aninhados corretamente – primeiro que abre é o último que fecha.

Gabarito: D

(FCC - 2012 - MPE-PE - Técnico Ministerial - Informática Para que um


documento XML seja considerado válido, ele precisa ter um conjunto de
instruções que define a estrutura do documento, ou seja, quais elementos e
atributos são permitidos. Esse conjunto de instruções (que pode ser declarado
dentro de um documento XML ou em um arquivo à parte) é denominado:

a) Extensible Stylesheet Language Transformations.


16712855225

b) Document Type Definition.


c) XML Description Elements and Attributes.
d) Cascading Style Sheets.
e) Standard Description Library.

Comentários:

Trata-se do DTD (Document Type Definition). Opcionalmente, pode ser também o


XML Schema.

Gabarito: B

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(FCC - 2010 - BAHIAGÁS - Analista de Processos Organizacionais - Análise de


Sistemas O elemento raiz é declarado em um arquivo XML pelo elemento:

a) !DOCTYPE
b) !ELEMENT
c) #PCDATA
d) CDATA
e) IDREF

Comentários:

A questão pede o elemento que declara um elemento-raiz. Esse elemento está em


um validador e a questão não falou qual deve ser utilizado: DTD ou XSD.
Presumindo-se que se trata do DTD, podemos afirmar que é o <!DOCTYPE>. Em
geral, quando não se declara nada, o elemento-raiz é declarado por um !ELEMENT,
mas nós podemos declarar o elemento-raiz de um Arquivo XML no <!DOCTYPE>.

Gabarito: A

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web NÃO se trata de uma regra para que um arquivo XML possa ser
considerado bem formatado:

a) Só deve haver um elemento raiz.


b) Todo elemento XML deve ser fechado, exceto o que define a versão do XML
usada.
c) Os elementos XML devem ser aninhados adequadamente seguindo o padrão:
primeiro que abre, último que fecha.
16712855225

d) Os valores de atributos devem aparecer entre aspas.


e) A sintaxe deve ser escrita toda em maiúscula.

Comentários:

Todos os itens tratam de regras para criação de um documento bem formado,


exceto o último: a sintaxe pode ser escrita em maiúscula ou minúscula.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(FCC - 2008 - METRÔ- - Analista Treinee - Análise de Sistemas NÃO é um


dos quatro tipos de declarações em XML:

a) Elementos.
b) Instâncias.
c) Entidades.
d) Notações.
e) Listas de atributos.

Comentários:

Galera, é possível declarar várias coisas em XML. Eu posso declarar elementos,


entidades, notações e listas de atributos, mas instâncias não são um conceito em
XML – não há declaração de instâncias.

Gabarito: B

(FCC - 2007 - TRF - 4ª REGIÃO - Técnico Judiciário - Programação de Sistemas


Define a construção de blocos válidos para um documento XML, bem como a
estrutura desse documento, usando uma lista de elementos válidos,

a) o ASP.
b) a GML.
c) o DTD.
d) a SHTML.
e) a PHP.

Comentários:
16712855225

Trata-se do DTD! PHP e GML são linguagens de programação; SHTML é um Arquivo


HTML com instruções de servidor; ASP é uma estrutura de bibliotecas básicas para
criação de páginas web dinâmicas.

Gabarito: C

(FCC - 5 – TRF/11 – Analista de Sistemas Uma das principais características


do XML é:

a) descrever a aparência e as ações de uma página.


b) usar tags e atributos com objetivos predefinidos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

c) separar a interface de apresentação dos dados estruturados.


d) interpretar possíveis erros de sintaxe das especificações oficiais.
e) ser escrito em arquivo texto destinado à leitura pelas pessoas.

Comentários:

(a) XML não descreve aparência – esse é o HTML; (b) tags não tem objetivos
predefinidos; (c) Perfeito, é isso; (d) Não, isso não é característica do XML; (e) Não,
não é destinado à leitura de pessoas.

Gabarito: C

(FCC - 2007 – TRF/3 – Analista de Sistemas) Um documento XML, composto de


marcas e conteúdos, possui um tipo de marcação que inicia com <!-- e termina
com --> denominado:

a) declarações de tipos de documento.


b) instruções de processamento.
c) referências a entidades.
d) elementos.
e) comentários.

Comentários:

Bastava ver a sintaxe e perceber que são os comentários.

Gabarito: E

10. (FCC - – MPE/RS – Analista de Sistemas) Em XML pode-se definir um


16712855225

atributo, como informação adicional ao elemento, conforme o exemplo abaixo:

a) <funcionario> <sexo> masculino ...


b) <funcionario sexo=masculino> ...
c) <funcionario sexo="masculino"> ...
d) <funcionario> <sexo> "masculino" ...
e) <funcionario <sexo>= "masculino"> ...

Comentários:

Trata-se da terceira opção: <funcionário sexo=”masculino”>.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Gabarito: C

11. (FCC - 2013 – DPE/SP – Analista de Sistemas) Uma das operações mais comuns
realizadas em documentos XML na web é a leitura de dados por meio de scripts
JavaScript e a exibição desses dados na tela do navegador em páginas HTML.
Essa leitura pode ser feita utilizando uma especificação da W3C que define uma
forma padrão para acessar e manipular documentos, visualizando-os como uma
estrutura em forma de árvore onde os elementos, seu texto, e seus atributos são
conhecidos como nós. Além de ler o conteúdo de elementos de um documento
XML essa especificação define como alterar, adicionar ou apagar elementos.

A especificação definida no texto é conhecida pela sigla:

a) DOM.
b) JSON.
c) XSLT.
d) XPath.
e) DTD.

Comentários:

Por fim, vamos falar sobre o Document Object Model (DOM). O que é isso, professor?
É a especificação de uma interface independente de linguagem de programação e
plataforma que permite acessar e alterar dinamicamente a estrutura, conteúdo e
estilo de documentos eletrônicos, permitindo que ele seja mais tarde processado e os
resultados desse processamento, incorporados de volta no próprio documento.

O Javascript por si só não tem capacidade de acessar elementos específicos de um


16712855225

documento de forma padronizada! E como o DOM permite isso? Por meio de uma
Árvore DOM! Essa árvore é composta por nós que contêm elementos, textos
atributos, etc. Galera, o grande truque do DOM é que ele permite acessar facilmente
elementos de uma página web. A imagem abaixo apresenta uma Árvore DOM: (...)

Evidentemente, trata-se do DOM!

Gabarito: A

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(VUNESP - 2011 – TJM/SP - Analista de Sistemas) Considere as afirmações sobre


a formatação de um documento XML.

I. As tags XML são case sensitive.


II. Documentos XML devem conter um elemento-raiz.
III. Atributos de valor devem estar entre aspas.

Sobre as afirmações, está correto o contido em

a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.

Comentários:

I.

Nomes de tags e atributos são Case-Sensitive:

16712855225

ERRADO: <NOME> É DIFERENTE DE <NOME>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

CORRETO: <NOME> É IGUAL A <NOME>

II.

Documentos XML devem possuir um único elemento-raiz:

ERRADO : POSSUI DUAS RAÍZES

16712855225

CORRETO: POSSUI UMA RAIZ


III.

Atributos devem possuir valor entre aspas simples ou duplas:

Todos os atributos devem possuir valores. Além disso, esses valores devem vir entre
aspas simples ou duplas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

ERRADO : ATRIBUTO <MERCOSUL > NÃO POSSUI VALOR

CORRETO : ATRIBUTO <MERCOSUL > POSSUI VALOR E ENTRE ASPAS

Perfeito, todas são verdadeiras.

Gabarito: E

(ESAF - – STN - Analista de Sistemas Assinale a opção correta relativa a


XML.

a) É uma linguagem de metamodificação.


b) Especifica um sistema de avaliação de programas por semânticas de acesso.
c) É uma linguagem de metatransformação.
d) É uma sintaxe e uma estrutura.
e) Especifica uma sintaxe e uma semântica.

Comentários: 16712855225

(a) Não existe esse conceito; (b) Einh? Não faz sentido algum! (c) Não existe esse
conceito; (d) Perfeito, trata-se de uma sintaxe e uma estrutura; (e) Não, ela não lida
com a semântica.

Gabarito: D

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

XSLT

Galera, XSL (eXtensible Stylesheet Language) é uma linguagem de folha de estilo


para Documentos XML. Calma, professor! O que é uma folha de estilo? Resumindo,
trata-se de padrão que define a apresentação de um documento! Imaginem o
seguinte: você tem que escrever a sua dissertação de graduação da faculdade.
Existem duas abordagens para escrevê-la!

Você pode ir escrevendo o conteúdo e já ir mexendo no layout, i.e., a cada


parágrafo, você modifica o tamanho da letra, modifica a cor, define um
espaçamento, coloca uma figura, modifica sua posição, e assim por diante. Outra
maneira, é construir uma folha de estilo já com todas essas informações de layout
(fonte, tamanho, cor, etc) e depois somente aplicar ao texto de sua monografia.

Vocês percebem a diferença? Se eu quiser fazer depois a minha dissertação de


mestrado, basta eu aplicar essa mesma folha de estilo! Se eu utilizasse a outra
abordagem, eu teria que fazer novamente a mesma configuração da apresentação,
layout, etc. Portanto, as folhas de estilo existem para tornar a apresentação
independente do conteúdo e facilitar nossa vida. Vamos ver um exemplo:

Código XML: apenas com conteúdo (catalogocd.xml)


<?xml version="1.0" encoding="UTF-
<?xml-stylesheet type= text xsl href= catalogocd xsl ?>

<catalogo>
<cd>
<titulo> Sgt. Peppers </titulo>
<artista> The Beatles </artista>
</cd>
<cd>
<titulo> Ride the Lightning </titulo>
16712855225

<artista> Metallica </artista>


</cd>
</catalogo>

Código XSL: apenas com apresentação (catalogocd.xsl)


<?xml version="1.0" encoding="ISO-8859-

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>Minha Coleção de CD</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Titulo</th>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09
<th style="text-align:left">Artista</th>
</tr>
<xsl:for-each select="catalogo/cd">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="artista"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Resultado Final: aplicação do XSL no XML!

XSL é uma linguagem de folha de estilo para Documentos XML (assim como o CSS
é uma linguagem de folha de estilo para Documentos HTML). Ela se divide em XSLT
(Transformação XML), XPath (Navegação XML) e XSL-FO (Formatação XML). Agora
voltando para nosso papo principal... o que seria o eXtensible Stylesheet Language
for Transformation (XSLT)?

Trata-se de uma linguagem para transformação de Documentos XML em outros


formatos reconhecidos por um navegador web (XML, XHTML, HTML e outros). Em
geral, ele faz isso ao transformar cada Elemento XML em Elemento (X)HTML. É
possível adicionar ou remover elementos e atributos de/para um arquivo de saída,
16712855225

ou mesmo reorganizar elementos, executar testes e muito mais.

Galera, vocês sabem que Documentos XML podem ser representados como uma
árvore. Dessa forma, podemos dizer que o XSLT transforma uma Árvore-Fonte XML
em uma Árvore-Resultado XML. Ademais, é importante ressaltar que ela utiliza o
XPath para encontrar informações em um Documento XML. E como se busca
informações nessa árvore? Por meio do XPath!

XSLT é suportado por diversos navegadores, portanto fiquem tranquilos. Professor,


como eu faço para declarar uma folha de estilo? Podemos fazer de duas maneiras:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Utilizando <xsl:stylesheet> - raiz do Documento XML;

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Ou utilizando <xsl:transform> - raiz do Documento XML;

<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Observem que o atributo XMLNS possui um prefixo chamado XSL, seguida de uma
URI. Em outras palavras, aponta para um namespace que contém um XML Schema
que diz se o documento é válido e bem formado. Percebam que, para acessar os
elementos, atributos, entre outros devemos declarar o namespace do XSLT no início
do documento.

Galera, nós também podemos declarar um template através do elemento


<xsl:template – um template é um conjunto de uma ou mais regras aplicadas ao
Documento XML. Esse elemento possui um atributo chamado MATCH, que é
utilizado para associar um template com um elemento XML ou com o documento
XML inteiro. Lembram do exemplo lá de cima? O que significa essa barra?

<xsl:template match="/">

Vocês se lembram que eu disse que se utiliza o XPath para navegar pelo Documento
XML? Pois é, ele trata o documento como uma árvore cheia de nós, como mostra a
imagem abaixo. Se o código diz que é a partir do “/”, isso significa que se trata do
documento inteiro. Observem também que o código está transformando um
Documento XML em um Documento HTML.
16712855225

O Elemento <xsl:for-each> seleciona elementos XML de um conjunto de nós. O


atributo SELECT seleciona o nó por meio do XPath. No nosso caso, ele manda
selecionar “catalogo/cd/artista” e “catalogo/cd/titulo” e monta uma tabela mostrada
ao final! É tranquilo de entender, concordam? Por fim, o elemento <xsl:value-of>
extrai o valor de um elemento e adicioná-lo à saída da transformação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Galera, como fazer o browser aplicar automaticamente uma folha de estilo ao XML?
Adiciona-se o comando abaixo para linkar o Arquivo XML ao Arquivo XSL e realizar
a transformação no navegador especificado:

<?xml-stylesheet type= text xsl href= catalogocd xsl ?>

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(CESGRANRIO - 2010 – PETROBRÁS – Analista de Sistemas – B) No contexto de


linguagens de marcação, transformação e apresentação, tem-se que uma
transformação expressa em XSLT descreve regras para transformar uma árvore
fonte em uma árvore resultado.

Comentários:

Galera, vocês sabem que Documentos XML podem ser representados como uma
árvore. Dessa forma, podemos dizer que o XSLT transforma uma Árvore-Fonte XML
em uma Árvore-Resultado XML. Ademais, é importante ressaltar que ela utiliza o
XPath para encontrar informações em um Documento XML. E como se busca
informações nessa árvore? Por meio do XPath!

Conforme discutido em aula.

Gabarito: C

(CESGRANRIO - 2012 – PETROBRÁS – Analista de Sistemas) SOA e Web Services


utilizam interfaces de serviço para definir o que será solicitado e o que deve ser
retornado como resultado do processamento do serviço. No entanto, problemas
surgem quando a SOA e os consumidores de Web Services se baseiam em
estruturas de dados que possuem certas discrepâncias. Qual a tecnologia usada
16712855225

para resolver esse tipo de problema?

a) DTD
b) XSLT
c) XQuery
d) XLink
e) XSL-FO

Comentários:

Questão para pensar:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Que tecnologia é responsável por resolver o problema de discrepância na troca de


dados entre consumidores de Web Services? Que tecnologia pode transformar um
arquivo em outro para resolver o problema? XSLT!

Gabarito: B

(CESPE - – TRE/MA – Analista de Sistemas) Considerando o trecho de


código acima apresentado, assinale a opção correta.

a) O código, escrito em XSLT, necessita de um arquivo CSS que contenha, no


mínimo, um javascript que modifique a tabela com as tags titulo e atorprincipal
16712855225

para gerar uma tabela de saída informando o conteúdo das tags processadas.

b) Para funcionar corretamente, esse código, escrito em XML, necessita de um


arquivo XSTL que contenha, no mínimo, as tags filmes e dados. Por sua vez, na
tag de dados, devem existir tags de titulo e atorprincipal em CSS para gerar uma
tabela de saída informando o conteúdo das tags processadas.

c) Para funcionar corretamente, esse código, escrito em HTML, necessita de um


arquivo XML que contenha, no mínimo, as tags XSLT filmes e dados. Por sua vez,
na tag de dados, devem existir tags de titulo e atorprincipal em CSS para gerar
uma tabela de saída informando o conteúdo das tags processadas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

d) Para funcionar corretamente, esse código, escrito em XSLT, necessita de um


arquivo XML que contenha, no mínimo, as tags XML filmes e dados. Por sua vez,
na tag de dados, devem existir tags de titulo e atorprincipal para gerar uma
tabela de saída informando o conteúdo das tags processadas.

e) O código, escrito em XSLT/javascript, necessita, para funcionar corretamente,


de um arquivo HTML que contenha, no mínimo, as linhas filmes e dados. Por sua
vez, na linha de dados, devem existir variáveis com o nome titulo e atorprincipal
para gerar uma tabela de saída informando o conteúdo das tags processadas.

Comentários:

(a) Não, ele não necessita de arquivo CSS algum, nem comando Javascript; (b) Não,
nada de CSS; (c) Não, escrito em XML ou XSLT; as tags XML filmes e dados; e nada
de CSS; (d) Sim, agora está correto; (e) Não, escrito em XSLT ou XML; nada de HTML;
nada de variáveis, são tags.

Gabarito: D

(CESPE - 2010 – INMETRO – Analista de Sistemas – C) A XSLT permite transformar


um documento XML em HTML, texto simples ou qualquer outro documento
embasado em texto.

Comentários:

Perfeita definição de XSLT!

16712855225

Gabarito: C

(CESPE - 2010 – INMETRO – Analista de Sistemas – D O código abaixo descreve


corretamente uma aplicação em XSLT.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Não, falta a declaração da Folha de estilos e seu namespace.

Gabarito: E

(CESPE - 2010 – MPU – Analista de Sistemas) Um arquivo XSLT (Extensible


Stylesheet Language Transformation) permite transformar os dados de um
arquivo XML. A maneira correta de se referir a um arquivo de estilo denominado
mpuestilo.xml em um arquivo XML é mostrada a seguir.

<stylesheet type="text/xsl" href="mpuestilo.xsl">

Comentários:

Não, seria assim:

<?xml-stylesheet type= text xsl href= mpuestilo xsl ?>

Gabarito: E

(CESPE - 2010 – TRE/BA – Analista de Sistemas) O documento XSLT é necessário


para a definição da estrutura de um documento XML.

Comentários:

Não, quem define essa estrutura é o XML Schema.

Gabarito: E
16712855225

(CESPE - 2010 – TRE/ – Analista de Sistemas) A respeito de XSLT (eXtensible


Stylesheet Language Transformation), assinale a opção correta.

a) Uma transformação na linguagem XSLT é expressa na forma de uma folha de


estilo, cuja sintaxe utiliza XML.

b) XSLT é uma linguagem para transformar somente documentos XHTML em


documentos HTML.

c) A transformação XSLT deve respeitar a estrutura da árvore de origem, ou seja,


a árvore de destino não pode ter uma estrutura diferente da árvore de origem.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

d) Uma transformação expressa em XSLT descreve regras para transformar uma


ou mais árvores de origem em uma e somente uma árvore de destino.

e) O seguinte trecho é correto.

Comentários:

(a) Sim, é exatamente isso; (b) Não, para transformar XML em outros documentos
baseados em texto; (c) Não, a árvore de destino pode ser diferente; (d) Não, é uma
relação N:1, i.e., uma ou mais árvores de origem em uma única árvore de destino;
(e) Não! Não existe <xsl:template for-each=”/”, mas sim <xsl:template match=”/”.
Além disso, está errado <xsl:match select...>, seria <xsl:for-each select...> - enfim,
16712855225

não faz sentido algum.

Gabarito: A

(CESPE - 2011 – MEC – Analista de Sistemas) Referenciada na e-ping, a XSLT é


uma linguagem que transforma documentos XML em outros documentos XML,
o que permite o intercâmbio de informações e a interoperabilidade entre
sistemas.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Perfeito, nada a acrescentar.

Gabarito: C

10. (CESPE - 2011 – TJ/ES – Analista de Sistemas) XSLT é um subconjunto do XML


Schema que permite transformar documentos XML em outros formatos como
PDF, HTML ou mesmo outro XML. Para tanto, o XSLT define, entre outros
aspectos, a forma como os documentos XML são acessados.

Comentários:

Na verdade, é um subconjunto do XSL. Ademais, a forma de acesso é dada pelo


XPath; o XSLT trata da transformação.

Gabarito: E

11. (CESPE - 2012 – TJ/RO – Analista de Sistemas – B) <?xml> é exemplo de tag do


tipo root, necessária para identificar o documento como XSL na linguagem XSLT
2.0.

Comentários:

Não, o elemento raiz seria assim:

Utilizando <xsl:stylesheet> - raiz do Documento XML;

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

16712855225

Ou utilizando <xsl:transform> - raiz do Documento XML;

<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Gabarito: E

12. (CESPE - 2012 – TJ/RO – Analista de Sistemas – C) Na linguagem XSLT 2.0, o


elemento <xsl:value-of> pode ser utilizado para extrair o valor de um elemento
XML e adicioná-lo ao documento de saída, resultado da transformação.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

O Elemento <xsl:for-each> seleciona elementos XML de um conjunto de nós. O


atributo SELECT seleciona o nó por meio do XPath. No nosso caso, ele manda
selecionar “catalogo/cd/artista” e “catalogo/cd/titulo” e monta uma tabela mostrada
ao final! É tranquilo de entender, concordam? Por fim, o elemento <xsl:value-of>
extrai o valor de um elemento e adicioná-lo à saída da transformação.

Conforme visto em aula, está perfeito!

Gabarito: C

13. (CESPE - 2013 – TCE/ES – Analista de Sistemas – B) No processo de


transformação realizado pelo XSLT, os templates de regras devem ser
construídos de forma a não existirem conflitos de regras, visto que esses conflitos
não podem ser automaticamente resolvidos.

Comentários:

Podem, sim – por meio de namespaces.

Gabarito: E

14. (FCC - – TRT/MS – Analista de Sistemas) A linguagem ...... especifica a


utilização de um documento ......, utilizando a linguagem ...... para descrever
como o documento será transformado em outro documento ...... .

As lacunas acima serão corretamente preenchidas por, respectivamente,

a) XML, XML, XSLT e XSL. 16712855225

b) XML, XML, XSL e XSLT.


c) XSL, XML, XSLT e XML.
d) XSLT, XML, XSL e XML.
e) XSL, XML, XSLT e XSL.

Comentários:

A linguagem XSL especifica a utilização de um documento XML, utilizando a


linguagem XSLT para descrever como o documento será transformado em outro
documento XML.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Gabarito: C

15. (FGV - – MEC – Analista de Sistemas) A XSLT (eXtensible Stylesheet


Language: Transformations) é uma linguagem usada para transformar a
estrutura de um documento XML. Essa transformação é realizada por um
processador XSLT. O papel principal de um processador XSLT é aplicar uma folha
de estilo XSLT em um documento fonte XML e produzir um documento
resultante.

Assinale a alternativa que não apresente um processador XSLT:

a) Xalan.
b) Saxon.
c) XTLTX.
d) MSXML3.
e) Sablotron.

Comentários:

Não coloquei na teoria porque é um tema muito específico e quase não cai em
prova. Os processadores XSLT mais famosos são: Xalan, Saxon, MSXML e Sablotron.
Eles são os responsáveis de fato por processar os arquivos de origem no arquivo de
destino.

Gabarito: C

16. (FGV - 2013 – AL/MA – Analista de Sistemas) Com relação as folhas de estilo
XSLT, analise as afirmativas a seguir.
16712855225

I. Namespaces podem ser usados em folhas de estilo XSLT.


II. Folhas de estilo XSLT devem ser documentos XML bem formados.
III. Somente documentos XML podem ser gerados como saída do
processamento de folhas de estilo XSLT.

Assinale:

a) se somente a afirmativa I estive correta.


b) se somente a afirmativa II estiver correta.
c) se somente a afirmativa III estiver correta.
d) se somente as afirmativas I e II estiverem corretas

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

e) se todas as afirmativas estiverem corretas.

Comentários:

(I) Sim, claro que podem; (II) Sim, eles devem ser bem formados; (III) Não, qualquer
documento baseado em texto.

Gabarito: D

17. (CESPE - – ABIN – Analista de Sistemas) As folhas de estilo escritas em


linguagem XSL (extensible stylesheet language) permitem definir várias
formatações alternativas para documentos escritos em linguagem XML
(extensible mark-up language).

Comentários:

XSL é uma linguagem de folha de estilo para Documentos XML (assim como o CSS é
uma linguagem de folha de estilo para Documentos HTML). Ela se divide em XSLT
(Transformação XML), XPath (Navegação XML) e XSL-FO (Formatação XML). Agora
voltando para nosso papo principal... o que seria o eXtensible Stylesheet Language
for Transformation (XSLT)?

Trata-se de uma linguagem para transformação de Documentos XML em outros


formatos reconhecidos por um navegador web (XML, XHTML, HTML e outros). Em
geral, ele faz isso ao transformar cada Elemento XML em Elemento (X)HTML. É
possível adicionar ou remover elementos e atributos de/para um arquivo de saída, ou
mesmo reorganizar elementos, executar testes e muito mais.

Perfeito, conforme visto em aula. 16712855225

Gabarito: C

18. CC - 2011 – TCE/PR – Analista de Sistemas) Em padrões XML, style sheets são
ferramentas utilizadas nos padrões:

a) XSLT e XBRL.
b) WSDL e SOAP.
c) XSLT e SOAP.
d) XBRL e WSDL.
e) XSLT e WSDL.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Comentários:

Galera, XSLT é a resposta óbvia, portanto eliminamos os itens B e D. Vocês sabem o


que é XBRL? Trata-se de Extensible Business Reporting Language! Professor, você
não falou disso em aula! Galera, é a única vez que vi isso em prova – preferi falar
disso só nessa questão. XBRL é um padrão baseado em XML para definir a
informação financeira – nós usamos bastante aqui nos sistemas da Secretaria do
Tesouro Nacional (STN). Logo, se é XML, pode receber definições de estilo.

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

XML SCHEMA

XML Schema é uma linguagem recomendada pela W3C cujo surgimento teve o
propósito de ser uma alternativa ao DTD! Antes de continuar, saibam que XML
Schema pode ser também chamado de XML Schema Definition (ou XSD). Assim
como o DTD, o XML Schema é tem o propósito principal de definir a estrutura de
um Documentos XML – validando seus dados e seus metadados. Para tal, ele:

 Define elementos que podem aparecer em um documento;


 Define atributos que podem aparecer em um documento;
 Define quais elementos são elementos-filhos;
 Define a ordem dos elementos-filhos;
 Define a quantidade de elementos-filhos;
 Define se um elemento é vazio ou se pode incluir texto;
 Define tipos de dados para elementos e atributos;
 Define valores padrão e valores fixos para elementos e atributos.

Rapaziada, é senso comum atualmente que XML Schemas irão substituir os DTDs
na grande maioria das aplicações web. Por que, professor? Vejamos:

 XML Schemas são extensíveis a adições futuras;


 XML Schemas são mais ricos e poderosos que DTDs;
 XML Schemas são escritos em XML (mesma sintaxe);
 XML Schemas suportam tipos de dados;
 XML Schemas suportam namespaces (xmlns:xs).

Galera, observem o nosso primeiro ponto! Ele afirma que XML Schemas são
16712855225

extensíveis a adições futuras. O que será que ele quis dizer com isso? Bem, ao utilizar
XML Schema, é possível reutilizar seus schemas em outros schemas; ademais, é
possível criar seus próprios tipos de dados derivados dos tipos padrões; por fim, é
possível referenciar múltiplos schemas em um mesmo documento.

Veja, agora nosso terceiro ponto acima! Uma das grandes vantagens do XML
Schema é que ele é escrito com a mesma sintaxe do XML. Em outras palavras, não
é necessário aprender uma nova linguagem; pode-se usar o mesmo Editor XML e
o mesmo Parser XML; pode-se manipulá-lo utilizando o XML DOM; pode-se
transformá-lo com o XSLT.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Passemos agora para nosso quarto ponto! Por que isso é tão importante? Ora,
porque com o suporte a tipos de dados, é mais fácil descrever o conteúdo dos
documentos; é mais fácil validar a corretude dos dados; é mais fácil trabalhar com
dados de uma base de dados; é mais fácil definir restrições nos dados; é mais fácil
converter dados entre diferentes tipos de dados.

É importante também ressaltar outra coisa: XML Schema assegura a comunicação


entre remetente e destinatár . Quando enviamos um dado, é essencial que ambas
as partes tenham as mesmas expectativas a respeito do conteúdo. O que você quer
dizer, professor? Imaginem que eu digo a um amigo australiano que minha data de
nascimento é 15/10/1980.

Já sabem o que vai acontecer, não é? Ele vai olhar essa data e não vai entender,
porque, na Austrália, lê-se data no formato MM/DD/AAAA e no Brasil lemos no
formato DD/MM/AAAA. Como não existe Mês 15, não fará sentido para ele! Se
estivéssemos falando dentro do contexto do XML Schema, poderíamos definir uma
maneira de representar a data de forma segura para os comunicadores.

Galera, lembre-se que um documento bem formado não é necessariamente válido.


Para que ele seja válido, ele deve ser bem formado e posteriormente ser validado
por um XML Schema ou por um DTD! Já um Documento XML – para ser bem
formado – deve obedecer às regras de sintaxe definidas pela linguagem XML! Logo,
primeiro ele é deve ser bem formado para depois ser validado.

A especificação do XML Schema assume que pelo menos dois documentos são
utilizados: um documento instância (Exemplo: XML) e pelo menos um documento
esquema (Exemplo: XML Schema). O documento instância contém a informação
propriamente dita e o documento esquema descreve a estrutura e o tipo do
documento instância – em geral, o primeiro referencia o segundo.
16712855225

Fazendo uma analogia com orientação a objetos, a distinção entre instância e


esquema é semelhante a distinção entre objeto e classe, em que uma classe
descreve um objeto assim como um esquema descreve um documento instância.
Galera, o elemento raiz de um XML Schema é o <schema>, como é possível ver no
código a seguir (tudo deve vir entre essas duas tags):

?xml version="1.0"?>

<schema>
...
...
</schema>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Como eu disse, o Documento XML possui uma referência a um XML Schema! Isso
é feito por meio do elemento <xmlns>, que informa ao validador que todos os
elementos utilizados no Documento XML são declarados em um namespace
específico. Galera, os tipos de dados nativos mais comuns são: xs:string, xs:decimal,
xs:integer, xs:boolean, xs:date e xs:time.

É importante salientar que o XML Schema é capaz de definir restrições, que são
usadas para representar valores aceitáveis para Elementos e Atributos XML – em
geral, são chamados de Facets (ou Facetas). Vocês se lembram do exemplo da data?
Pois é, por meio de facetas, é possível restringir o mês aos números de 1 a 12. Da
mesma forma é possível restringir o dia aos números 1 a 31.

Em geral, as facetas se dividem em fundamentais e restritivas! As facetas


fundamentais determinam o tipo de dados, em vez de limitações de valores (Ex:
equal, ordered, bounded, cardinality e numeric). As facetas restritivas são aplicadas
opcionalmente a tipos de dados a fim de restringir valores (Ex: length, minLength,
maxLength, pattern, enumeration, whiteSpace, maxInclusive, etc).

Em XML Schema, o modelo de conteúdo de um elemento pode ser especificado a


partir da declaração de um tipo. Um tipo pode ser Simples ou Complexo. Um tipo
simples contém apenas texto, ele não contém nenhum outro elemento ou atributo.
Já um tipo complexo contém outros elementos e/ou atributos, podendo ser
elementos vazios, conter outros elementos, conter somente texto ou conter ambos.

Tipos simples são declarados com simpleType, e tipos complexos com complexType.
A declaração element liga um tipo a um nome de elemento. Elementos podem ser
declarados dentro de um tipo complexo ou abaixo de schema. Neste último caso,
são considerados elementos globais. Um simpleType pode ser um dos tipos básicos
16712855225

definidos em XML Schema, tais como string, integer, date, entre outros.

Um complexType define restrições para o modelo de conteúdo de um determinado


elemento, o que é feito através dos atributos para especificação de cardinalidade
minOccurs e maxOccurs, e dos delimitadores de grupos de elementos sequence, all
e choice. O atributo minOccurs especifica o número mínimo de vezes que um
subelemento pode aparecer, e maxOccurs, o número máximo.

Por fim, gostaria de falar sobre um elemento bem bacana: <notation> – ele é
responsável por descrever o formato de dados não-XML dentro de um Documento
XML. Por fim, o tipo AnyType é o tipo padrão (default) quando nenhum outro tipo

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

é especificado. Ele serve como tipo base do qual todos os tipos simples e complexos
são derivados. Bacana? ;)

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(CESGRANRIO - – PETROBRÁS - Tecnologia da Informação – D Os serviços


SOA se comunicam através de mensagens que podem ser definidas por XML
Schema.

Comentários:

Galera, os serviços SOA se comunicam por meio da linguagem XML. Essa linguagem
pode ser definida por meio de um XML Schema? Claro ;)

Gabarito: C

(CESGRANRIO - – PETROBRÁS - Tecnologia da Informação Uma das


vantagens da linguagem XML Schema em relação à linguagem DTD é que a
primeira apresenta:

a) suporte à validação de documentos XML com elementos multivalorados.


b) suporte à validação de documentos XML que não são bem formados.
c) uso das mesmas regras de sintaxe de documentos XML comuns.
d) integração nativa com as APIs SAX e DOM de Java.
e) flexibilidade de ser definida em um arquivo diferente do documento XML que
valida.
16712855225

Comentários:

(a) Não, ambos suportam validação de Documentos XML com elementos


multivalorados;

(b) Não, nenhum dos dois suporta validação de documentos XML que não estejam
bem formados;

(c) Sim, DTD possui uma sintaxe própria, já o XML Schema usa a mesma sintaxe dos
documentos XML;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(d) Não, XML não está nativamente atrelado ao Java, esse item não faz sentido para
DTD ou XML Schema;

(e) Não, ambos podem ser definidos em arquivos próprios – fora dos Documentos
XML.

Gabarito: C

(CESGRANRIO - 2011 – FINEP - Tecnologia da Informação) Um DTD (Document


Type Definition) é um conjunto de regras usado para definir uma linguagem de
marcação XML particular. Caso um documento XML não seja aderente às regras
definidas em um DTD, ele não será um documento válido em relação a essa
linguagem. Que outra tecnologia XML pode ser usada para definir a estrutura
de um documento XML?

a) XQuery
b) XML Schema
c) XML Document Object Model
d) XPath
e) XSLT

Comentários:

XML Schema é uma linguagem recomendada pela W3C cujo surgimento teve o
propósito de ser uma alternativa ao DTD! Antes de continuar, saibam que XML
Schema pode ser também chamado de XML Schema Definition (ou XSD). Assim como
o DTD, o XML Schema é tem o propósito principal de definir a estrutura de um
Documentos XML – validando seus dados e seus metadados. Para tal, ele:
16712855225

Conforme visto em aula, o XML Schema é uma alternativa ao DTD.

Gabarito: B

(CESGRANRIO - 2011 – FINEP - Tecnologia da Informação) Um documento XML


bem formado (well-formed) segue as restrições de sintaxe definidas pela
especificação XML.

PORQUE

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Um documento XML bem formado deve, necessariamente, estar em


conformidade com uma definição em DTD (Document Type Definition) ou em
XML Schema. Analisando-se as afirmações acima, conclui-se que:

a) as duas afirmações são verdadeiras, e a segunda justifica a primeira.


b) as duas afirmações são verdadeiras, e a segunda não justifica a primeira.
c) a primeira afirmação é verdadeira, e a segunda é falsa.
d) a primeira afirmação é falsa, e a segunda é verdadeira.
e) as duas afirmações são falsas.

Comentários:

Galera, lembre-se que um documento bem formado não é necessariamente válido.


Para que ele seja válido, ele deve ser bem formado e posteriormente ser validado por
um XML Schema ou por um DTD! Já um Documento XML – para ser bem formado
– deve obedecer às regras de sintaxe definidas pela linguagem XML! Logo, primeiro
ele é deve ser bem formado para depois ser validado.

Conforme visto em aula, para ser bem formado, deve obedecer às regras de sintaxe
definidas pela Linguagem XML. A segunda afirmação, refere-se a validade de um
Documento XML. Isso se dá não por meio de regras de sintaxe, mas por meio do
XML Schema ou DTD.

Gabarito: C

(CES - – HEMOBRÁS - Tecnologia da Informação) Acerca de


implementação de arquiteturas orientadas a serviços, é correto afirmar que
tecnologia de XML Schema é condição para o uso de SOAP e http.
16712855225

Comentários:

Galera, XML é condição para uso de SOAP e HTTP? Não, podemos usar o REST! Da
mesma forma, XML Schema não é condição para o uso de SOAP e HTTP.

Gabarito: E

(CESPE - 9 – INMETRO - Tecnologia da Informação) O INMETRO pode


alcançar interoperabilidade de dados com os fabricantes/fornecedores de
produtos, na coleta e publicação de dados, com o uso de XML como formato
de intercâmbio de dados, uma vez que a linguagem permite a incorporação da

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

semântica e a definição de dados por meio de mecanismos de validação como


DTD ou XML Schema.

Comentários:

Galera, lembre-se que um documento bem formado não é necessariamente válido.


Para que ele seja válido, ele deve ser bem formado e posteriormente ser validado por
um XML Schema ou por um DTD! Já um Documento XML – para ser bem formado
– deve obedecer às regras de sintaxe definidas pela linguagem XML! Logo, primeiro
ele é deve ser bem formado para depois ser validado.

Perfeito! Permite a incorporação da semântica e a definição de dados por meio de


mecanismos de validação? Sim, para isso serve o DTD e XML Schema!

Gabarito: C

(CESPE - 2009 – INMETRO - Tecnologia da Informação) Diferentes de XML


Schema, DTDs possibilitam a derivação e a definição de tipos de dados.

Comentários:

Rapaziada, é senso comum atualmente que XML Schemas irão substituir os DTDs
na grande maioria das aplicações web. Por que, professor? Vejamos:

 XML Schemas são extensíveis a adições futuras;


 XML Schemas são mais ricos e poderosos que DTDs;
 XML Schemas são escritos em XML (mesma sintaxe);
 XML Schemas suportam tipos de dados;
 XML Schemas suportam namespaces (xmlns:xs).
16712855225

Na verdade, é justamente o contrário: XML Schema possibilita a derivação e a


definição de tipos de dados – em contraste ao DTD!

Gabarito: E

(CESPE - 2010 – BASA - Tecnologia da Informação) Usando-se um XML Schema,


validam-se os metadados e os dados de um documento XML.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

XML Schema é uma linguagem recomendada pela W3C cujo surgimento teve o
propósito de ser uma alternativa ao DTD! Antes de continuar, saibam que XML
Schema pode ser também chamado de XML Schema Definition (ou XSD). Assim como
o DTD, o XML Schema é tem o propósito principal de definir a estrutura de um
Documentos XML – validando seus dados e seus metadados. Para tal, ele:

Perfeito, é possível validar os metadados (i.e., estrutura) e os dados em si.

Gabarito: C

(CESPE - 2010 – SAD/PE - Tecnologia da Informação – E A linguagem XML


Schema está mais diretamente associada às linguagens do tipo SQL DML,
enquanto a linguagem XQuery associa-se, de forma mais direta, às linguagens
do tipo SQL DDL.

Comentários:

Um pouco de interdisciplinaridade: DDL (Data Definition Language) está mais


associada ao XML Schema, i.e., define estruturas; DML (Data Manipulation
Language) está mais associada ao XQuery, i.e., consulta e manipulação de dados.

Gabarito: E

10. (CESPE - 2010 – TRE/MT - Tecnologia da Informação) A respeito de XML e XML


Schema, assinale a opção correta.

a) No formato xmlns:xs, o XML Schema pode utilizar declaração de escopo de


nomes (namespace).
16712855225

b) O elemento <xml schema> é o elemento raiz de todos os esquemas definidos


em XML Schema.

c) Elementos complexos em XML Schema não podem ser vazios, nem conter só
texto. Devem conter sempre ao menos um outro elemento.

d) Em XML Schema, restrições são utilizadas para definir valores aceitáveis para
atributos e não para elementos.

e) XML Schema oferece suporte a tipos de dados predefinidos, não permitindo


a criação de novos tipos de dados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Comentários:

Rapaziada, é senso comum atualmente que XML Schemas irão substituir os DTDs na
grande maioria das aplicações web. Por que, professor? Vejamos:

 XML Schemas são extensíveis a adições futuras;


 XML Schemas são mais ricos e poderosos que DTDs;
 XML Schemas são escritos em XML (mesma sintaxe);
 XML Schemas suportam tipos de dados;
 XML Schemas suportam namespaces (xmlns:xs).

(a) Correto, XML Schema pode – sim – utilizar namespaces.

Fazendo uma analogia com orientação a objetos, a distinção entre instância e


esquema é semelhante a distinção entre objeto e classe, em que uma classe descreve
um objeto assim como um esquema descreve um documento instância. Galera, o
elemento raiz de um XML Schema é o <schema>, como é possível ver no código a
seguir (tudo deve vir entre essas duas tags):

(b) Errado, é <schema> e, não, <xml schema>;

Em XML Schema, o modelo de conteúdo de um elemento pode ser especificado a


partir da declaração de um tipo. Um tipo pode ser Simples ou Complexo. Um tipo
simples contém apenas texto, ele não contém nenhum outro elemento ou atributo.
Já um tipo complexo contém outros elementos e/ou atributos, podendo ser elementos
vazios, conter outros elementos, conter somente texto ou conter ambos.

(c) Errado, elementos complexos podem – sim – ser vazios ou conter somente texto.
16712855225

É importante salientar que o XML Schema é capaz de definir restrições, que são
usadas para representar valores aceitáveis para Elementos e Atributos XML – em
geral, são chamados de Facets (ou Facetas). Vocês se lembram do exemplo da data?
Pois é, por meio de facetas, é possível restringir o mês aos números de 1 a 12. Da
mesma forma é possível restringir o dia aos números 1 a 31.

(d) Errado, são para ambos.

(e) Errado, permite – sim – a criação de novos tipos de dados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Gabarito: A

11. (CESPE - 2010 – TRT/21 - Tecnologia da Informação) A XSD - XML schema


definition permite definir elementos e atributos que podem aparecer em um
documento XML, tal como um DTD (document type definition).

Comentários:

XML Schema é uma linguagem recomendada pela W3C cujo surgimento teve o
propósito de ser uma alternativa ao DTD! Antes de continuar, saibam que XML
Schema pode ser também chamado de XML Schema Definition (ou XSD). Assim
como o DTD, o XML Schema é tem o propósito principal de definir a estrutura de
um Documentos XML – validando seus dados e seus metadados. Para tal, ele:

 Define elementos que podem aparecer em um documento;


 Define atributos que podem aparecer em um documento;
 Define quais elementos são elementos-filhos;
 Define a ordem dos elementos-filhos;
 Define a quantidade de elementos-filhos;
 Define se um elemento é vazio ou se pode incluir texto;
 Define tipos de dados para elementos e atributos;
 Define valores padrão e valores fixos para elementos e atributos.

Conforme visto em aula, ele define elementos e atributos que podem aparecer em
um Documento XML.

Gabarito: C

12. (CESPE - 2011 – TJ/ES - Tecnologia da Informação) Na linguagem XML, o XML


16712855225

Schema é o documento apropriado para a definição de métodos, regras de


validação dos documentos e suas restrições de conteúdo.

Comentários:

Perfeito! Ele define métodos, regras de validação e restrições de conteúdo. Dessa


forma, é capaz de validar dados e metadados.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

13. (CESPE - 2 – BASA - Tecnologia da Informação) DTD (document type


definition) e XSD (XML schema description) são dois formatos de
interoperabilidade de dados usados no escopo do padrão XML, e, de modo
geral, um documento DTD é semanticamente menos expressivo que seu
equivalente XSD.

Comentários:

XSD é a sigla para XML Schema Definition e, não, Description. Além disso, XML é
um formato de interoperabilidade de dados, DTD e XSD são apenas validadores de
Documentos XML. No entanto, a banca considerou a questão verdadeira – eu
discordo!

Gabarito: C

14. (CESPE - 2013 – CNJ - Tecnologia da Informação) Arquivos XML podem conter
informações para definição de regras de validação de seu conteúdo em um
outro arquivo XML, denominado XSD (XML schema definition).

Comentários:

A especificação do XML Schema assume que pelo menos dois documentos são
utilizados: um documento instância (Exemplo: XML) e pelo menos um documento
esquema (Exemplo: XML Schema). O documento instância contém a informação
propriamente dita e o documento esquema descreve a estrutura e o tipo do
documento instância – em geral, o primeiro referencia o segundo.

Perfeito! O XML Schema contém a definição de regras – essa é fácil! E esse


Documento XSD fica em outro arquivo separado e é referenciado pelo Documento
16712855225

XML.

Gabarito: C

15. (CESPE - 2013 – TRE/MS - Tecnologia da Informação - A) XML schema definition


(XSD) tem como objetivo definir os blocos de construção corretos de um
documento XML, como o DTD (document type definition), em que um esquema
XML pode definir elementos e atributos que podem aparecer em um
documento.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Perfeito! O W3Schools afirma: “The purpose of an XML Schema is to define the legal
building blocks of an XML document, just like a DTD”.

Gabarito: C

16. (CESPE - 2013 – TRT/10 - Tecnologia da Informação) Na sintaxe básica de XML


Schema, os dados definidos em um esquema para estabelecer elementos e
atributos podem ser do tipo complexo, caso usados apenas para definir
elementos, e do tipo simples, caso usados para definir elementos e atributos.

Comentários:

Em XML Schema, o modelo de conteúdo de um elemento pode ser especificado a


partir da declaração de um tipo. Um tipo pode ser Simples ou Complexo. Um tipo
simples contém apenas texto, ele não contém nenhum outro elemento ou atributo.
Já um tipo complexo contém outros elementos e/ou atributos, podendo ser elementos
vazios, conter outros elementos, conter somente texto ou conter ambos.

Conforme vimos, a questão está incorreta! O Tipo Complexo é utilizado para definir
elementos e/ou atributos; já o Tipo Simples contém apenas texto (sem elementos
ou atributos). Sendo assim, discordo do gabarito, que ratifica a questão como
verdadeira.

Gabarito: C

17. (CESPE - 2013 – TRT/10 - Tecnologia da Informação) Mediante o esquema XML,


são estabelecidos critérios para o envio de informações, desconsiderando-se a
organização e formato dos dados. 16712855225

Comentários:

Desconsiderando? Evidente que não! Se ele estabelece critérios para o envio de


informações, como eu posso desconsiderar a organização e o formato dos dados?
Não, não, não...

Gabarito: E

18. (CESPE - 2013 – TRT/10 - Tecnologia da Informação) Uma especificação em XML


Schema é sempre iniciada com tag <schema> e concluída com tag <//schema>.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Todas as declarações de elementos devem ser inseridas entre as duas tags, bem
como a definição de atributos e tipos deve ser inserida no corpo do programa.

Comentários:

Fazendo uma analogia com orientação a objetos, a distinção entre instância e


esquema é semelhante a distinção entre objeto e classe, em que uma classe descreve
um objeto assim como um esquema descreve um documento instância. Galera, o
elemento raiz de um XML Schema é o <schema>, como é possível ver no código a
seguir (tudo deve vir entre essas duas tags):

?xml version="1.0"?>

<schema>
...
...
</schema>

Conforme visto em aula, deve-se iniciar com <schema> e concluir com </schema>.

Gabarito: E

19. (FCC - – TRT/24 - Tecnologia da Informação) A especificação de XML


Schema assume que pelo menos dois documentos são utilizados:

a) Simples e complexo.
b) Global e local.
c) Restrição e extensão.
d) Abstrato e concreto.
e) Instância e esquema.
16712855225

Comentários:

A especificação do XML Schema assume que pelo menos dois documentos são
utilizados: um documento instância (Exemplo: XML) e pelo menos um documento
esquema (Exemplo: XML Schema). O documento instância contém a informação
propriamente dita e o documento esquema descreve a estrutura e o tipo do
documento instância – em geral, o primeiro referencia o segundo.

Conforme visto em aula, trata-se da Instância e do Esquema.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Gabarito: E

(ESAF - – PN/RN - Tecnologia da Informação - D) Quanto à estrutura,


propriedades e sintaxe do XML, é correto afirmar que a XML Schema diferencia
entre facetas fundamentais e facetas restritivas. As restritivas definem as
propriedades básicas dos tipos de dados e as fundamentais não acrescentam
novas propriedades a um tipo de dados.

Comentários:

Em geral, as facetas se dividem em fundamentais e restritivas! As facetas


fundamentais determinam o tipo de dados, em vez de limitações de valores (Ex: equal,
ordered, bounded, cardinality e numeric). As facetas restritivas são aplicadas
opcionalmente a tipos de dados a fim de restringir valores (Ex: length, minLength,
maxLength, pattern, enumeration, whiteSpace, maxInclusive, etc).

As facetas restritivas definem as propriedades básicas dos tipos de dados? Não, essas
são as facetas fundamentais – são propriedades inerentes de determinado tipo de
dados. As facetas fundamentais não acrescentam novas propriedades a um tipo de
dados? Perfeito, apenas se manipulam propriedades já existentes.

Gabarito: E

21. (FCC - 2013 – AL/RN - Tecnologia da Informação) Em XML SCHEMA, o elemento


que descreve o formato de dados que não são XML dentro de um documento
XML é chamado de:

a) complexType.
b) notation. 16712855225

c) extension.
d) field.
e) import.

Comentários:

Por fim, gostaria de falar sobre um elemento bem bacana: <notation> – ele é
responsável por descrever o formato de dados não-XML dentro de um Documento
XML. Por fim, o tipo AnyType é o tipo padrão (default) quando nenhum outro tipo é
especificado. Ele serve como tipo base do qual todos os tipos simples e complexos são
derivados. Bacana? ;)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Conforme visto em aula, trata-se do Elemento <notation>.

Gabarito: B

(FCC - 2013 – AL/MA - Tecnologia da Informação) Dentre as alternativas a seguir,


selecione aquelas que correspondem a especificações elaboradas com a
finalidade de definir regras de validação (esquemas) para documentos XML:

I. XSLT
II. DTD
III. XML Schema

Assinale:

a) se somente a afirmativa I estiver correta.


b) se somente a afirmativa II estiver correta.
c) se somente as afirmativas I e II estiverem corretas.
d) se somente as afirmativas II e III estiverem corretas.
e) se todas as afirmativas estiverem corretas.

Comentários:

XSLT serve para definir regras de validação? Não! DTD e XML Schema (XSD), sim!

Gabarito: D

- 2013 – AL/ - Tecnologia da Informação) Assinale a alternativa que


indica o tipo padrão (default) para um elemento (element) de um XML Schema:
16712855225

a) QName
b) anyType
c) char
d) string
e) token

Comentários:

Por fim, gostaria de falar sobre um elemento bem bacana: <notation> – ele é
responsável por descrever o formato de dados não-XML dentro de um Documento

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

XML. Por fim, o tipo AnyType é o tipo padrão (default) quando nenhum outro tipo é
especificado. Ele serve como tipo base do qual todos os tipos simples e complexos são
derivados. Bacana? ;)

Conforme visto em aula, trata-se do tipo AnyType.

Gabarito: B

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


DHTML

(CESPE - – MPE/RS – Analista de Sistemas) Para produzir websites


"animados", com recursos de acesso dinâmico, a linguagem DHTML é a junção
de tecnologias como:

a) XML, JSP e CSS.


b) XML, JavaScript e CSS.
c) Java, JSP e JavaScript.
d) HTML, JavaScript e folhas de estilo.
e) HTML, XML e folhas de estilo.

(CESPE - 9 – UNIPAMPA – Analista de Sistemas) Dynamic Extensible


HyperText Markup Language (DHTML) é uma linguagem de marcação web e
também uma recomendação do consórcio W3C.

(CESPE - – SERPRO – Analista de Sistemas) O Javascript expande as


capacidades de uma página HTML e, unido ao CSS, formou o DHTML.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


XHTML

(FGV - 2010 - FIOCRUZ - Tecnologista em Saúde - TI - Sistemas de Informação


O XHTML é semelhante ao HTML, mas possui algumas diferenças. Nesse sentido,
uma característica do XHTML é:

a) permite a omissão das tags <html>, <head> e <body>.

b) permite o uso de tags com atributos sem aspas e sem atribuição de valor.

c) obriga que todas as tags e atributos sejam grifadas em minúsculo, sendo case
sensitive.

d) elimina a necessidade de que todos os elementos tenham tags iniciais e finais,


como <table> e </table>

e) elimina a tag xml:lang para se fazer presente toda vez que o atributo lang de
HTML é usado, como em xml:lang=”en” lang=”en”.

(CESPE - - HEMOBRÁS - Web Designer Nos documentos em XHTML,


deve-se utilizar minúsculas para os elementos do HTML, porque a linguagem
XHTML é sensível ao tamanho da letra.

(CESPE - - HEMOBRÁS - Web Designer Diferentemente do HTML4, o


XHTML não precisa ser bem formado, isto é, todos os elementos devem ter suas
tags de fechamento. 16712855225

(CESGRANRIO - 2012 - Petrobras - Analista de Sistemas Júni - Engenharia de


Software Em um documento XHTML bem formado,

a) os elementos devem ser sempre fechados, exceto quando forem elementos


vazios.

b) os valores dos atributos são delimitados por aspas simples.

c) os nomes dos elementos podem ser escritos com letras caixa-alta ou caixa-
baixa.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

d) a existência de um elemento raiz é obrigatória.

e) a declaração DOCTYPE pode, ou não, estar presente.


(AOCP - 2010 - Colégio Pedro II - Técnico de Tecnologia da Informação Com
relação à estrutura da linguagem XHTML, é indicado que:

a) as tags devem ser escritas em letras maiúsculas.

b) as tags não precisam estar aninhadas.

c) os documentos devem ser salvos obrigatoriamente com a extensão .xhtml

d) o uso de tag de fechamento é obrigatório.

e) os atributos devem ser escritos em letras minúsculas e os valores dos atributos


devem vir entre aspas simples.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


XML

(CESPE - 2011 - -ES - Técnico de Informática - Específicos) Na linguagem XML,


o XML Schema é o documento apropriado para a definição de métodos, regras
de validação dos documentos e suas restrições de conteúdo.

(CESPE - 2010 - TRT - 21ª Região (RN) - Analista Judiciário - Tecnologia da


Informação) A XSD - XML schema definition permite definir elementos e atributos
que podem aparecer em um documento XML, tal como um DTD (Document
Type Definition).

(CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da


Informação - Análise de Sistemas) Usando-se um XML Schema, validam-se os
metadados e os dados de um documento XML.

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Em XML, as


tags definem elementos de dados e o texto fornece o dado real representado
no documento.

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Um


documento XML pode conter definições para o elemento raiz e para os
elementos filhos, podendo também conter elementos vazios.

(CESPE - 2010 - TRE- - Analista Judiciário - Análise de Sistemas) As marcações


XML não fazem distinção entre letras minúsculas e maiúsculas.
16712855225

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Um


documento XML sempre deve ter um elemento principal, também conhecido
como root tag.

(CESPE - – TST - Analista de Sistemas Em XML (extensible markup


language), a definição dos dados pode utilizar referências a outros tipos de
dados previamente definidos.

(CESPE - 1 – MPU - Analista de Sistemas Todo arquivo XML deve possuir um


arquivo DTD correspondente.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

10. (CESPE - – TRT10 - Analista de Sistemas Mediante o esquema XML, são


estabelecidos critérios para o envio de informações, desconsiderando-se a
organização e formato dos dados.

11. (CESPE - – TRT10 - Analista de Sistemas O XML torna mais rápido o envio
de dados, embora restrinja os métodos que podem ser utilizados pelo
desenvolvedor na implementação de padrões mais complexos, uma vez que
consiste em uma arquitetura com elementos e marcas rígidas.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


XML

(FCC - 2012 - TST - Técnico Judiciário - Programação) A linguagem XML:

a) é considerada uma linguagem de marcação que tem uma biblioteca de tags


muito rica e finita, a ponto de atender a todos os segmentos de negócios ligados
a indústria, comércio e serviços.

b) foi concebida para trabalhar com metadados, que descrevem os dados do


documento XML.

c) permite realizar diretamente no código diferentes formatações para exibir os


dados de forma personalizada aos usuários.

d) cria uma DTD - Dados para Transferência de Documentos - que define a


estrutura do documento XML.

e) está na versão 5.0 já que a XML 4.0 estava obsoleta e, gradativamente, sendo
substituída pela WML.

(FCC - 2012 - MPE-AP - Analista Ministerial - Tecnologia da Informação Um


documento XML bem formatado é aquele que apresenta uma sintaxe XML
correta. Sobre as regras de sintaxe em documentos XML bem formatados é
correto afirmar:

a) Os elementos XML não podem ter mais que um atributo e o valor desse
16712855225

atributo pode estar vazio.

b) Não é necessário que um documento XML tenha um elemento raiz.

c) Os elementos XML não precisam ser fechados por tag, exceto o que define a
versão da XML usada.

d) Tags XML são case sensitive e os valores dos atributos devem aparecer entre
aspas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

e) Elementos XML não precisam ser aninhados corretamente, sendo assim, o


primeiro que abre sempre será o primeiro que fecha.

(FCC - 2012 - MPE-PE - Técnico Ministerial - Informática Para que um


documento XML seja considerado válido, ele precisa ter um conjunto de
instruções que define a estrutura do documento, ou seja, quais elementos e
atributos são permitidos. Esse conjunto de instruções (que pode ser declarado
dentro de um documento XML ou em um arquivo à parte) é denominado:

a) Extensible Stylesheet Language Transformations.


b) Document Type Definition.
c) XML Description Elements and Attributes.
d) Cascading Style Sheets.
e) Standard Description Library.

(FCC - 2010 - BAHIAGÁS - Analista de Processos Organizacionais - Análise de


Sistemas O elemento raiz é declarado em um arquivo XML pelo elemento:

a) !DOCTYPE
b) !ELEMENT
c) #PCDATA
d) CDATA
e) IDREF

(FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - Suporte


de Web NÃO se trata de uma regra para que um arquivo XML possa ser
considerado bem formatado:

a) Só deve haver um elemento raiz.16712855225

b) Todo elemento XML deve ser fechado, exceto o que define a versão do XML
usada.
c) Os elementos XML devem ser aninhados adequadamente seguindo o padrão:
primeiro que abre, último que fecha.
d) Os valores de atributos devem aparecer entre aspas.
e) A sintaxe deve ser escrita toda em maiúscula.

(FCC - 2008 - METRÔ- - Analista Treinee - Análise de Sistemas NÃO é um


dos quatro tipos de declarações em XML:

a) Elementos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

b) Instâncias.
c) Entidades.
d) Notações.
e) Listas de atributos.

(FCC - 2007 - TRF - 4ª REGIÃO - Técnico Judiciário - Programação de Sistemas


Define a construção de blocos válidos para um documento XML, bem como a
estrutura desse documento, usando uma lista de elementos válidos,

a) o ASP.
b) a GML.
c) o DTD.
d) a SHTML.
e) a PHP.

(FCC - 5 – TRF/11 – Analista de Sistemas Uma das principais características


do XML é:

a) descrever a aparência e as ações de uma página.


b) usar tags e atributos com objetivos predefinidos.
c) separar a interface de apresentação dos dados estruturados.
d) interpretar possíveis erros de sintaxe das especificações oficiais.
e) ser escrito em arquivo texto destinado à leitura pelas pessoas.

(FCC - 2007 – TRF/3 – Analista de Sistemas) Um documento XML, composto de


marcas e conteúdos, possui um tipo de marcação que inicia com <!-- e termina
com --> denominado:

a) declarações de tipos de documento.16712855225

b) instruções de processamento.
c) referências a entidades.
d) elementos.
e) comentários.

10. (FCC - – MPE/RS – Analista de Sistemas) Em XML pode-se definir um


atributo, como informação adicional ao elemento, conforme o exemplo abaixo:

a) <funcionario> <sexo> masculino ...


b) <funcionario sexo=masculino> ...
c) <funcionario sexo="masculino"> ...

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

d) <funcionario> <sexo> "masculino" ...


e) <funcionario <sexo>= "masculino"> ...

11. (FCC - 2013 – DPE/SP – Analista de Sistemas) Uma das operações mais comuns
realizadas em documentos XML na web é a leitura de dados por meio de scripts
JavaScript e a exibição desses dados na tela do navegador em páginas HTML.
Essa leitura pode ser feita utilizando uma especificação da W3C que define uma
forma padrão para acessar e manipular documentos, visualizando-os como uma
estrutura em forma de árvore onde os elementos, seu texto, e seus atributos são
conhecidos como nós. Além de ler o conteúdo de elementos de um documento
XML essa especificação define como alterar, adicionar ou apagar elementos.

A especificação definida no texto é conhecida pela sigla:

a) DOM.
b) JSON.
c) XSLT.
d) XPath.
e) DTD.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


XML

(VUNESP - 2011 – TJM/SP - Analista de Sistemas) Considere as afirmações sobre


a formatação de um documento XML.

I. As tags XML são case sensitive.


II. Documentos XML devem conter um elemento-raiz.
III. Atributos de valor devem estar entre aspas.

Sobre as afirmações, está correto o contido em

a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.

(ESAF - – STN - Analista de Sistemas Assinale a opção correta relativa a


XML.

a) É uma linguagem de metamodificação.


b) Especifica um sistema de avaliação de programas por semânticas de acesso.
c) É uma linguagem de metatransformação.
d) É uma sintaxe e uma estrutura.
e) Especifica uma sintaxe e uma semântica.
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


XSLT

(CESGRANRIO - 2010 – PETROBRÁS – Analista de Sistemas – B) No contexto de


linguagens de marcação, transformação e apresentação, tem-se que uma
transformação expressa em XSLT descreve regras para transformar uma árvore
fonte em uma árvore resultado.

(CESGRANRIO - 2012 – PETROBRÁS – Analista de Sistemas) SOA e Web Services


utilizam interfaces de serviço para definir o que será solicitado e o que deve ser
retornado como resultado do processamento do serviço. No entanto, problemas
surgem quando a SOA e os consumidores de Web Services se baseiam em
estruturas de dados que possuem certas discrepâncias. Qual a tecnologia usada
para resolver esse tipo de problema?

a) DTD
b) XSLT
c) XQuery
d) XLink
e) XSL-FO

(CESPE - – TRE/MA – Analista de Sistemas) Considerando o trecho de


código acima apresentado, assinale a opção correta.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

a) O código, escrito em XSLT, necessita de um arquivo CSS que contenha, no


mínimo, um javascript que modifique a tabela com as tags titulo e atorprincipal para
gerar uma tabela de saída informando o conteúdo das tags processadas.

b) Para funcionar corretamente, esse código, escrito em XML, necessita de um


arquivo XSTL que contenha, no mínimo, as tags filmes e dados. Por sua vez, na tag
de dados, devem existir tags de titulo e atorprincipal em CSS para gerar uma tabela
de saída informando o conteúdo das tags processadas.

c) Para funcionar corretamente, esse código, escrito em HTML, necessita de um


arquivo XML que contenha, no mínimo, as tags XSLT filmes e dados. Por sua vez, na
tag de dados, devem existir tags de titulo e atorprincipal em CSS para gerar uma
tabela de saída informando o conteúdo das tags processadas.

d) Para funcionar corretamente, esse código, escrito em XSLT, necessita de um


arquivo XML que contenha, no mínimo, as tags XML filmes e dados. Por sua vez, na
tag de dados, devem existir tags de titulo e atorprincipal para gerar uma tabela de
saída informando o conteúdo das tags processadas.

e) O código, escrito em XSLT/javascript, necessita, para funcionar corretamente, de


um arquivo HTML que contenha, no mínimo, as linhas filmes e dados. Por sua vez,
na linha de dados, devem existir variáveis com o nome titulo e atorprincipal para
gerar uma tabela de saída informando o conteúdo das tags processadas.

(CESPE - 2010 – INMETRO – Analista de Sistemas – C) A XSLT permite transformar


um documento XML em HTML, texto simples ou qualquer outro documento
embasado em texto.
16712855225

(CESPE - 2010 – INMETRO – Analista de Sistemas – D O código abaixo descreve


corretamente uma aplicação em XSLT.

(CESPE - 2010 – MPU – Analista de Sistemas) Um arquivo XSLT (Extensible


Stylesheet Language Transformation) permite transformar os dados de um

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

arquivo XML. A maneira correta de se referir a um arquivo de estilo denominado


mpuestilo.xml em um arquivo XML é mostrada a seguir.

<stylesheet type="text/xsl" href="mpuestilo.xsl">

(CESPE - 2010 – TRE/BA – Analista de Sistemas) O documento XSLT é necessário


para a definição da estrutura de um documento XML.

(CESPE - 2010 – TRE/ – Analista de Sistemas) A respeito de XSLT (eXtensible


Stylesheet Language Transformation), assinale a opção correta.

a) Uma transformação na linguagem XSLT é expressa na forma de uma folha de


estilo, cuja sintaxe utiliza XML.

b) XSLT é uma linguagem para transformar somente documentos XHTML em


documentos HTML.

c) A transformação XSLT deve respeitar a estrutura da árvore de origem, ou seja,


a árvore de destino não pode ter uma estrutura diferente da árvore de origem.

d) Uma transformação expressa em XSLT descreve regras para transformar uma


ou mais árvores de origem em uma e somente uma árvore de destino.

e) O seguinte trecho é correto.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

(CESPE - 2011 – MEC – Analista de Sistemas) Referenciada na e-ping, a XSLT é


uma linguagem que transforma documentos XML em outros documentos XML,
o que permite o intercâmbio de informações e a interoperabilidade entre
sistemas.

10. (CESPE - 2011 – TJ/ES – Analista de Sistemas) XSLT é um subconjunto do XML


Schema que permite transformar documentos XML em outros formatos como
PDF, HTML ou mesmo outro XML. Para tanto, o XSLT define, entre outros
aspectos, a forma como os documentos XML são acessados.

11. (CESPE - 2012 – TJ/RO – Analista de Sistemas – B) <?xml> é exemplo de tag do


tipo root, necessária para identificar o documento como XSL na linguagem XSLT
2.0.

12. (CESPE - 2012 – TJ/RO – Analista de Sistemas – C) Na linguagem XSLT 2.0, o


elemento <xsl:value-of> pode ser utilizado para extrair o valor de um elemento
XML e adicioná-lo ao documento de saída, resultado da transformação.

13. (CESPE - 2013 – TCE/ES – Analista de Sistemas – B) No processo de


transformação realizado pelo XSLT, os templates de regras devem ser
construídos de forma a não existirem conflitos de regras, visto que esses conflitos
não podem ser automaticamente resolvidos.

14. (FCC - – TRT/MS – Analista de Sistemas) A linguagem ...... especifica a


utilização de um documento ......, utilizando a linguagem ...... para descrever
como o documento será transformado em outro documento ...... .

As lacunas acima serão corretamente preenchidas por, respectivamente,


16712855225

a) XML, XML, XSLT e XSL.


b) XML, XML, XSL e XSLT.
c) XSL, XML, XSLT e XML.
d) XSLT, XML, XSL e XML.
e) XSL, XML, XSLT e XSL.

15. (FGV - – MEC – Analista de Sistemas) A XSLT (eXtensible Stylesheet


Language: Transformations) é uma linguagem usada para transformar a
estrutura de um documento XML. Essa transformação é realizada por um
processador XSLT. O papel principal de um processador XSLT é aplicar uma folha

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

de estilo XSLT em um documento fonte XML e produzir um documento


resultante.

Assinale a alternativa que não apresente um processador XSLT:

a) Xalan.
b) Saxon.
c) XTLTX.
d) MSXML3.
e) Sablotron.

16. (FGV - 2013 – AL/MA – Analista de Sistemas) Com relação as folhas de estilo
XSLT, analise as afirmativas a seguir.

I. Namespaces podem ser usados em folhas de estilo XSLT.


II. Folhas de estilo XSLT devem ser documentos XML bem formados.
III. Somente documentos XML podem ser gerados como saída do
processamento de folhas de estilo XSLT.

Assinale:

a) se somente a afirmativa I estive correta.


b) se somente a afirmativa II estiver correta.
c) se somente a afirmativa III estiver correta.
d) se somente as afirmativas I e II estiverem corretas
e) se todas as afirmativas estiverem corretas.

17. (CESPE - – ABIN – Analista de Sistemas) As folhas de estilo escritas em


linguagem XSL (extensible stylesheet language) permitem definir várias
16712855225

formatações alternativas para documentos escritos em linguagem XML


(extensible mark-up language).

18. CC - 2011 – TCE/PR – Analista de Sistemas) Em padrões XML, style sheets são
ferramentas utilizadas nos padrões:

a) XSLT e XBRL.
b) WSDL e SOAP.
c) XSLT e SOAP.
d) XBRL e WSDL.
e) XSLT e WSDL.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


XML SCHEMA (XSD)

(CESGRANRIO - – PETROBRÁS - Tecnologia da Informação – D Os serviços


SOA se comunicam através de mensagens que podem ser definidas por XML
Schema.

(CESGRANRIO - – PETROBRÁS - Tecnologia da Informação Uma das


vantagens da linguagem XML Schema em relação à linguagem DTD é que a
primeira apresenta:

a) suporte à validação de documentos XML com elementos multivalorados.


b) suporte à validação de documentos XML que não são bem formados.
c) uso das mesmas regras de sintaxe de documentos XML comuns.
d) integração nativa com as APIs SAX e DOM de Java.
e) flexibilidade de ser definida em um arquivo diferente do documento XML que
valida.

(CESGRANRIO - 2011 – FINEP - Tecnologia da Informação) Um DTD (Document


Type Definition) é um conjunto de regras usado para definir uma linguagem de
marcação XML particular. Caso um documento XML não seja aderente às regras
definidas em um DTD, ele não será um documento válido em relação a essa
linguagem. Que outra tecnologia XML pode ser usada para definir a estrutura
de um documento XML?

a) XQuery
b) XML Schema 16712855225

c) XML Document Object Model


d) XPath
e) XSLT

(CESGRANRIO - 2011 – FINEP - Tecnologia da Informação) Um documento XML


bem formado (well-formed) segue as restrições de sintaxe definidas pela
especificação XML.

PORQUE

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

Um documento XML bem formado deve, necessariamente, estar em


conformidade com uma definição em DTD (Document Type Definition) ou em
XML Schema. Analisando-se as afirmações acima, conclui-se que:

a) as duas afirmações são verdadeiras, e a segunda justifica a primeira.


b) as duas afirmações são verdadeiras, e a segunda não justifica a primeira.
c) a primeira afirmação é verdadeira, e a segunda é falsa.
d) a primeira afirmação é falsa, e a segunda é verdadeira.
e) as duas afirmações são falsas.

(CES - – HEMOBRÁS - Tecnologia da Informação) Acerca de


implementação de arquiteturas orientadas a serviços, é correto afirmar que
tecnologia de XML Schema é condição para o uso de SOAP e http.

(CESPE - 9 – INMETRO - Tecnologia da Informação) O INMETRO pode


alcançar interoperabilidade de dados com os fabricantes/fornecedores de
produtos, na coleta e publicação de dados, com o uso de XML como formato
de intercâmbio de dados, uma vez que a linguagem permite a incorporação da
semântica e a definição de dados por meio de mecanismos de validação como
DTD ou XML Schema.

(CESPE - 2009 – INMETRO - Tecnologia da Informação) Diferentes de XML


Schema, DTDs possibilitam a derivação e a definição de tipos de dados.

(CESPE - 2010 – BASA - cnologia da Informação) Usando-se um XML Schema,


validam-se os metadados e os dados de um documento XML.

(CESPE - 2010 – SAD/PE - Tecnologia da Informação – E A linguagem XML


Schema está mais diretamente associada às linguagens do tipo SQL DML,
16712855225

enquanto a linguagem XQuery associa-se, de forma mais direta, às linguagens


do tipo SQL DDL.

10. (CESPE - 2010 – TRE/MT - Tecnologia da Informação) A respeito de XML e XML


Schema, assinale a opção correta.

a) No formato xmlns:xs, o XML Schema pode utilizar declaração de escopo de


nomes (namespace).

b) O elemento <xml schema> é o elemento raiz de todos os esquemas definidos


em XML Schema.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

c) Elementos complexos em XML Schema não podem ser vazios, nem conter só
texto. Devem conter sempre ao menos um outro elemento.

d) Em XML Schema, restrições são utilizadas para definir valores aceitáveis para
atributos e não para elementos.

e) XML Schema oferece suporte a tipos de dados predefinidos, não permitindo


a criação de novos tipos de dados.

11. (CESPE - 2010 – TRT/21 - Tecnologia da Informação) A XSD - XML schema


definition permite definir elementos e atributos que podem aparecer em um
documento XML, tal como um DTD (document type definition).

12. (CESPE - 2011 – TJ/ES - Tecnologia da Informação) Na linguagem XML, o XML


Schema é o documento apropriado para a definição de métodos, regras de
validação dos documentos e suas restrições de conteúdo.

13. (CESPE - 2 – BASA - Tecnologia da Informação) DTD (document type


definition) e XSD (XML schema description) são dois formatos de
interoperabilidade de dados usados no escopo do padrão XML, e, de modo
geral, um documento DTD é semanticamente menos expressivo que seu
equivalente XSD.

14. (CESPE - 2013 – CNJ - Tecnologia da Informação) Arquivos XML podem conter
informações para definição de regras de validação de seu conteúdo em um
outro arquivo XML, denominado XSD (XML schema definition).

15. (CESPE - 2013 – TRE/MS - Tecnologia da Informação - A) XML schema definition


16712855225

(XSD) tem como objetivo definir os blocos de construção corretos de um


documento XML, como o DTD (document type definition), em que um esquema
XML pode definir elementos e atributos que podem aparecer em um
documento.

16. (CESPE - 2013 – TRT/10 - Tecnologia da Informação) Na sintaxe básica de XML


Schema, os dados definidos em um esquema para estabelecer elementos e
atributos podem ser do tipo complexo, caso usados apenas para definir
elementos, e do tipo simples, caso usados para definir elementos e atributos.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

17. (CESPE - 2013 – TRT/10 - Tecnologia da Informação) Mediante o esquema XML,


são estabelecidos critérios para o envio de informações, desconsiderando-se a
organização e formato dos dados.

18. (CESPE - 2013 – TRT/10 - Tecnologia da Informação) Uma especificação em XML


Schema é sempre iniciada com tag <schema> e concluída com tag <//schema>.
Todas as declarações de elementos devem ser inseridas entre as duas tags, bem
como a definição de atributos e tipos deve ser inserida no corpo do programa.

19. (FCC - – TRT/24 - Tecnologia da Informação) A especificação de XML


Schema assume que pelo menos dois documentos são utilizados:

a) Simples e complexo.
b) Global e local.
c) Restrição e extensão.
d) Abstrato e concreto.
e) Instância e esquema.

(ESAF - – PN/RN - Tecnologia da Informação - D) Quanto à estrutura,


propriedades e sintaxe do XML, é correto afirmar que a XML Schema diferencia
entre facetas fundamentais e facetas restritivas. As restritivas definem as
propriedades básicas dos tipos de dados e as fundamentais não acrescentam
novas propriedades a um tipo de dados.

21. (FCC - 2013 – AL/RN - Tecnologia da Informação) Em XML SCHEMA, o elemento


que descreve o formato de dados que não são XML dentro de um documento
XML é chamado de:

a) complexType. 16712855225

b) notation.
c) extension.
d) field.
e) import.

(FCC - 2013 – AL/MA - Tecnologia da Informação) Dentre as alternativas a seguir,


selecione aquelas que correspondem a especificações elaboradas com a
finalidade de definir regras de validação (esquemas) para documentos XML:

I. XSLT
II. DTD

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

III. XML Schema

Assinale:

a) se somente a afirmativa I estiver correta.


b) se somente a afirmativa II estiver correta.
c) se somente as afirmativas I e II estiverem corretas.
d) se somente as afirmativas II e III estiverem corretas.
e) se todas as afirmativas estiverem corretas.

- 2013 – AL/ - Tecnologia da Informação) Assinale a alternativa que


indica o tipo padrão (default) para um elemento (element) de um XML Schema:

a) QName
b) anyType
c) char
d) string
e) token

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


DHTML

1 2 3 4 5 6 7 8 9 10
D E C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


XHTML

1 2 3 4 5 6 7 8 9 10
C C E D D

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


XML

1 2 3 4 5 6 7 8 9 10
C C C C C E C C E E
11 12 13 14 15 16 17 18 19 20
E

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


XML 16712855225

1 2 3 4 5 6 7 8 9 10
B D B A E B C C E C
11 12 13 14 15 16 17 18 19 20
A

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


XML

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 90


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 09

1 2 3 4 5 6 7 8 9 10
E D

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


XML SCHEMA (XSD)

1 2 3 4 5 6 7 8 9 10
C C B C E C E C E A
11 12 13 14 15 16 17 18 19 20
C C C C C C E E E E
21 22 23 24 25 26 27 28 29 30
B D B

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


XSLT

1 2 3 4 5 6 7 8 9 10
C B D C E E E A C E
11 12 13 14 15 16 17 18 19 20
E C E C C D C A

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


XML SCHEMA (XSD) 16712855225

1 2 3 4 5 6 7 8 9 10
C C B C E C E C E A
11 12 13 14 15 16 17 18 19 20
C C C C C C E E E E
21 22 23 24 25 26 27 28 29 30
B D B

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 90


Aula 10

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

AULA 10

SUMÁRIO PÁGINA
Apresentação 01
- Sistemas Móveis 02
- Android 15
- iOS 30
- Segurança no Desenvolvimento 37
- Compiladores 55
- Interpretadores 63
Lista de Exercícios Comentados 83
Gabarito 99

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
16712855225

Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

SISTEMAS MÓVEIS

Pessoal, vamos falar sobre sistemas, arquitetura e aplicações de dispositivos móveis.


A popularização dos smartphones desencadeou uma revolução no mercado de
telefonia móvel. A evolução da tecnologia dos aparelhos celulares permitiu oferecer
ao usuário recursos que vão muito além da realização de uma chamada ou do envio
de uma mensagem.

As melhorias de hardware permitiram o desenvolvimento de sistemas operacionais


mais avançados. A partir disso, foi possível desenvolver aplicativos melhores com
cada vez mais recursos e serviços para os usuários. Os acessos, por exemplo, a
serviços de instituições financeiras e redes sociais podem ser facilitados pelo uso de
aplicativos que são executados em um aparelho celular.

Devido a esta evolução, os smartphones se transformaram em uma oportunidade


de entretenimento, de acesso à informação e de solução de problemas, integrando-
16712855225

se assim ao cotidiano das pessoas e facilitando diversas tarefas do dia a dia.


Motivado por estes resultados, o mercado de aplicativos para aparelhos celulares
apresenta anualmente uma absurda taxa de crescimento.

Este mercado é disputado por diferentes plataformas tecnológicas, incluindo


sistemas operacionais e plataformas de desenvolvimento, gerando uma variedade
enorme de soluções no mercado. Frente a este fato, um dos principais desafios
deste mercado é desenvolver aplicativos em um ambiente de tecnologia altamente
fragmentado e em rápida evolução.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

As limitações de plataforma para distribuição do aplicativo, tempo e custo para o


desenvolvimento, complexidade das tecnologias necessárias para a sua criação e
manutenção são pontos problemáticos em um projeto voltado ao desenvolvimento
deste tipo de aplicativo. Por que? De novo lembrem-se da variedade colossal de
dispositivos que existem atualmente.

Essas plataformas são compostas de diversas tecnologias, tais como: sistema


operacional, linguagens de programação e IDEs. O Sistema Operacional é
responsável por gerenciar diversos recursos do aparelho; as linguagens de
programação são utilizadas na programação do aplicativo; e a IDE fornece
ferramentas que auxiliam na criação do aplicativo.

16712855225

ém disso, no desenvolvimento de um aplicativo móvel, deve-se considerar, por


exemplo: resoluções dos dispositivos; as limitações de bateria, processamento,
memória e armazenamento; versão do sistema operacional utilizado; os diversos
tamanhos de tela; as possíveis questões de segurança de dados; acessibilidade;
entre outros. Vocês percebem agora como tudo isso pode ser complexo?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Galera, eu tenho alguns amigos de faculdade que enveredaram para a área de jogos
para dispositivos móveis Pensem em termos de marketing e dinheiro! É bom
comercialmente que um jogo funcione apenas no Galaxy S5, mas não no Galaxy S5
Mini? É bom comercialmente que um jogo não torre a bateria no iPhone 6, mas torre
no iPhone 6S? Evidente que não!

Vamos falar agora sobre as principais abordagens de desenvolvimento para


sistemas móveis. Peço a atenção de vocês, porque esse assunto é o que mais cai
em prova! Conforme a imagem acima, existem duas abordagens principais:
Desenvolvimento Nativo e Desenvolvimento Cross-Platform (sendo que esse último
16712855225

se divide em Desenvolvimento Web e Desenvolvimento Híbrido).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

DESENVOLVIMENTO NATIVO

O Desenvolvimento Nativo é quando o aplicativo é desenvolvido usando os recursos


da plataforma. No caso do iOS, utiliza-se a linguagem de programação Objective-
C, o framework de desenvolvimento CocoaTouch e a ferramenta Xcode. Para
Android, utiliza-se a linguagem Java com o Android Studio na ferramenta Eclipse. E,
no Windows Phone, a linguagem C#, Windows Phone SDK e Visual Studio.

Trata-se, portanto, da abordagem mais simples e direta: para cada plataforma, é


desenvolvida uma versão do aplicativo. Optar por desenvolvimento nativo é mais
caro, pois é necessário desenvolver um novo código para cada plataforma. No
entanto, o resultado final geralmente é melhor, pois o aplicativo funcionará mais
fluído e melhor integrado com os recursos de cada plataforma. Exemplo acima!
16712855225

Por falar nisso, através das APIs disponíveis das linguagens utilizadas em cada
plataforma, um aplicativo nativo pode acessar funcionalidades oferecidas p
recursos nativos do sistema operacional, tais como: GPS, SMS, E-Mail, Acelerômetro,
Bússola, Câmera Fotográfica, etc. Esses aplicativos nativos evidentemente podem
ser baixados, instalados e vendidos em lojas de aplicativos.

O desenvolvimento de um aplicativo nativo exige conhecimentos específicos a


respeito das tecnologias utilizadas pela plataforma na qual se deseja executá-lo.
principal desvantagem está justamente no fato de ser executado apenas na

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

plataforma para a qual foi desenvolvido, aumentando o tempo, custo e o esforço


para disponibilizar um mesmo aplicativo para mais de uma plataforma.

As diferenças entre as plataformas também são importantes, pois para cada uma há
diferentes ferramentas de desenvolvimento, bibliotecas e equipamentos com
diferentes capacidades. Desenvolver aplicativos nativos para diversos sistemas
operacionais requer uma equipe de trabalho com conhecimento em várias
tecnologias, visto que não há reaproveitamento de código. Vejam alguns exemplos:

PLATAFORMA CONHECIMENTOS NECESSÁRIOS

Apple IOS C, Object C


Google Android Java
RIM Blackberry Java (J2ME Flavored)
Symbian C, C++, Python, HTML, CSS, JS
Windows Mobile .Net
Windows 7 Phone .Net
HP Palm webOS HTML, CSS, JS
MeeGo C, C++, HTML, CSS, JS
Samsung bada C++

Aplicativos nativos são desenvolvidos de acordo com especificações fornecidas


pelo fabricante do sistema operacional. Esses fabricantes fornecem APIs que podem
ser utilizadas pelos desenvolvedores, garantindo certo nível de consistência entre
todos os aplicativos nativos. Em geral, oferecem ótima experiência de uso,
permitindo ao usuário uma navegação mais imersiva.

Com relação a sua interface, os componentes de um aplicativo nativo são iguais aos
do sistema operacional utilizado pelo sistema operacional do dispositivo, portanto
16712855225

é mais intuitivo ao usuário. Aplicativos desenvolvidos através do paradigma nativo


possuem ótimo desempenho. Por que, professor? Porque não é necessária qualquer
interpretação de código durante a execução.

Outro aspecto importante é a independência de comunidades responsáveis por


versões de frameworks de desenvolvimento de aplicativos, pois – em um aplicativo
nativo – as atualizações de API do próprio sistema operacional serão utilizadas no
desenvolvimento de novas funcionalidades do aplicativo nativo. O que você quer
dizer com isso, professor?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Eu quero dizer que, uma vez atualizada a plataforma, já é possível incorporar as


novidades existentes da plataforma para desenvolver para o aplicativo nativo, sem
a dependência da atualização de tecnologias adjacentes, como por exemplo, algum
framework particular. Bacana! Agora vamos falar um pouquinho sobre
Desenvolvimento Cross-Platform.

Vamos resumir nosso papo! Se você for criar uma aplicação nativa para Android,
você poderá executá-lo no iOs? Não, e vice-versa! Você terá que criar uma aplicação
para cada plataforma e provavelmente necessitará de duas equipes (cada uma
especializada em uma linguagem). Você terá acesso aos recursos do dispositivo e
poderá instalar em uma loja de aplicativos – obviamente, com mais segurança.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

DESENVOLVIMENTO CROSS-PLATFORM

Considerando um cenário com notável diferença entre sistemas operacionais e


plataformas de programação existentes, desenvolver um aplicativo uma vez e poder
utilizá-lo em várias plataformas é um dos maiores desafios da computação móvel.
Dito isso, temos o Desenvolvimento Cross-Platform, que é uma forma de
desenvolver aplicativos que poderão ser utilizados em diferentes plataformas.

Com o crescimento dos aplicativos cross-plataform, o mercado de aplicativos para


aparelhos celulares sofreu alterações importantes em seu modelo de negócio. Entre
as vantagens, destaca-se um maior Retorno sobre Investimento (ROI), pois uma vez
que o aplicativo é multiplataforma e pode ser empacotado como um aplicativo
nativo, é desenvolvido uma vez e comercializado em várias lojas de aplicativos.

Infelizmente, a experiência de usuário do aplicativo não terá a mesma fluidez;


realizar testes em aplicativos cross-platform é bem mais complexo; não há garantia
de poder aproveitar os recursos do dispositivo tão eficientemente como no
desenvolvimento nativo; pode haver dificuldades, na medida em que plataformas
possuem diferentes comportamentos e defeitos – dificultando a depuração. Enfim...

Como vimos anteriormente, ele se divide em Desenvolvimento Web (também


conhecido como Desenvolvimento Responsivo) e Desenvolvimento Híbrido.
Professor, qual a diferença entre essas abordagens? Bem, as aplicações web são
acessadas diretamente do navegador e são geralmente desenvolvidas em HTML5,
CSS3 e JavaScript.

O HTML5 incorporou uma série de elementos multimídia ao HTML comum, o que


fez com que ele rapidamente se tornasse uma excelente opção de desenvolvimento.
A grande vantagem é que ele pode ser lido em qualquer navegador (móvel ou não).
16712855225

No entanto, ele tem alguns problemas de performance – ademais, faltam à


linguagem alguns recursos mais avançados.

Além disso, essas aplicações precisam estar conectadas à internet para funcionar.
Como nem todos os usuários de smartphone possuem conexão à internet, e
algumas vezes essas conexões não são de boa qualidade, pode não ser uma boa
ideia confiar apenas nessas tecnologias. Deve-se avaliar o contexto de utilização e
nos objetivos do aplicativo.

Em suma, Desenvolvimento Web trata de aplicativos que rodam diretamente no


navegador do dispositivo. A Interface Gráfica é adaptada para dispositivos com telas

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

menores, utilizando conceitos de responsividade. Estas aplicações são hospedadas


em servidores web, utilizando tecnologias específicas para serem carregadas, em
geral, em máquinas de “baixo” processamento e velocidade de banda da rede.

A atualização/manutenção da aplicação é feita no servidor! Logo, todos os


dispositivos recebem a nova versão automaticamente, bastando atualizar a página
no browser – tudo independente de plataforma. Há alguns problemas com a
persistência de dados no dispositivo (Local Store). No entanto, há mecanismos para
manter informações em cache, simulando o armazenamento de dados.

Vamos só falar um pouquinho mais sobre responsividade. Trata-se de uma forma


de apresentar a informação da forma mais acessível e confortável para diversos
meios de acesso. Não achem que isso significa apenas apresentar uma página com
telas de diversos tamanhos – apesar de ser sua atividade principal! Recomenda-se
sempre desenhar a solução para mobile e depois para desktop.
16712855225

Um site responsivo é quando o site automaticamente se adapta em qualquer


dispositivo que o usuário esteja visualizando com base no tamanho da tela em que
o site é exibido, ou seja, não importa em qual tipo de dispositivo o site seja acessado
sejam eles computadores desktops, notebooks, smartphones, tablets, o site será
exibido da melhor maneira para aquele dispositivo.

E o Desenvolvimento Híbrido? Aplicações híbridas trazem a resposta para os


programadores que desejam desenvolver para muitas plataformas, sem grande
perda de desempenho. Essa abordagem permite ao desenvolvedor criar um núcleo

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

do programa de forma nativa, o que permite que haja um controle sobre as


funcionalidades e recursos do dispositivo.

Isso faz com que, em suma, a experiência do usuário que está utilizando a aplicação
em um iOS seja a mesma que um em um Windows Phone, por exemplo, o que é
muito importante em grande parte das aplicações. O aplicativo híbrido funciona
dentro do browser do sistema operacional. O browser implementa uma classe que
é capaz de exibir conteúdo web.

Diferente do aplicativo nativo, o híbrido não possui acesso direto às funcionalidades


do dispositivo, sendo necessário um framework que faça a comunicação entre o
aplicativo e o dispositivo. Em geral, o desenvolvimento híbrido é utilizado para
aplicativos menos robustos e mais simples. Nesse contexto, o desenvolvedor
consegue reaproveitar boa parte do seu código.

A aplicação híbrida nada mais é que uma aplicação web (HTML5, CSS3, etc)
envelopada em um contêiner nativo. Existem dezenas de ferramentas para gerar
esse contêiner nativo para cada plataforma, tais como Cordova, Sencha Touch, etc.
Para diferenciar todas essas abordagens, eu recomendo que façamos uma
comparação geral. Atenção no quadro abaixo:

Nativo Web Híbrido

Baixado a partir da Loja de Hospedado em um Servidor Baixado a partir da Loja de


Distribuição Aplicativos. Web na internet e acessado Aplicativos.
por meio de um navegador.
Pode acessar telas sem Pode acessar telas sem Pode acessar telas sem
Acesso
conexão com a internet. conexão com a internet. conexão com a internet.
Offline 16712855225

Cada aplicativo para uma Um aplicativo é desenvolvido Um aplicativo é construído e


plataforma específica. A para funcionar em todas as depois envolvido em um
lógica da aplicação é plataformas, porque a lógica contêiner para servir a uma
reconstruída para cada pode ser reutilizada. plataforma nativa
Desenvolvimento aplicação em cada Aplicativos parecem específica.
plataforma. É difícil idênticos em todos os
replicar aplicativos dispositivos e browsers, mas
precisamente em todas as requer muitos testes.
plataformas.
Atualizações devem ser Atualizações podem ser Atualizações podem ser
Releases baixadas e instaladas todas manipuladas remotamente e baixadas e instaladas todas
as vezes. Desenvolvimento são instantâneas. as vezes.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10
e ciclos de release são
maiores.
Resposta rápida. Um pouco de atraso, Mais rápido que o Web e
Desempenho especialmente com mais lenta que o Nativo.
conectividade pobre.
Interface de usuário Interface de usuário com Apelo visual maior que o
Design bastante rica. foco maior ênfase na Desenvolvimento Web, mas
funcionalidade. não tão rico como o Nativo.
Suporta integração com Suporta parcialmente a Suporta integração com
Integração recursos do dispositivo. integração com recursos do recursos do dispositivo, mas
dispositivo. com desempenho limitado.
SQLite. SQLite. SQLite.
Armazenamento
de Dados
Swipe, Pinch e Spread. Swipe Swipe, Pinch e Spread.
Touch
Mais caro de todos. Mais barato de todos. Barato, mas não tanto
Custo quanto o Desenvolvimento
Web.
Ênfase na interatividade e Ênfase na usabilidade. Ênfase na usabilidade.
Ênfase nos recursos.

Lento. Rápido. Médio.


Tempo de
Desenvolvimento
Complexa. Fácil. Moderada.
Manutenção

A imagem abaixo também auxilia a entender cada abordagem! Percebam que se


você deseja capacidade máxima em uma plataforma única com interações
avançadas, alta performance e distribuição segura em uma loja de aplicativos, vá de
Desenvolvimento Nativo! Se você deseja capacidade máxima, mas para múltiplas
16712855225

plataformas e exigindo habilidades do desenvolvedor.

Além disso, se você quiser também acesso a plataforma nativa e distribuição segura
em uma loja de aplicativos, vá de Desenvolvimento Híbrido. Por fim, se a alta
capacidade não é seu foco, mas a capacidade de rodar em diversas plataformas,
também exigindo habilidades do desenvolver, atualizações instantâneas e
automáticas e distribuição irrestrita, seu negócio é Desenvolvimento Web (HTML5).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE – 2014 – ANATEL – Analista de Sistemas) O desenvolvimento de


aplicações web e o de aplicações nativas são as principais formas de
desenvolvimento móvel.

Comentários:

Vamos falar agora sobre as principais abordagens de desenvolvimento para sistemas


móveis. Peço a atenção de vocês, porque esse assunto é o que mais cai em prova!
Conforme a imagem acima, existem duas abordagens principais: Desenvolvimento
Nativo e Desenvolvimento Cross-Platform (sendo que esse último se divide em
Desenvolvimento Web e Desenvolvimento Híbrido).

Conforme vimos em aula, a questão está perfeita! De modo geral, são essas duas
formas principais – o tipo híbrido é uma combinação dos anteriores.

Gabarito: C

(CESPE – 2013 – BACEN – Analista de Sistemas) No projeto de aplicações para


dispositivos móveis, devem ser considerados, entre outros aspectos, as
características dos dispositivos de hardware para os quais a aplicação está sendo
desenvolvida e o consumo de energia gerado por cada recurso do sistema,
visando-se a economia de bateria. 16712855225

Comentários:

Além disso, no desenvolvimento de um aplicativo móvel, deve-se considerar, por


exemplo: resoluções dos dispositivos; as limitações de bateria, processamento,
memória e armazenamento; versão do sistema operacional utilizado; os diversos
tamanhos de tela; as possíveis questões de segurança de dados; acessibilidade; entre
outros. Vocês percebem agora como tudo isso pode ser complexo?

Conforme vimos em aula, a questão está perfeita! Deve haver uma preocupação
com as características de hardware do dispositivo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

ANDROID

Android é um sistema operacional móvel pertencente ao Google! Apesar disso, ele


16712855225

continua tendo código aberto, mas com aplicações com software de código
fechado. Galera, quem aí tem um celular com Android? Vocês devem saber que é
possível trocar a ROM! Professor, o que é ROM? É como um firmware personalizado
do sistema operacional – pensem como uma customização do sistema operacional.

Por exemplo: quando eu tinha um Moto X, que eu usava o CyanogenMod. Por que
eu estou falando isso? Para enfatizar que o Google é agora dono do Android, mas
o código continua sendo aberto – permitindo que muitos desenvolvedores criem
personalizações. O Android surgiu a partir da Versão 2.6 do Kernel do Linux e
atualmente se baseia na Versão 3.x.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Professor, o que eu preciso para desenvolver? Você precisa do Android Studio, que
é um kit de ferramentas para desenvolvimento Android; e você precisa do SQLite,
que é uma biblioteca para implementar um banco de dados e armazenar dados.
Uma curiosidade engraçada também é que cada versão do sistema operacional
possui o nome de uma sobremesa – a versão atual é a Marshmallow 6.0.

A imagem acima apresenta três peculiaridades: primeiro, ela infelizmente não


mostra as duas últimas versões: Lollipop e Marshmallow; segundo, a versão
Honeycomb foi lançada, a princípio, para tablets; e terceiro, a partir da versão
IceCream Sandwich 4.0, o Android passou-se a se basear no kernel 3.x e, não mais,
no kernel 2.6 do Linux. Vamos agora ver o slogan de cada versão:

16712855225

VERSÃO SLOGAN

Android 1.6 A informação do mundo está ao seu alcance: pesquisar na Web,


Donut receber rotas de trânsito... ou apenas assistir a vídeos de gatos.
Android 2.0 Sua tela inicial do jeito que quiser. Organize apps e widgets em várias
Eclair telas e pastas. Planos de fundo interativos respondem ao toque.
Android 2.2 A Digitação por voz escreve o texto por você e as Ações de voz
Froyo permitem que você controle seu smartphone sem precisar digitar.
Android 2.3 Novos sensores fazem do Android uma ótima plataforma para jogos.
Gingerbread Assim você pode tocar, inclinar e se divertir.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Android 3.0 Otimizada para tablets, esta versão abre novos horizontes onde quer
Honeycomb que você esteja.
Android 4.0 O Android atinge a maioridade com um design novo e refinado.
IceCream Sandwich Simples, bonito e muito inteligente.
Android 4.1 O Android fica mais rápido, suave e com um visual incrível. Com o
Jelly Bean Google Now, você tem a informação certa na hora certa.
Android 4.4 Inteligente, simples e totalmente seu. Um design mais refinado,
Kitkat melhor desempenho e novos recursos.
Android 5.0 Mais doce novidade do Android. Tenha a elegância do Android em
Lollypop telas grandes e pequenas, com informação certa no momento certo.
Android 6.0 O Android Marshmallow chega para adocicar a experiência do
Marshmellow sistema da Google com diversos retoques em vários aspectos.

O Android roda sobre uma máquina virtual chamada Dalvik VM! Trata-se de uma
máquina virtual otimizada para requerer pouca memória e processamento, e
projetada para permitir que múltiplas instâncias da máquina virtual rodem ao
mesmo tempo, deixando para o sistema operacional o isolamento de processos, o
gerenciamento de memória e o suporte a threading.

Uma máquina virtual é uma aplicação de software que se comporta como se fosse
um dispositivo independente com seu próprio sistema operacional. Quem aí já
instalou VMWare? Vocês sabem, então, que podem rodar uma máquina virtual em
um computador que opera com um sistema operacional completamente diferente
do sistema operacional da máquina física.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Eu, por exemplo, tenho um MacBook, no entanto eu instalei uma máquina virtual
que roda Windows! Então é possível rodar um Windows no Macbook? Sim, por meio
de uma máquina virtual. A Dalvik é frequentemente referenciada como uma
Máquina Virtual Java, mas isso não é estritamente exato, porque o bytecode que ela
opera não é o bytecode da JVM.

Em vez disso, uma ferramenta de conversão chamada dx, incluída no SDK Android,
converte os arquivos .class de uma classe compilada por um compilador Java
comum para a JVM em outro formato especifico de classe (.dex). Vejam a imagem
abaixo! Observem que o Android não roda diretamente sobre a JVM! Apesar de ser
escrito em Java, ele roda diretamente sobre o Dalvik VM.

Vamos bater um papo agora sobre a Arquitetura Android! O Google geralmente se


refere ao Android como uma pilha de softwares. Cada camada da pilha agrupa
vários programas que suportam funções específicas do sistema operacional.
Conforme mostra a imagem, a base da pilha é a Camada de Linux Kernel, que inclui
algumas funcionalidades. Quais, professor?

Gerenciador de memória, configurações de segurança, gerenciador de energia e


vários drivers de hardware (Audio, Bluetooth, Câmera, entre outros). Para quem não
sabe, drivers são programas que controlam os dispositivos de hardware. Exemplo:
Meu Moto X tinha uma câmera! O Kernel do Android contém um driver que permite
ao usuário enviar comandos ao hardware da câmera.

Percebam, pela imagem, que a câmera do celular está na camada de Abstração de


Hardware, onde se encontram os recursos de hardware. Acima temos a Camada de
Bibliotecas! Pode-se pensar em bibliotecas como um conjunto de instruções que
dizem ao dispositivo como lidar com diferentes tipos de dados. Falou em biblioteca,
16712855225

deve-se lembrar de multimídia, Webkit (Renderizador de Browsers), SQLite (BD), etc.

Outras bibliotecas incluem aceleração tridimensional (para dispositivos com


acelerômetros) e um biblioteca de navegadores Web. No mesmo nível da camada
de bibliotecas, a Camada de Runtime inclui um conjunto de bibliotecas do núcleo
Java – lembrando que programadores de aplicações Android constroem suas
aplicações em Java. Ele também inclui a Máquina Virtual Dalvik (DVM).

A Camada Framework de Aplicações apresenta programas que gerenciam as


funções básicas do telefone, como alocação de recursos, aplicações de telefone,
mudança entre processos ou programas, e softwares de localização física do

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

aparelho. Os desenvolvedores de aplicações têm acesso total ao Framework de


Aplicações do Android.

Isso possibilita que os desenvolvedores tirem vantagem das capacidades de


processamento do Android e suportem recursos quando estão construindo suas
aplicações móveis. O framework de aplicações é como um conjunto de ferramentas
básicas com as quais um desenvolvedor pode construir aplicações e ferramentas
muito mais complexas.

Ela fornece todas as funcionalidades necessárias para a construção de aplicativos,


por meio de bibliotecas nativas. Se a prova perguntar qual camada contém as
16712855225

funcionalidades que auxiliam o desenvolvedor na criação de aplicativos, o que vocês


respondem? Tem que ser automático: Framework de Aplicação. Vejam que existem
vários gerenciadores (de atividade, janela, conteúdo, notificação, entre outros).

No topo da pilha está a Camada de Aplicações! Encontram-se funções básicas do


dispositivo, chamadas telefônicas, acesso ao navegador ou acesso à lista de
contatos. Sabe aqueles aplicativos que você instala no seu celular? Estão aqui
também! Whatsapp, Facebook, Tinder, Instagram... estão todos aqui! Se você é um
usuário comum, esta é a camada que você mais usará.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Em geral, apenas os programadores do Google, os desenvolvedores de aplicação e


os fabricantes de hardware acessam as camadas mais baixas. Vamos resumir em
palavras-chave? Camada de Kernel: drivers; Camada de Abstração de Hardware:
recursos de hardware; Camada de Bibliotecas: bibliotecas mesmo; Camada de
Runtime: DVM;

Camada de Framework de Aplicação: Gerenciadores para desenvolvedores;


Camada de Aplicações: apps do dispositivo. Algumas observações: alguns
consideram a Camada de Runtime como uma camada separada e outros
consideram-na como parte da Camada de Bibliotecas. Ademais, alguns consideram
a Camada de Abstração de Hardware como parte da Camada de Bibliotecas.

Vamos ver agora um pouco sobre os componentes de um aplicativo! O que é isso,


professor? Os componentes de aplicativo são os blocos de construção fundamentais
de um aplicativo do Android. Cada componente é um ponto diferente pelo qual o
sistema pode entrar no aplicativo. Nem todos os componentes são pontos de
entrada reais para o usuário e alguns dependem uns dos outros.

No entanto, cada um existe como uma entidade independente e desempenha uma


função específica – cada um é um bloco de construção exclusivo que ajuda a definir
o comportamento geral do aplicativo. Há quatro tipos diferentes de componentes
de aplicativo. Cada tipo tem uma finalidade distinta e tem um ciclo de vida específico
que define a forma pela qual o componente é criado e destruído.

A seguir apresentam-se os quatro tipos de componentes de aplicativos:

 Atividades (Activities):

As atividades representam uma tela única com uma interface do usuário. Por
16712855225

exemplo: um aplicativo de e-mails pode ter uma atividade para mostrar uma lista
de novos e-mails, outra atividade para escrever um e-mail e outra para ler e-mails.
Embora essas atividades funcionem juntas para formar uma experiência de usuário
coesa no aplicativo de e-mails, elas são independentes entre si.

Dessa forma, um outro aplicativo pode iniciar qualquer uma dessas atividades (se o
aplicativo de e-mails permitir). Por exemplo: um aplicativo de câmera pode iniciar a
atividade no aplicativo de e-mail. Vocês já tiraram uma foto no celular e a enviaram
por e-mail? Pois é! Você pode iniciar a atividade de escrita de e-mail lá no aplicativo
da câmera. Bacana?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Em suma, o Componente de Atividade é um componente que representa cada tela


da aplicação. Pegue seu smartphone agora, abra algum aplicativo (Ex: Facebook) e
vá interagindo e trocando de telas – cada tela será uma atividade. As atividades são
classes Java compostas por subcomponentes chamados de Visão (View). O que é
isso, professor?

É uma classe que representa o bloco de construção básico de um Componente de


UI. Galera, é a telinha retangular da tela do seu dispositivo – ela é responsável por
realizar desenhos e tratamento de eventos. Bacana, então as atividades são
compostas de visões e representam uma tela única da interface do usuário. Agora
nós vamos conhecer as Intenções.

 Intenções (Intents

Uma Intenção (Intent) é uma descrição abstrata de uma operação a ser executada.
Ela pode ser utilizada para iniciar uma Atividade, para ativar um broadcast, para
enviar uma mensagem para uma aplicação que roda em outro processo, entre
outros. Podemos dizer que ele envia uma solicitação para o que Android realize
alguma ação.

Por exemplo: para que o sistema saia de uma atividade para outra, dispara-se uma
intenção. A documentação oficial afirma que seu uso mais significativo ocorre
quando da inicialização de uma Atividade, e que também podemos imaginá-lo
como uma cola entre atividades. É uma estrutura de dados que armazena uma ação
a ser executada. Certinho?

 Serviços (Services

Os serviços são componentes executados em segundo plano para realizar


16712855225

operações de execução longa ou para realizar trabalho para processos remotos.


Eles não apresentam uma interface do usuário. Por exemplo: um serviço pode tocar
música em segundo plano enquanto o usuário está em um aplicativo diferente ou
buscar dados na rede sem bloquear a interação do usuário com uma atividade.

Outro componente, como uma atividade, pode iniciar o serviço e deixá-lo executar
ou vincular-se a ele para interagir. Deve-se atentar ao fato de que eles não são um
processo separado. Eles rodam na thread principal do processo corrente e possuem
seu próprio ciclo de vida. Os serviços devem estar declarados no AndroidManifest.xml –
não confundir com o arquivo principal do projeto AndroidManifet.xml.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

 Receptores de Broadcast (Broadcast Receivers):

Os Receptores de Broadcast são componentes que respondem a anúncios de


broadcast por todo o sistema. Muitos broadcasts se originam do sistema - por
exemplo, um broadcast que anuncia que uma tela foi desligada, que a bateria está
baixa ou que uma tela foi capturada. Uma pequena pausa: um broadcast é a
transmissão de uma mensagem.

Os aplicativos também podem iniciar transmissões — por exemplo, para comunicar


a outros dispositivos que alguns dados foram baixados no dispositivo e estão
disponíveis para uso. Embora os Receptores de Broadcast não exibam nenhuma
interface do usuário, eles podem criar uma notificação na barra de status para alertar
ao usuário quando ocorre uma transmissão.

Mais comumente, no entanto, um receptor de transmissão é somente um "portal"


para outros componentes e realiza uma quantidade mínima de trabalho. Por
exemplo: ele pode iniciar um serviço para executar um trabalho baseado no evento.
Então, os receptores de broadcast simplesmente respondem a mensagens de
broadcast de outras aplicações ou do próprio sistema.

 Provedores de Conteúdo (Content Provider

Os provedores de conteúdo gerenciam um conjunto compartilhado de dados do


aplicativo. É possível armazenar os dados no sistema de arquivos, em um banco de
dados SQLite ou em qualquer local de armazenamento persistente que o aplicativo
possa acessar. Por meio do provedor de conteúdo, outros aplicativos podem
consultar ou até modificar os dados (se o provedor de conteúdo permitir).

Por exemplo: o Android oferece um provedor de conteúdo que gerencia as


16712855225

informações de contato do usuário. Assim, qualquer aplicativo com as permissões


adequadas pode consultar parte do provedor de conteúdo para ler e gravar
informações sobre uma pessoa específica. Os provedores de conteúdo são úteis
para ler e gravar dados privados no aplicativo e não compartilhados.

As aplicações poderiam muito bem acessar diretamente um banco de dados, por


exemplo. Porém, é uma boa prática tornar o modo como os dados são gravados
transparente à aplicação. Dessa forma, a aplicação pode manter o foco nas
interações com o usuário. Por exemplo: o Provedor de Conteúdo de SMS permite
a qualquer aplicação ler as mensagens recebidas por um telefone celular.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE – 2012 – DPF – Analista de Sistemas) O sistema Android 4.0 foi


desenvolvido com base no kernel Linux versão 2.6 e é voltado para dispositivos
móveis controlando os serviços do sistema, como gerenciamento de memória e
de tarefas, diretivas de segurança e drivers.

Comentários:

A imagem acima apresenta três peculiaridades: primeiro, ela infelizmente não mostra
as duas últimas versões: Lollipop e Marshmallow; segundo, a versão Honeycomb foi
lançada, a princípio, para tablets; e terceiro, a partir da versão IceCream Sandwich
4.0, o Android passou-se a se basear no kernel 3.x e, não mais, no kernel 2.6 do Linux.
Vamos agora ver o slogan de cada versão:

Conforme vimos em aula, a partir da versão IceCream Sandwich 4.0, o Android


passou a ser baseado no kernel 3.x e, não, 2.6.

Gabarito: E

(CESPE – 2013 – ANTT – Analista de Sistemas) Com o uso do banco de dados


SQLite, incluso no Android, é possível desenvolver um provedor de conteúdo,
bem como um servidor de banco de dados, que necessita gerenciar o acesso
aos dados com persistência. No entanto, não se justifica a utilização de um
16712855225

provedor de conteúdo para disponibilizarem-se dados para várias atividades ou


aplicativos distintos.

Comentários:

Os provedores de conteúdo gerenciam um conjunto compartilhado de dados do


aplicativo. É possível armazenar os dados no sistema de arquivos, em um banco de
dados SQLite ou em qualquer local de armazenamento persistente que o aplicativo
possa acessar. Por meio do provedor de conteúdo, outros aplicativos podem consultar
ou até modificar os dados (se o provedor de conteúdo permitir).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Conforme vimos em aula, o provedor de conteúdo é como uma base de dados que
provê conteúdo! Ora, se essa é a função dele, não faz sentido dizer que não se
justifica sua utilização para disponibilizar dados para várias atividades ou aplicativos
distintos. Como não? Essa é a função dele!

Gabarito: E

(CESPE – 2015 – TCU – Analista de Sistemas) No desenvolvimento de aplicação


para dispositivos móveis, em vez de se utilizar uma plataforma específica ou um
ambiente cross-platform, pode-se optar por um tipo híbrido, como, por
exemplo, um componente HTML 5 envelopado em containers para acessar
recursos específicos de cada plataforma.

Comentários:

A aplicação híbrida nada mais é que uma aplicação web (HTML5, CSS3, etc)
envelopada em um contêiner nativo. Existem dezenas de ferramentas para gerar esse
contêiner nativo para cada plataforma, tais como Cordova, Sencha Touch, etc. Para
diferenciar todas essas abordagens, eu recomendo que façamos uma comparação
geral. Atenção no quadro abaixo:

Conforme vimos em aula, a aplicação híbrida envelopa uma aplicação web comum
(Ex: HTML5) com o auxílio de uma ferramenta (Ex: Cordova) – simulando uma
aplicação nativa – e, dessa forma, ele se torna capaz de acessar recursos específicos
de cada plataforma. No entanto, o examinador cometeu um vacilo: o início da
questão dá a entender que um tipo híbrido não é um ambiente cross-platform. Bem,
basta ver a imagem hierárquica colocada em aula para perceber que isso não faz
sentido, mas a questão infelizmente não foi anulada.
16712855225

Gabarito: C

(CESPE – 2013 – ANTT – Analista de Sistemas) Com base no kernel Linux, o


ambiente operacional Android, utilizado para o desenvolvimento de aplicações
móveis e não móveis, inclui um navegador incorporável baseado em WebKit,
com muitas opções de conectividade (wifi, bluetooth, dados wireless através de
conexão celular, como GPRS, EDGE e 3G). Os aplicativos Android são gravados
na linguagem Java e executados em uma máquina virtual JVM.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

O Android roda sobre uma máquina virtual chamada Dalvik VM! Trata-se de uma
máquina virtual otimizada para requerer pouca memória e processamento, e
projetada para permitir que múltiplas instâncias da máquina virtual rodem ao mesmo
tempo, deixando para o sistema operacional o isolamento de processos, o
gerenciamento de memória e o suporte a threading.

Conforme vimos em aula, os aplicativos são escritos em Java, mas rodam em uma
Dalvik VM e, não, Java VM.

Gabarito: E

(CESPE – 2013 – TCE/RO – Analista de Sistemas) No Android, os componentes


Intents são criados a partir de ações do usuário e representam a intenção de se
realizar alguma atividade, como iniciar o aplicativo de correio eletrônico ou abrir
uma página, utilizando-se do navegador que acompanha o Android. O código
mostrado a seguir apresenta corretamente um exemplo de utilização desse
componente.

Uri uri = Uri.parse("http://www.cespe.unb.br");


Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

Comentários:

Uma Intenção (Intent) é uma descrição abstrata de uma operação a ser executada.
Ela pode ser utilizada para iniciar uma Atividade, para ativar um broadcast, para
enviar uma mensagem para uma aplicação que roda em outro processo, entre
outros. Podemos dizer que ele envia uma solicitação para o que Android realize
alguma ação.
16712855225

Conforme vimos em aula, a questão está perfeita! Ela exagerou, colocando código
de programação, mas esse código está apenas criando uma intenção de visualizar
a página http://www.cespe.unb.br.

Gabarito: C

(CESPE – 2013 – FUB – Analista de Sistemas) O Android pode ser executado


sobre qualquer sistema operacional, pois os aplicativos Android são escritos na
linguagem de programação Java e executados em uma máquina virtual Java.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

O Android roda sobre uma máquina virtual chamada Dalvik VM! Trata-se de uma
máquina virtual otimizada para requerer pouca memória e processamento, e
projetada para permitir que múltiplas instâncias da máquina virtual rodem ao mesmo
tempo, deixando para o sistema operacional o isolamento de processos, o
gerenciamento de memória e o suporte a threading.

Conforme vimos em aula, Android é executado na Dalvik VM e, não, Java VM.

Gabarito: E

(IBFC – 2013 – PC – Analista de Sistemas) É uma plataforma de software que está


revolucionando o mercado global de aplicativos para celulares. É a primeira
plataforma de aplicativos para telefones celulares de código aberto que se fez
notar pelos maiores mercados mundiais de telefonia celular. Estamos falando do:

a) Unix.
b) Linux.
c) Android.
d) Mac OS X.
e) Windows.

Comentários:

Galera, somente uma opção trata de um sistema operacional móvel: Android.

Gabarito: C

(CESPE – 2014 – ANATEL – Analista de Sistemas) A arquitetura do Android


16712855225

disponibiliza o módulo denominado OOM handling, que permite às aplicações


o gerenciamento do mecanismo de baixo consumo de energia do aparelho; por
exemplo, se um processo necessitar ser executado em segundo plano, o referido
módulo possibilitará a desativação temporária desse mecanismo até a finalização
do processo em execução.

Comentários:

Essa era uma questão para ninjas! Deseja-se avaliar na questão se o aluno conhece
os módulos específicos de cada funcionalidade – eu acho ridículo cobrar isso, mas
vamos lá! O Módulo OOM Handling (Out Of Memory) trata do gerenciamento de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

memória, sendo que quem trata do gerenciamento de energia é o Módulo


Wakelocks, logo a questão está errada!

Gabarito: E

(FCC – 2011 – TRE/PE – Analista de Sistemas) A versão do Android feita, a


princípio, apenas para tablets, que apresenta melhorias nos recursos multitarefa
e nos widgets, é considerada como:

a) Cupcake
b) Frozen Yogurt
c) Gingerbread.
d) Honeycomb.
e) Ice Cream.

Comentários:

A imagem acima apresenta três peculiaridades: primeiro, ela infelizmente não mostra
as duas últimas versões: Lollipop e Marshmallow; segundo, a versão Honeycomb foi
lançada, a princípio, para tablets; e terceiro, a partir da versão IceCream Sandwich
4.0, o Android passou-se a se basear no kernel 3.x e, não mais, no kernel 2.6 do Linux.
Vamos agora ver o slogan de cada versão:

Conforme vimos em aula, trata-se da versão Honeycomb.

Gabarito: D

10. (CESPE – 2013 – SERPRO – Analista de Sistemas) Em uma aplicação desenvolvida


para Android, os serviços que forem executados em background serão
16712855225

implementados como componentes do tipo service e permanecerão em


execução até que a aplicação que os instanciar seja encerrada.

Comentários:

Outro componente, como uma atividade, pode iniciar o serviço e deixá-lo executar
ou vincular-se a ele para interagir. Deve-se atentar ao fato de que eles não são um
processo separado. Eles rodam na thread principal do processo corrente e possuem
seu próprio ciclo de vida. Os serviços devem estar declarados no AndroidManifest.xml –
não confundir com o arquivo principal do projeto AndroidManifet.xml.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Conforme vimos em aula, os services são realmente executados em background,


mas não permanecem em execução até que a aplicação que os instanciar seja
encerrada – cada aplicação tem seu próprio ciclo de vida independente.

Gabarito: E

11. (QUADRIX – 2013 – CREFONO – Analista de Sistemas) Como o software Android,


da empresa Google, pode ser classificado?

a) Um aplicativo para celulares.


b) Um aplicativo para celulares e tablets.
c) Um sistema operacional para celulares e tablets.
d) Um hardware para celulares e tablets.
e) Um tipo de celular.

Comentários:

Android é um sistema operacional móvel pertencente ao Google! Apesar disso, ele


continua tendo código aberto, mas com aplicações com software de código fechado.
Galera, quem aí tem um celular com Android? Vocês devem saber que é possível
trocar a ROM! Professor, o que é ROM? É como um firmware personalizado do
sistema operacional – pensem como uma customização do sistema operacional.

Conforme vimos em aula, trata-se de um sistema operacional para celulares e


tablets (e outros).

Gabarito: C

12. (FUMARC – 2014 – AL/MG – Analista de Sistemas) Em relação aos principais


16712855225

componentes de um aplicativo Android, analise os itens a seguir, marcando com


(V) a assertiva verdadeira e com (F) a assertiva falsa.

( ) Uma “atividade” do Android é tanto uma unidade de interação do usuário


quanto uma unidade de execução.
( ) Um programa Android interativo é iniciado pela criação de subclasses da
classe Activity.
( ) A classe ContentProvider do Android é utilizada em tarefas de segundo plano,
que podem estar ativas, mas não visíveis na tela.
( ) A classe Service do Android possui o quarteto de atividades básicas para
inserção, consulta, atualização e exclusão.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

A sequência CORRETA, de cima para baixo, é:

a) V, F, F, V.
b) F, V, F, V.
c) F, V, V, F.
d) V, V, F, F.

Comentários:

Conforme vimos em aula, a atividade é realmente uma unidade de interação, na


medida que é uma visão, e ela é também uma unidade de execução (o nome já dá
a dica); o segundo item também está perfeito, visto que se deve herdar de Activity
para iniciar uma interação; os dois últimos itens foram invertidos.

Gabarito: D

13. (CESPE – 2014 – ANATEL – Analista de Sistemas) O sistema operacional Android


tem o Linux como base, o que permite a utilização simultânea de aplicações que
podem ser executadas em segundo plano, de forma transparente para o usuário.

Comentários:

Os serviços são componentes executados em segundo plano para realizar operações


de execução longa ou para realizar trabalho para processos remotos. Eles não
apresentam uma interface do usuário. Por exemplo: um serviço pode tocar música
em segundo plano enquanto o usuário está em um aplicativo diferente ou buscar
dados na rede sem bloquear a interação do usuário com uma atividade.
16712855225

Conforme vimos em aula, temos os services (que rodam em segundo plano).

Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

iOS

O iOS, que antes era chamado de iPhoneOS, é um sistema operacional móvel


16712855225

pertencente à Apple! Lançado em 2007, roda no iPhone, iPod, iPad e Apple TV. Ele
é derivado do sistema operacional dos desktops, chamado MacOS X. Novas versões
são lançadas anualmente geralmente em junho. O número de usuários que utiliza
iPhone/iPad tem aumentado bastante.

Isso cria a oportunidade para os desenvolvedores ganharem dinheiro com a criação


de aplicativos para iPhone e iPad na Apple Store. Professor, o código é aberto? Não,
diferentemente do Android, o código é fechado. Professor, as aplicações nativas
devem ser desenvolvidas em Java? Não, diferentemente do Android, é Objective-C.
Vamos ver agora um pouco da Arquitetura do iOS.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

No mais alto nível, o iOS atua como um intermediário entre o hardware subjacente
e os aplicativos – ora, aplicativos não conversam com o hardware diretamente. Em
vez disso, se comunicam com o hardware através de um conjunto de interfaces bem
definidas. Essas interfaces tornam mais fácil a criação de aplicativos que funcionam
consistentemente em dispositivos com diferentes capacidades de hardware.

A Arquitetura iOS é dividida em quatro camadas! As inferiores apresentam serviços


e tecnologias fundamentais; as superiores, serviços e tecnologias mais sofisticados.
A Camada Cocoa Touch contém os principais frameworks para construir aplicativos.
16712855225

Esses frameworks definem a aparência do aplicativo e fornecem a infraestrutura e


suporte básicos para tecnologias como: multitarefa, entrada por toque, etc.

OBSERVAÇÃO

O Cocoa Touch define uma arquitetura básica (MVC) para criação de aplicativos:

“MVC is central to a good design for a Cocoa application. The benefits of adopting this pattern
are numerous. Many objects in these applications tend to be more reusable, and their
interfaces tend to be better defined. Applications having an MVC design are also more easily
extensible than other applications. Moreover, many Cocoa technologies and architectures
are based on MVC and require that your custom objects play one of the MVC roles”.
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 100
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Ao desenhar aplicativos, deve-se investigar as tecnologias dessa camada para ver


se elas satisfazem suas necessidades. Existem dois frameworks principais: UIKit, que
fornece ferramentas básicas para implementar aplicações gráficas e orientadas a
eventos; e Foundation, que fornece funcionalidades nucleares e essenciais
necessárias para a criação de um aplicativo.

A Camada Media contém os frameworks que contém as tecnologias de criações de


gráfico, áudio e vídeos que você pode utilizar para implementar multimídia em seus
aplicativos. A Camada Core Services contém os frameworks que fornecem serviços
essenciais para as aplicações e para as camadas superiores. Os principais
frameworks são: Core Foundation e Foundation.

Esses frameworks definem tipos básicos utilizados por todos os aplicativos. Essa
camada também contém tecnologias individuais para suportar características como:
Location, iCloud, Social Media e Networking. Detalhe importante: o Foundation faz
parte da Camada Cocoa Touch e Core Services. Por fim, a Camada Core OS trata de
funcionalidades de mais baixo nível.

Mesmo que você não utilize essas tecnologias diretamente em seus aplicativos,
provavelmente eles estão sendo utilizados por outros frameworks. Nessa camada,
trata-se de gerenciamento de memória, threads, processamento, drivers, entre
outros recursos. Por fim, o iOS não implementa um Garbage Collector, mas o
Objective-C possui um Automatic Reference Counting (ARC) para liberar a memória.

Dessa forma, o programador não tem que ficar preocupado em liberar referências.
Para acabar, o ambiente nativo para desenvolvimento de aplicativos para o iOS é o
XCode! Ele suporta por padrão Objective-C e AppleScript. Além disso, ele possui
ferramentas para criação, design e debug de aplicações iOS. Da mesma forma que
16712855225

é comum usar o Eclipse para o Android, é comum usar o XCode para o iOS.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE – 2012 – DPF – Analista de Sistemas) A arquitetura do iOS possui quatro


camadas (layers) que funcionam como interface entre a aplicação e o hardware.
Essas camadas, listadas da mais baixa para a mais alta, são: Core OS, Core
Services, Media e CoCoa Touch.

Comentários:

16712855225

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE – 2013 – SERPRO – Analista de Sistemas) Como o iOS não implementa


um sistema de garbage collection, o Objective-C mantém um contador de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

referência para os objetos de forma a viabilizar a liberação de memória de tal


objeto.

Comentários:

Mesmo que você não utilize essas tecnologias diretamente em seus aplicativos,
provavelmente eles estão sendo utilizados por outros frameworks. Nessa camada,
trata-se de gerenciamento de memória, threads, processamento, drivers, entre outros
recursos. Por fim, o iOS não implementa um Garbage Collector, mas o Objective-C
possui um Automatic Reference Counting (ARC) para liberar a memória.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(FUMARC – 2014 – AL/MG – Analista de Sistemas) Analise as seguintes afirmativas


sobre fundamentos para desenvolvimento de aplicações móveis para iOS.

I. Xcode é o ambiente nativo da Apple para desenvolvimento de aplicativos para


iOS.
II. Objective-C é a linguagem de desenvolvimento de aplicativos para iOS.
III. A classe NSObject é a classe raiz das principais hierarquias de classes em
Objective-C.

Estão CORRETAS as afirmativas:

a) I, II e III.
b) I e II, apenas.
c) I e III, apenas. 16712855225

d) II e III, apenas.

Comentários:

Dessa forma, o programador não tem que ficar preocupado em liberar referências.
Para acabar, o ambiente nativo para desenvolvimento de aplicativos para o iOS é o
XCode! Ele suporta por padrão Objective-C e AppleScript. Além disso, ele possui
ferramentas para criação, design e debug de aplicações iOS. Da mesma forma que é
comum usar o Eclipse para o Android, é comum usar o XCode para o iOS.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Conforme vimos em aula, o ambiente para desenvolvimento de aplicativos é o


XCode; a linguagem para criação de aplicativos é o Objective-C; quem conhece Java
sabe que todas as classes descendem de Object – no Objective-C, as principais
classes descendem de NSObject.

Gabarito: A

(CESPE – 2014 – SUFRAMA – Analista de Sistemas) Para que os programas


aplicativos sejam executados no Android e no iOS, é necessário uma máquina
virtual própria, cujas responsabilidades são, entre outras, gerenciar a
comunicação entre o aplicativo e as bibliotecas nativas, prover segurança e
permitir que os aplicativos possam gravar dados privados, incluindo bancos de
dados. No Android 4.3, a máquina virtual é a Dalvik; no iOS 7, é a XCode.

Comentários:

Dessa forma, o programador não tem que ficar preocupado em liberar referências.
Para acabar, o ambiente nativo para desenvolvimento de aplicativos para o iOS é o
XCode! Ele suporta por padrão Objective-C e AppleScript. Além disso, ele possui
ferramentas para criação, design e debug de aplicações iOS. Da mesma forma que é
comum usar o Eclipse para o Android, é comum usar o XCode para o iOS.

Conforme vimos em aula, XCode é um ambiente de desenvolvimento e, não, uma


máquina virtual.

Gabarito: E

(CESPE – 2014 – SUFRAMA – Analista de Sistemas) No iOS 7, os frameworks são


diretórios que contêm biblioteca compartilhada dinâmica com recursos como
16712855225

arquivos de cabeçalho, imagens e aplicativos auxiliares a serem utilizados no


desenvolvimento dos aplicativos.

Comentários:

Perfeito! Esses frameworks são diretórios que contém um conjunto de bibliotecas


compartilhadas e dinâmicas com diversos recursos e serviços que auxiliam, direta
ou indiretamente, no desenvolvimento de aplicativos.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE – 2014 – SUFRAMA – Analista de Sistemas) O iOS 7 possui as camadas


Cocoa Touch, Media, Core Services e Core OS; esta última, que é a camada mais
baixa, suporta aplicativos desenvolvidos em 64 bits no modelo LP64.

Comentários:

Conforme vimos em aula, as quatro camadas estão corretas e a última suporta


aplicativos 64 bits. Professor, o que é modelo LP64? É um modelo de tamanho dos
dados. Então, sim, a questão está perfeita!
16712855225

Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

SEGURANÇA NO DESENVOLVIMENTO

Software é um componente fundamental na automação dos processos de sistemas


de informação e processos da infraestrutura computacional. Se esses processos
falham, seja por causas acidentais, como erros de um operador humano ou erros
na programação do software, seja por causas intencionais, como ataques por
hackers, vários são os problemas que podem ser gerados.

De fato, pode-se dizer que, de forma complementar aos incidentes de segurança


decorrentes de falhas ou ataques do componente humano no trato da informação,
a grande maioria dos demais incidentes de segurança da informação tem sua
origem nas vulnerabilidades presentes no software, isto é, o software é
intrinsecamente suscetível a falhas.

Uma das causas dessas vulnerabilidades é a codificação ingênua por um


programador, quando ele considera apenas os cenários positivos, sem se preocupar
com o caso de usuários maliciosos. Os incidentes decorrentes da exploração dessas
vulnerabilidades são geralmente relacionados com a indisponibilidade, a divulgação
indevida e a perda de integridade da informação.

A Microsoft usa o acrônimo STRIDE para classificar os efeitos que podem ser
provocados em decorrência de falhas de segurança em uma aplicação, sendo:

S - Spoofing: falsificação de identidade de um usuário;


T - Tampering: adulteração de integridade da informação ou do sistema;
R - Repudiation: negação da execução de ato cometido por um usuário;
I - Information Disclosure: divulgação indevida de informação;
16712855225

D - Denial of Service: negação de serviço;


E - Elevation of Privilege: elevação de privilégios indevidos por um usuário.

Esses efeitos podem produzir impactos de baixo a alto valor, dependendo do tipo
de aplicação ou sistema computacional no qual o software está executando. Podem
gerar incidentes simples (Ex: Reinstalar um aplicativo em uma máquina de uso
pessoal), bem como incidentes que impactam vidas humanas (Ex: Perda de controle
de um sistema de defesa, de transportes, médico-hospitalares, etc).

A segurança da informação em ambientes tecnológicos depende da adoção de


segurança para a aquisição e desenvolvimento de software. Ocorre que os modelos

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

de processo de software anteriores à disseminação da Internet (Ex: Cascata) foram


concebidos em um momento em que ainda não havia grande preocupação com os
problemas de segurança decorrentes da exposição das aplicações às redes abertas.

A exposição de uma aplicação à Internet aumenta enormemente as possibilidades


de ataques e exploração de vulnerabilidades nessa aplicação. Em resposta a essa
situação recente, o desenvolvimento de software tem evoluído nos últimos anos
visando incorporar de forma mais explícita o trato de questões de segurança da
informação durante seu desenvolvimento.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

RISCOS DE SEGURANÇA EM APLICAÇÕES WEB

O software inseguro está debilitando nossa infraestrutura financeira, de saúde, de


defesa, de energia e outras infraestruturas críticas. À medida que nossa
infraestrutura digital fica cada vez mais complexa e interligada, a dificuldade em
obter segurança em aplicações aumenta exponencialmente. Para tal, o OWASP
listou dez riscos de segurança mais críticos em aplicações web.

Ele tem como objetivo primário a sensibilização sobre segurança em aplicações


através da identificação de alguns dos riscos mais críticos enfrentados pelas
organizações. De acordo com a especificação, atacantes podem, potencialmente,
usar vários caminhos diferentes através da sua aplicação para causar danos ao seu
negócio ou a sua organização.

É importante lembrar que cada um desses caminhos representa um risco que pode,
ou não, ser grave o suficiente para justificar a sua atenção. Às vezes, esses caminhos
são triviais para encontrar e explorar, e em outras, são extremamente difíceis. Da
mesma forma, o dano causado pode ter nenhuma consequência, ou pode acabar
com o seu negócio.

Para determinar o risco para a sua organização, você pode avaliar a probabilidade
associada a cada agente de ameaça, vetor de ataque, vulnerabilidade de segurança
e combiná-la com uma estimativa dos impactos técnico e no negócio da sua
empresa. Juntos, esses fatores determinam o risco total! O foco é na identificação
dos riscos mais graves para uma ampla gama de organizações.

RISCO DESCRIÇÃO
16712855225

As falhas de Injeção, tais como Injeção de SQL (SQL Injection), de


Sistema Operacional e de LDAP, ocorrem quando dados não confiáveis
são enviados para um interpretador como parte de um comando ou
Injeção consulta. Os dados manipulados pelo atacante podem iludir o
interpretador para que este execute comandos indesejados ou permita
o acesso a dados não autorizados.

As funções da aplicação relacionadas com autenticação e


Quebra de
gerenciamento de sessão geralmente são implementadas de forma
Autenticação e
incorreta, permitindo que os atacantes comprometam senhas, chaves

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Gerenciamento de e tokens de sessão ou, ainda, explorem outra falha da implementação


Sessão para assumir a identidade de outros usuários.

Falhas XSS ocorrem sempre que uma aplicação recebe dados não
confiáveis e os envia ao navegador sem validação ou filtro adequados.
XSS permite aos atacantes executarem scripts no navegador da vítima
Cross-Site
que podem “sequestrar” sessões do usuário, desfigurar sites, ou
Scripting (XSS)
redirecionar o usuário para sites maliciosos.

Uma referência insegura e direta a um objeto ocorre quando um


programador expõe uma referência à implementação interna de um
Referência objeto, como um arquivo, diretório, ou registro da base de dados. Sem
Insegura e Direta a a verificação do controle de acesso ou outra proteção, os atacantes
Objetos podem manipular estas referências para acessar dados não-
autorizados.

Uma boa segurança exige a definição de uma configuração segura e


implementada na aplicação, frameworks, servidor de aplicação,
Configuração servidor web, banco de dados e plataforma. Todas essas configurações
Incorreta de devem ser definidas, implementadas e mantidas, já que geralmente a
Segurança configuração padrão é insegura. Adicionalmente, o software deve ser
mantido atualizado.

Muitas aplicações web não protegem devidamente os dados sensíveis,


tais como cartões de crédito, IDs fiscais e credenciais de autenticação.
Os atacantes podem roubar ou modificar esses dados desprotegidos
Exposição de
16712855225

com o propósito de realizar fraudes de cartões de crédito, roubo de


Dados Sensíveis
identidade, ou outros crimes. Os dados sensíveis merecem proteção
extra como criptografia no armazenamento ou em trânsito, bem como
precauções especiais quando trafegadas pelo navegador.
A maioria das aplicações web verificam os direitos de acesso em nível
de função antes de tornar essa funcionalidade visível na interface do
Falta de
usuário. No entanto, as aplicações precisam executar as mesmas
Função para
verificações de controle de acesso no servidor quando cada função é
Controle do Nível
invocada. Se estas requisições não forem verificadas, os atacantes
de Acesso
serão capazes de forjar as requisições, com o propósito de acessar a
funcionalidade sem autorização adequada.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Um ataque CSRF força a vítima que possui uma sessão ativa em um


navegador a enviar uma requisição HTTP forjada, incluindo o cookie da
Cross-Site sessão da vítima e qualquer outra informação de autenticação incluída
Request Forgery na sessão, a uma aplicação web vulnerável. Esta falha permite ao
(CSRF) atacante forçar o navegador da vítima a criar requisições que a
aplicação vulnerável aceite como requisições legítimas realizadas pela
vítima.
Componentes, tais como bibliotecas, frameworks, e outros módulos de
software quase sempre são executados com privilégios elevados. Se
Utilização de
um componente vulnerável é explorado, um ataque pode causar sérias
Componentes
perdas de dados ou o comprometimento do servidor. As aplicações que
Vulneráveis
utilizam componentes com vulnerabilidades conhecidas podem minar
Conhecidos
as suas defesas e permitir uma gama de possíveis ataques e impactos.

Aplicações web frequentemente redirecionam e encaminham usuários


para outras páginas e sites, e usam dados não confiáveis para
Redirecionamentos
determinar as páginas de destino. Sem uma validação adequada, os
e
atacantes podem redirecionar as vítimas para sites de phishing ou
Encaminhamentos
malware, ou usar encaminhamentos para acessar páginas não
Inválidos
autorizadas.

O SQL Injection exige um pouco mais da nossa atenção! De acordo com Navathe,
em um ataque de Injeção de SQL, o atacante injeta uma entrada de cadeia de
caracteres pela aplicação, que muda ou manipula a instrução SQL para o proveito
do atacante. Em suma, eles buscam acessar maliciosamente dados sensíveis de
bancos de dados – eles podem destruir tudo!
16712855225

Ela ocorre quando o atacante consegue inserir uma série de Instruções SQL dentro
de uma consulta através da manipulação das entradas de dados e se aproveita de
vulnerabilidades para consultar tabelas do banco de dados para roubar informação
ou inserir código malicioso. Qualquer site que monte páginas com base no
conteúdo de um banco de dados (Ex: gerenciadores de conteúdo) corre esse risco.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

PRÁTICAS DE PROGRAMAÇÃO SEGURA

Galera, o que seria um software seguro? Trata-se de um software livre de


vulnerabilidades, que funciona da maneira pretendida e que não compromete a
segurança de outras propriedades requeridas do software, seu ambiente e as
informações manipuladas por ele. Braz (2008) determina cinco propriedades de um
software seguro:

 Disponibilidade: o software deve estar sempre operacional e acessível para os


usuários autorizados sempre que necessário.

 Integridade: o software deve estar sempre protegido contra modificações não


autorizadas.

 Confidencialidade: no contexto da segurança do software, confidencialidade se


aplica para o próprio software e para os dados que ele manipula.

 Responsabilização: toda ação relevante de segurança de um software-as-user1


deve ser registrada e acompanhada, com atribuição de responsabilidade.

 Não-Repúdio: a habilidade de prevenir o software-como-usuário de negar


responsabilidade sobre ações desempenhadas.

Devido ao foco inicial do desenvolvimento de software ser fundamentalmente no


atendimento aos requisitos de funcionamento que satisfazem as necessidades
evidentes e contratuais dos clientes e usuários, critérios de segurança para tornar
um software seguro muitas vezes só são realizados tardiamente, durante os testes
e validação final do software.
16712855225

Isso porque nem os clientes nem os desenvolvedores estão preparados para tratar
previamente da questão. Satisfazer necessidades de segurança em uma fase tardia
do desenvolvimento produz elevado impacto negativo sobre o projeto, resultando
muitas vezes na produção e implantação de software inseguro, que contém um
significativo número de vulnerabilidades capazes de serem exploradas por hackers.

Com a frequência crescente de ataques desferidos contra as aplicações, tornam-se


comuns os problemas de segurança em sistemas de informação na internet, como
indisponibilidade, perda de integridade, perda de confidencialidade, etc. Em função

1
Entidades de software que agem como usuário, como agentes proxies e webservices.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

dessa realidade é muito importante que os requisitos de segurança sejam


declarados desde o início de concepção do software.

O OWASP (Open Web Application Security Project) apresenta Princípios de


Segurança de Aplicativos, que podem ser considerados como coleções de
propriedades desejáveis de aplicação, comportamentos, modelos e práticas de
implementação que tentam reduzir a probabilidade de concretização de ameaças
e, caso ocorram, a minimização de impacto. Entendido?

Os princípios são primitivas arquitetonicamente neutras e independentes de


linguagem que podem ser aproveitadas dentro da maioria das metodologias de
desenvolvimento de software para projetar e construir aplicações. Eles são
importantes porque nos ajudam a tomar decisões de segurança em situações novas
com as mesmas ideias básicas.

Ao considerar cada um desses princípios, podemos derivar os requisitos de


segurança, fazer arquitetura e implementação de decisões, e identificar possíveis
deficiências nos sistemas. O mais importante a se lembrar é que, para ser útil, os
princípios devem ser avaliados, interpretados e aplicados para resolver um
problema específico.

Apesar de os princípios poderem servir como diretrizes gerais, simplesmente dizer


ao desenvolvedor de software que o software dele deve "falhar com segurança", ou
que eles devem fazer uma "defesa em profundidade" não vai significar muita coisa.
Enfim, é importante conhecer esses princípios! São apenas dez e eles são bastante
intuitivos, logo... vamos lá:

PRINCÍPIOS DE SEGURANÇA DE APLICAÇÕES


APLICAR DEFESA EM PROFUNDIDADE UTILIZAR UM MODELO DE SEGURANÇA
16712855225

POSITIVA
FALHAR COM SEGURANÇA EXECUTAR COM MENOS PRIVILÉGIOS

EVITAR SEGURANÇA POR OBSCURIDADE MANTER A SEGURANÇA SIMPLES

DETECTAR INTRUSÕES NÃO CONFIAR NA INFRAESTRUTURA

NÃO CONFIAR NOS SERVIÇOS ESTABELECER PADRÕES DE SEGURANÇA

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Podemos utilizar dois famosos modelos de processo de desenvolvimento de


software seguro apresentados a seguir:

 Security Development Lifecycle (SDL)


 Comprehensive, Lightweight Application Security Process (CLASP)

O SDL lista uma série de atividades que devem ser realizadas em cada fase do
processo. As fases são: Treinamento, Requisitos, Design, Implementação,
Verificação, Lançamento e Resposta. Ele é um processo de desenvolvimento de
software que ajuda os desenvolvedores na construção de softwares mais seguros e
na conformidade com requisitos de segurança, ao mesmo tempo que reduz custos.

Adotado pela Microsoft para o desenvolvimento de softwares que precisem resistir


a ataques mal-intencionados, o processo engloba a adição de uma série de
atividades e produtos concentrados na segurança em cada fase do processo de
desenvolvimento. Essas atividades e esses produtos incluem o desenvolvimento de
modelos de ameaças durante o design do software.

Além disso, engloba o uso de ferramentas de verificação de código de análise


estática durante a implementação e a realização de revisões de código e testes de
segurança durante um "esforço de segurança" direcionado. Antes que o software
sujeito ao SDL possa ser lançado, ele deve passar por uma revisão final de segurança
feita por uma equipe independente de seu grupo de desenvolvimento.
16712855225

Por fim, cabe salientar que o Secure Development Lifecycle (SDL) apreseta dois
documentos principais! O primeiro é simplesmente uma versão mais resumida do
segundo, que traz conceitos mais aprofundados. Não há qualquer diferença entre
eles, a não ser pela profundidade de seus conteúdos. Ferramentas e técnicas são
aplicáveis a qualquer um dos dois!

Agora é o CLASP! Trata-se de um conjunto de componentes de processo dirigido


por atividade e baseado em regras que articula práticas para construção de software
seguro, permitindo o ciclo de vida de desenvolvido do software de maneira
estruturada, com repetição e mensuração. Ele é um conjunto de pedaços de
processos que pode ser integrado a qualquer processo de desenvolvimento.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Foi projetado para ser de fácil utilização. Tem um enfoque prescritivo,


documentando as atividades que as organizações devem realizar, proporcionando
uma ampla riqueza de recursos de segurança que facilitam a implementação dessas
atividades. O CLASP traz um conjunto de vulnerabilidades e suas raízes, organizadas
em categorias divididas por temas que se referem a um grupo de vulnerabilidades.

Os problemas de segurança podem ser categorizados de acordo com diferentes


critérios, o principal é relacionado a origem do problema. Os tipos de problemas
(que podem ser verificados por meio de ferramentas automáticas de análise estática)
são: erros de intervalo e de tipos de dados; erros de lógica; problemas de ambiente;
erros de sincronização e timing; erros de protocolo; e malware.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

REVISÃO DE CÓDIGO

A revisão do código fonte é particularmente útil para verificar se os mecanismos de


segurança da aplicação são robustos, assim como para encontrar problemas difíceis
de identificar simplesmente examinando os resultados da aplicação. Testar a
aplicação é particularmente útil para provar que as falhas são de fato exploráveis.
Esses métodos são complementares e até redundantes em algumas áreas.

A revisão de código é provavelmente a técnica mais eficaz para identificar falhas de


segurança no início do ciclo de vida de desenvolvimento do sistema. Quando usado
em conjunto com ferramentas automatizadas e testes de penetração manuais, ela
pode aumentar significativamente a eficácia de custo de um esforço de verificação
de segurança do aplicativo.

A revisão manual de código de segurança fornece insights sobre o "risco real"


associado a um código inseguro. Este é o valor mais importante a partir de uma
abordagem manual. Um colaborador humano pode compreender o contexto de
um bug ou vulnerabilidade no código; o contexto requer compreensão humana do
que está sendo avaliado.

Com contexto apropriado, podemos fazer uma estimativa de risco grave, que
representa tanto a probabilidade de ataque quanto o impacto nos negócios de uma
violação. Categorização correta das vulnerabilidades ajuda com prioridade de
remediação e fixa as coisas certas em oposição a perder tempo, que fixa tudo. Bem,
temos uma lista de práticas de revisão de código que podem nos ajudar:

 Revise menos que 200-400 linhas por vez – mais que isso, a habilidade de
encontrar defeitos cai drasticamente;
16712855225

 Busque uma taxa de inspeção menor que 300-500 Linhas de Código por Hora –
revisar rápido não é revisar bem;

 Reserve tempo para uma revisão apropriada e lenta, mas não mais de 60-90
minutos;

 Tenha certeza de que os autores anotaram o código-fonte antes de iniciar a


revisão do código;

 Estabeleça objetivos quantificáveis para a revisão de código e capture métricas


a fim melhorar o processo de revisão;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

 Utilize checklists, pois elas melhoram substancialmente os resultados para ambos


– autores e revisores;

 Verifique se os defeitos são de fato resolvidos – pode parecer evidente, mas é


comum se enganar;

 Promova uma boa cultura de revisão de código em que defeitos encontrados


são vistos positivamente;

 Cuidado com o efeito Big Brother – em outras palavras, não fique paranoico
achando que está sendo observado pelos seus pares;

 Revise ao menos parte do código, mesmo que não possa fazer tudo, para se
beneficiar do Efeito Ego;

 Adote revisões de código leves e com auxílio de ferramentas – existem diversas


no mercado, inclusive automatizadas.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

CONTROLES E TESTES DE SEGURANÇA DE APLICAÇÕES WEB E WEBSERVICES

Vocês sabem o que é um Teste de Penetração? Trata-se de um método de avaliação


de segurança de um sistema computacional ou de uma rede ao simular um ataque.
Esse teste se concentra apenas em avaliar a segurança de uma aplicação web. O
processo envolve uma análise ativa da aplicação para cada fraqueza, falhas técnicas
ou vulnerabilidades.

Todas os problemas de segurança que são encontradas são apresentadas ao


proprietário do sistema juntamente com uma avaliação do seu impacto e muitas
vezes com uma proposta de mitigação ou uma solução técnica. Ocorre que o Teste
de Penetração nunca será uma ciência exata, em que uma lista completa de todos
os possíveis problemas que deveriam ser testados pode ser definida.

O Teste de Penetração é apenas uma técnica apropriada para testar a segurança de


aplicações web em determinadas circunstâncias. O OWASP (Open Web Application
Security Project) é uma comunidade online dedicada à segurança de aplicações. Ele
divide o conjunto de testes ativos em nove categorias para um total de 66 controles
– vejamos essas categorias:

CATEGORIAS DE TESTES
TESTE DE GERENCIAMENTO DE TESTE DE LÓGICA DE NEGÓCIO;
CONFIGURAÇÃO;
TESTE DE AUTENTICAÇÃO; TESTE DE AUTORIZAÇÃO;

TESTE DE GERENCIAMENTO DE SESSÃO; TESTE DE VALIDAÇÃO DE DADOS;

TESTE DE NEGAÇÃO DE SERVIÇOS; 16712855225


TESTE DE SERVIÇOS WEB;

TESTE DE AJAX; -

Pessoal, não vale a pena estudar os controles! Essa disciplina já cai pouquíssimo –
custo-benefício é baixíssimo! A Categoria de Gerenciamento de Sessão, por
exemplo, possui controles como: Teste de Cookies e Atributos; Teste de Variáveis
de Sessão Expostas; Testes de Esquema de Gerenciamento de Sessão; Testes de
Fixação de Sessão; entre outros.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

As vulnerabilidades de web services são similares a outras vulnerabilidades (Ex: SQL


Injection, Divulgação Indevida de Informação e Vazamento). O primeiro passo para
executar um Teste de Web Service é determinar os pontos de entrada e o esquema
de comunicação – ambos descritos WSDL. Uma vez identificados, testam-se os
pontos de entrada.

A seguir, testa-se se os arquivos XML são bem-formados e buscam-se ataques em


nível de conteúdo. Acontecem, então, os testes de parâmetros do Método GET e
do REST! Em suma, é isso! Encontrei pouquíssimas questões sobre esse tema. Se
alguém encontrar alguma outra questão em concurso, por favor me envie para que
eu possa comentar e inserir na aula :-)

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE - 2014 – TC/DF – Analista de Sistemas) SQL Injection é uma técnica usada
para executar um código no espaço de outro programa, o que, normalmente,
força o programa a carregar a DLL (Dynamic-Link Library), que assume o espaço
de memória do programa em execução.

Comentários:

O SQL Injection exige um pouco mais da nossa atenção! De acordo com Navathe,
em um ataque de Injeção de SQL, o atacante injeta uma entrada de cadeia de
caracteres pela aplicação, que muda ou manipula a instrução SQL para o proveito do
atacante. Em suma, eles buscam acessar maliciosamente dados sensíveis de bancos
de dados – eles podem destruir tudo!

Ela ocorre quando o atacante consegue inserir uma série de Instruções SQL dentro de
uma consulta através da manipulação das entradas de dados e se aproveita de
vulnerabilidades para consultar tabelas do banco de dados para roubar informação
ou inserir código malicioso. Qualquer site que monte páginas com base no conteúdo
de um banco de dados (Ex: gerenciadores de conteúdo) corre esse risco.

Conforme vimos em aula, não é nada disso! Não há nenhuma relação com DLL!

16712855225
Gabarito: E

(CESPE - 2013 – CNJ – Analista de Sistemas) O SDL é um processo de


desenvolvimento de software seguro, que envolve a adição de produtos e
atividades, como o desenvolvimento de modelos de ameaças.

Comentários:

Adotado pela Microsoft para o desenvolvimento de softwares que precisem resistir a


ataques mal-intencionados, o processo engloba a adição de uma série de atividades
e produtos concentrados na segurança em cada fase do processo de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

desenvolvimento. Essas atividades e esses produtos incluem o desenvolvimento de


modelos de ameaças durante o design do software.

Conforme vimos em aula, a questão está perfeita! O SDL afirma:

“As part of the design phase of the SDL, threat modeling allows software architects to identify and mitigate
potential security issues early, when they are relatively easy and cost-effective to resolve. Therefore, it helps
reduce the total cost of development.”

Gabarito: C

(FCC - 2 – TJ/PE – Analista de Sistemas) São práticas eficientes para revisão


de código, EXCETO:

a) Revisar código por, no máximo, 90 minutos por vez.


b) Revisar até 500 linhas de código por hora.
c) Adotar revisões de código com auxílio de ferramentas.
d) Revisar até 1000 linhas de código por vez.
e) Decidir antecipadamente os objetivos do processo de revisão de código e
como medir sua efetividade.

Comentários:
Com contexto apropriado, podemos fazer uma estimativa de risco grave, que
representa tanto a probabilidade de ataque quanto o impacto nos negócios de uma
violação. Categorização correta das vulnerabilidades ajuda com prioridade de
remediação e fixa as coisas certas em oposição a perder tempo, que fixa tudo. Bem,
temos uma lista de práticas de revisão de código que podem nos ajudar:

 Revise menos que 200-400 linhas por vez – mais que isso, a habilidade de
16712855225

encontrar defeitos cai drasticamente;

Conforme vimos em aula, é no máximo 400 linhas de código por vez e, não, 1000!

Gabarito: D

(CESPE - – PCF – Analista de Sistemas) No que se refere a processos de


desenvolvimento seguro de aplicações, julgue o item subsecutivo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10
O processo SDL (Secure Development Lifecycle) tem sido adotado pela Microsoft no desenvolvimento de
alguns de seus produtos, como Windows Server, SQL Server e Exchange Server, reduzindo o número de
vulnerabilidades encontradas nesses produtos em versões desenvolvidas sem o uso do SDL.

Uma das características desse processo é que ele provê dois roteiros, sendo um
com foco no suporte a desenvolvimento de novos sistemas com base em um
processo iterativo, e outro que enfoca a manutenção de sistemas já existentes.

Comentários:

Por fim, cabe salientar que o Secure Development Lifecycle (SDL) apreseta dois
documentos principais! O primeiro é simplesmente uma versão mais resumida do
segundo, que traz conceitos mais aprofundados. Não há qualquer diferença entre
eles, a não ser pela profundidade de seus conteúdos. Ferramentas e técnicas são
aplicáveis a qualquer um dos dois!

Conforme vimos em aula, não existe essa diferença de foco – ambos falam as
mesmas coisas, porém com profundidades distintas.

Gabarito: E

(CESPE - – PCF – Analista de Sistemas) O CLASP (Comprehensive,


Lightweight Application Security Process) fornece uma taxonomia de
vulnerabilidades que podem ocorrer no código-fonte e que podem ser
verificadas com o uso de ferramentas automatizadas para análise estática de
código.

Comentários:
16712855225

Os problemas de segurança podem ser categorizados de acordo com diferentes


critérios, o principal é relacionado a origem do problema. Os tipos de problemas (que
podem ser verificados por meio de ferramentas automáticas de análise estática) são:
erros de intervalo e de tipos de dados; erros de lógica; problemas de ambiente; erros
de sincronização e timing; erros de protocolo; malware.

Conforme vimos em aula, ele possui uma taxonomia de vulnerabilidades que podem
ocorrer em um código fonte – são seis tipos de problemas identificados.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(FCC - – TJ/PE – Analista de Sistemas) Em relação a princípios de segurança


de aplicações, conforme definição da OWASP, é INCORRETO afirmar:

a) São coleções desejáveis de propriedades de aplicações, comportamentos,


arquiteturas e práticas de implementação.

b) Para que sejam úteis, os princípios devem ser avaliados, interpretados e


aplicados para resolver um problema específico.

c) Visam a garantir a segurança de aplicações e programas, utilizando técnicas


para proteção do sigilo do código fonte.

d) É um conjunto de tarefas que tenta reduzir a possibilidade de ocorrência de


ataques e o impacto destes ataques, caso ocorram.

e) Utilizam primitivas de arquitetura neutra e de linguagem independente, que


podem ser utilizadas na maioria dos métodos de desenvolvimento de software.

Comentários:

O OWASP (Open Web Application Security Project) apresenta Princípios de Segurança


de Aplicativos, que podem ser considerados como coleções de propriedades desejáveis
de aplicação, comportamentos, modelos e práticas de implementação que tentam
reduzir a probabilidade de concretização de ameaças e, caso ocorram, a minimização
de impacto. Entendido?

(a) Conforme vimos em aula, o item está perfeito!

Ao considerar cada um desses princípios, podemos derivar os requisitos de


16712855225

segurança, fazer arquitetura e implementação de decisões, e identificar possíveis


deficiências nos sistemas. O mais importante a se lembrar é que, para ser útil, os
princípios devem ser avaliados, interpretados e aplicados para resolver um problema
específico.

(b) Conforme vimos em aula, o item está perfeito!

(c) Proteção do sigilo? Do código-fonte? Não faz o menor sentido!

O OWASP (Open Web Application Security Project) apresenta Princípios de Segurança


de Aplicativos, que podem ser considerados como coleções de propriedades desejáveis

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

de aplicação, comportamentos, modelos e práticas de implementação que tentam


reduzir a probabilidade de concretização de ameaças e, caso ocorram, a minimização
de impacto. Entendido?

(d) Conforme vimos em aula, o item está perfeito!

Os princípios são primitivas arquitetonicamente neutras e independentes de


linguagem que podem ser aproveitadas dentro da maioria das metodologias de
desenvolvimento de software para projetar e construir aplicações. Eles são
importantes porque nos ajudam a tomar decisões de segurança em situações novas
com as mesmas ideias básicas.

(e) Conforme vimos em aula, o item está perfeito!

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

COMPILADORES

Vamos ser bem objetivos? Compiladores são programas de computador! Isso


mesmo, você pode baixar um compilador aí para a sua máquina. Só isso? Não, ele
é um programa de computador capaz de traduzir um código-fonte escrito em uma
linguagem de programação de alto nível para uma linguagem de programação de
baixo nível (linguagem de montagem). Vamos ver algumas definições abaixo:

CÓDIGO-FONTE (SOURCE CODE)

O código-fonte é um conjunto de palavras ou símbolos escritos de forma ordenada,


contendo instruções em uma das linguagens de programação existentes, de
maneira lógica. Atualmente, com a diversificação de linguagens, o código pode ser
escrito de forma totalmente modular, podendo um mesmo conjunto de códigos ser
compartilhado por diversos programas e, até mesmo, linguagens.

Ex: helloWorld.c – código fonte escrito na Linguagem de Programação C;

PRÉ-PROCESSADOR (PREPROCESSOR)

O pré-processador é um programa que recebe um texto e efetua conversões


léxicas, tais como substituição de macros, inclusão condicional, inclusão de ficheiros
e exclusão de comentários. É baseado em Diretivas de Compilação (Ex: #define,
#include, etc), que são comandos que não são compilados, dirigidos ao pré-
processador e executado pelo compilador antes do processo de compilação em si.

Normalmente ele é responsável por mudanças no código fonte destinadas de


16712855225

acordo com decisões tomadas em tempo de compilação. Por exemplo, um


programa em C permite instruções condicionais para o pré-processador que podem
incluir ou não parte do código caso uma assertiva lógica seja verdadeira ou falsa,
ou simplesmente um termo esteja definido ou não.

O uso de pré-processadores tem vindo a ser cada vez menos comum à medida que
as linguagens recentes fornecem características mais abstratas em vez de
características orientadas lexicalmente. Há também linguagens recentes que tem
pouca ou nenhuma funcionalidade, como por exemplo a linguagem Java, que não
possui um pré-processador.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

COMPILADOR (COMPILER)

O compilador é um programa de computador que lê um código-fonte escrito em


uma linguagem de alto nível e o traduz para uma linguagem de baixo nível.
processo de compilação é dividido em duas fases: Análise ou Front-End (Análise
Léxica, Sintática, Semântica Geração de Código Intermediário) e Síntese ou Back-
end timização de Código Intermediário e Geração de Código Final).

 Análise Léxica: nesta fase, um analisador léxico (ou scanner) lê o código-fonte,


caractere por caractere e divide o código escrito em símbolos léxicos chamados
tokens, guardados em uma tabela de símbolos. Ele descarta comentários,
espaços em branco, marcas de formatação e produz uma sequência de palavras-
chaves, pontuações e nomes. Terminada essa fase, vamos para a próxima!

Ex: Eu vou passar nesse concurso! Os tokens obtidos foram: “Eu”; “vou”; “passar”;
“nesse”; “concurso”; “!”.

 Análise Sintática: também conhecida como Análise Gramatical ou Parsing, analisa


uma sequência de entrada para determinar sua estrutura gramatical, segundo
uma determinada gramática formal. Ela pega os tokens resultantes do processo
de análise léxica e joga em uma estrutura hierárquica, como uma árvore. Assim
como no português, verifica-se a estrutura do texto2.

Ex: string nome = “Diego’; ora, se eu declarar um valor com aspas-duplas, preciso
fechá-lo com aspas duplas e, não, simples.

 Análise Semântica: nesta fase, verificam-se erros semânticos, i.e., erros de


sentido. Entre as principais atividades, estão a checagem de tipos, verificação de
fluxos de controle e verificação de unicidade de declaração de variáveis. Essa
16712855225

fase também é encarregada de analisar a utilização dos identificadores e de ligar


cada uma delas a sua declaração.

Ex: int x = “Diego”; ora, eu não posso declarar uma variável do tipo inteiro e
atribuir um valor textual.

 Geração de Código Intermediário nesta fase, ocorre a transformação da árvore


sintática em uma representação intermediária do código fonte. Esta linguagem
intermediária é mais próxima da linguagem objeto do que o código fonte, mas
2
Uma árvore de análise sintática de uma gramática de atributos é a árvore de análise sintática baseada em sua
gramática BNF associada, com um conjunto possivelmente vazio de valores de atributos anexado a cada nó.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

ainda permite uma manipulação mais fácil do que se o código Assembly ou


código de máquina fosse utilizado.

 Otimização de Código Intermediário nesta fase, examina-se o código


intermediário produzido durante a fase anterior com objetivo de produzir,
através de algumas técnicas, um código que execute com bastante eficiência o
programa. Utilizam-se técnicas que detectam padrões dentro do código
produzido e os substitui por códigos mais eficientes. Simples assim.

 Geração de Código Final chegamos à última fase do processo de compilação


com a geração do código de montagem (em sentido estrito) ou em um código-
objeto (em sentido amplo), porque – na prática - muitos compiladores já
realizam a montagem. Um código-objeto não é imediatamente executável, visto
que ainda há código binário a ser incluído no programa, tais como bibliotecas3.

MONTADOR (ASSEMBLER)

Existe uma maneira de efetuar tradução de forma mais rápida e simples, por meio
de um Montador. O processo de Montagem traduz um programa escrito em
linguagem de montagem (Ex: Assembly) em um programa equivalente em
linguagem de máquina (0 e 1). Galera, não confundam Assembler, que é um
montador, com Assembly, que é uma linguagem de programação de baixo nível.

 Cross-assembler: é executado em um computador com um processador


diferente daquele para o qual se está gerando código.

 Macro-assembler: dispõe de recursos de macro, efetuando a expansão do


código cada vez que uma macro for encontrada.
16712855225

 Micro-assembler: permite a escrita de micro-instruções, definindo-se assim um


conjunto de instruções de um processador microprogramável.

 Meta-assembler: é um assembler que pode montar programas para vários


processadores diferentes.

 Assembler de um passo: varre o programa-fonte apenas uma vez, gerando o


código (deve existir alguma forma de se revolver as referências adiante).

3
Essa é a única fase da síntese que é obrigatória; as duas anteriores são opcionais. Além disso, lembrem-se que
o código-objeto é muito parecido com um código de montagem, porém com referências utilizadas pelo Ligador.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

 Assembler de dois passo varre o programa-fonte duas vezes para gerar o


código, podendo assim resolver automaticamente as referências adiante.

A Linguagem de Montagem é traduzida para uma Linguagem de Máquina. Ambas


são dependentes do hardware! Como assim, professor? Assembly é uma linguagem
de programação, todavia cada família de processadores possui sua própria
linguagem de montagem particular (Ex: INTEL, x86, MIPS, ARM, SPARC). Por essa
razão, não se trata de uma linguagem portável.

16712855225

A Montagem é um tipo de tradução, assim como a compilação ou a interpretação.


Logo, ela pode existir por si só sem que haja compilação alguma. Eu vos-pergunto:
um compilador traduz um código-fonte em um código-objeto? Depende! Regra
geral, ele traduz um código-fonte em um código de montagem, que depois vai à
um montador para se transformar em código-objeto.

Em outras palavras, alguns compiladores produzem um código de montagem, que


é passado a um montador para processamento posterior. No entanto, alguns
compiladores realizam a tarefa do montador, produzindo um código de máquina

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

relocável, que pode ser passado diretamente para um ligador e/ou carregador, i.e.,
já entregam um código-objeto!

LIGADOR (LINKER OU LINK-EDITOR)

Ligadores são programas que recebem como entrada um conjunto de arquivos-


objeto, bibliotecas padrão, arquivos de controle, parâmetros diversos e bibliotecas
compartilhadas e os unem em um módulo, denominado Módulo de Carga, que é
posteriormente carregado em memória (eventualmente, pode ser mais de um
módulo). Ele é responsável por resolver referências internas e externas.

CARREGADOR (LOADER)

São programas que transferem o código de máquina de um módulo objeto para a


memória e encaminham o início de sua execução. Eles recebem o módulo de carga
como entrada, transferem seu código para a memória e realizam apenas os ajustes
de realocação de acordo com o endereço base de memória. Um programa pode
ser composto por partes independentemente carregadas e realocadas.

Existem dois tipos básicos de carregador: carregadores binários e realocáveis. Os


carregadores binários (ou carregadores absolutos) são mais simples e apenas
copiam o arquivo em formato binário para a memória, de tal forma que o arquivo
executável é simplesmente uma imagem binária do programa em execução na
memória.

Um programa que usa carregadores absolutos é associado com localizações


específicas de memória, e por isso deve sempre ser carregado na mesma área de
memória para serem executados corretamente (Ex: programas com extensão
.COM). O carregador realocável pode ser colocado em qualquer local da memória
16712855225

para execução.

O programa executável realocável é semelhante ao programa executável absoluto,


exceto que os endereços são todos relativos a zero (não são absolutos) e a
informação de quais endereços relativos devem ser alterados quando o programa
for colocado em execução estão junto com o arquivo executável (Ex: programas
com extensão .EXE)4.

BIBLIOTECAS

4
Atualmente também existem Carregadores que fazem a ligação de partes do programa em tempo de execução.
Estes são chamados Carregadores-Ligadores.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Bibliotecas são uma coleção de funções e definições utilizadas no desenvolvimento


de software para algum propósito específico. Elas provêm serviços a programas
independentes, o que permite o compartilhamento e a alteração de código e dados
de forma modular. O Ligador é o responsável, em geral, por fazer referências entre
os executáveis e as bibliotecas.

É muito comum, ao precisar resolver determinado problema, utilizar-se de uma


biblioteca escrita por outro programador. Isso pode ser vantajoso, pois reduz a
necessidade de criar códigos, mas também pode ser perigoso, visto que pode-se
optar por uma biblioteca mal implementada (ou até mesmo maliciosa) e acabar
tendo grandes dores de cabeça.

Existem basicamente dois tipos de bibliotecas, as bibliotecas estáticas e as


bibliotecas dinâmicas (ou compartilhadas). Ao compilar um programa que chama
uma biblioteca estática, todo o código da biblioteca é copiado e inserido dentro do
binário final. O termo "estática" se deve ao fato da linguagem se tornar uma parte
estática do binário, não podendo ser compartilhada por outros programas.

Dessa forma, mesmo quando a biblioteca presente no seu sistema mude, seja
removida ou corrompida, o programa continuará funcionando. Porém além do seu
binário final ocupar mais espaço em disco e memória (já que ele inclui a biblioteca
estática), o seu programa não poderá usufruir de qualquer otimização que venha a
ocorrer nesta biblioteca, a não ser que ele seja recompilado/reinstalado.

Ao contrário das bibliotecas estáticas, as bibliotecas dinâmicas ou compartilhadas


não são inseridas em sua totalidade, elas são apenas referenciadas no binário final.
O termo “compartilhada” expressa exatamente a característica de um ou mais
programas poderem utilizar a mesma biblioteca, ocupando assim menos espaço em
16712855225

disco e na memória.

Além disso, a característica dinâmica da biblioteca compartilhada confere ao seu


programa a possibilidade de usufruir de atualizações nas bibliotecas sem a
necessidade de uma nova compilação/instalação. Entretanto pode acontecer de o
programa não executar corretamente, seja por não encontrar a biblioteca ou (após
uma atualização) pela biblioteca não ser mais compatível com seu programa.

O último ponto negativo da biblioteca compartilhada é que, devido a seu tempo de


carregamento, é adicionada uma pequena latência nas chamadas a esta biblioteca,
consequentemente seu programa será ligeiramente mais lento que o mesmo

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

utilizando bibliotecas estáticas. No Windows, temos as .DLL (Dynamic-Link Libraries)


e no Unix, temos as .LIB.

PROCESSO GENÉRICO DE COMPILAÇÃO

Um programador escreve módulos de código-fonte em uma linguagem de


programação de alto nível (ex: C). Esse código-fonte passa por um pré-processador
que manipula diretivas, macros, comentários, etc. Começa, então, de fato o
processo de compilação por meio de uma análise léxica (tokenização e tabela de
16712855225

símbolos), seguida de uma análise sintática (parsing e estrutura de árvore).

Avança-se à análise semântica (checagem de tipos e verificação de variáveis), depois


à geração do código intermediário, sua otimização e, por fim, a geração do código
final, que em geral é um programa em linguagem de montagem (Assembly). Porém,
agora, nós temos diversos módulos em linguagem de programação de baixo nível,
que os computadores ainda não conseguem entender.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Precisamos, então, do Montador5! Ele traduzirá cada modulo da linguagem de


montagem para um código-objeto em linguagem de máquina (0 e 1), que ainda
não pode ser executado6. O Ligador combinará todos esses módulos-objeto em um
módulo de carga, com diversas rotinas de bibliotecas para resolver as referências
internas e externas.

Por fim, o carregador coloca o código de máquina nos locais apropriados da


memória para ser executado pelo processador. Para agilizar o processo de
tradução, algumas etapas são puladas ou combinadas. Alguns compiladores
produzem módulos-objeto diretamente, e alguns sistemas utilizam Carregadores-
Ligadores, que realizam as duas últimas etapas.

16712855225

5
Como já foi dito anteriormente, alguns compiladores fazem também o papel de montador e já entregam um
código-objeto.
6
O arquivo-objeto é uma combinação de instruções de linguagem de máquina, dados e informações necessárias
para colocar as instruções corretamente na memória.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

INTERPRETADORES

Interpretadores também são programas de computador capazes de traduzir um


código-fonte escrito em uma linguagem de programação de alto nível para um
código executável. Em geral, pode ser implementado de duas formas: leitura,
tradução e execução do código-objeto linha a linha ou tradução do código-fonte
integralmente e posterior execução.

Comparando com o processo de compilação, os interpretadores realizam somente


a fase de análise, mas não de síntese. Eles realizam a tradução de forma mais veloz
que os compiladores; no entanto, programas compilados são executados mais
rapidamente que programas interpretados. Correções e alterações são mais rápidas
de serem realizadas.

Além disso, o código não precisa ser compilado para serem executados e
consomem menos memória do que um compilador. Por outro lado, é necessário
ler o código-fonte original toda vez que se quiser executar o programa. Exemplos
comuns de linguagens de programação interpretadas são Basic, Prolog e Python,
além do Java, que é uma linguagem híbrida: compilada e interpretada.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE - – DATAPREV - Analista de Sistemas) Uma diferença fundamental


entre um compilador e um montador é que o compilador gera um arquivo
executável a partir de um arquivo texto com o programa, enquanto o montador
executa diretamente a descrição assembler, sem gerar arquivo na saída.

Comentários:

Voltemos à teoria:

16712855225

Vejam a figura: um compilador não gera um executável por si só; ademais, um


montador gera um arquivo de saída, sim – o código-objeto!

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE - – DATAPREV - Analista de Sistemas) O compilador é parte


integrante do kernel de sistemas operacionais.

Comentários:

Não, isso não faz sentido! Compiladores são softwares comuns.

Gabarito: E

(CESPE - – ANATEL - Analista de Sistemas) A compilação é o processo de


análise de um programa escrito em linguagem de alto nível, dominando
programa-fonte, e sua conversão em um programa equivalente, escrito em
linguagem binária de máquina, denominado programa-objeto.

Comentários:

Voltemos à teoria:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Observem que um compilador sempre parte de um código-fonte e pode gerar um


código assembly ou gerar um código-objeto binário diretamente.

Gabarito: C

(CESPE - 2011 – ECT - Analista de Sistemas) Instruções em linguagem de máquina


são apresentadas na forma de padrões de bits utilizados para representar as
operações internas ao computador. A linguagem de montagem constitui uma
versão da linguagem de máquina; cada instrução é representada por uma cadeia
de texto que descreve o que a instrução faz. Nesse processo, o montador é o
elemento que converte instruções em linguagem de montagem para linguagem
de máquina.

Comentários:

Perfeito, é exatamente isso! Transforma linguagem de montagem em linguagem de


máquina.

Gabarito: C

(CESPE - 7 – TCU - Analista de Sistemas) Uma das principais tarefas do


ligador, programa responsável por unir módulos-objeto em um único módulo,
denominado módulo de carga, é resolver referências internas e externas.

Comentários:

Essa questão foi anulada! O item sugere que o arquivo de saída do Ligador seja um
módulo pronto a ser executado, e, em algumas situações, isso não ocorre.
16712855225

Gabarito: X

(CESPE - 2007 – TCU - Analista de Sistemas) Um interpretador pode ser


considerado como um programa que lê um conjunto de instruções e as executa
passo a passo. Programas interpretados são, em geral, menores e mais
facilmente mantidos, embora sejam mais lentos que os programas compilados.

Comentários:

Perfeito, é exatamente isso!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Gabarito: C

(CESPE - 2007 – TCU - Analista de Sistemas) A análise semântica — responsável


por verificar se a estrutura gramatical do programa está correta, ou seja, se essa
estrutura foi formada de acordo com as regras gramaticais da linguagem — é
uma das tarefas realizadas pelo compilador.

Comentários:

Não, quem verifica estrutura gramatical é a Análise Sintática!

Gabarito: E

(CESPE - 2007 – TSE - Analista de Sistemas – A) Um programa pode ser


composto por partes independentemente carregadas e realocadas. Um ligador
pode ser usado para resolver as referências aos símbolos externos às partes e
para produzir um código executável.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

(CESPE - 2007 – TSE - Analista de Sistemas – B) Um carregador transfere para a


memória códigos a serem executados. Se for transferido um código objeto, tem
que ser armazenado nos endereços definidos quando foi gerado, pois um
código objeto não pode ser realocado.
16712855225

Comentários:

Não! Um código-objeto pode ser realocado por meio da utilização de carregadores


realocáveis, i.e., pode alocar o programa em partes não-fixas da memória.

Gabarito: E

10. (CESPE - 2007 – TSE - Analista de Sistemas – C Para gerar um código objeto,
um compilador precisa fazer a análise sintática e semântica de um programa.
Para isso ser possível, a semântica da linguagem, mas não a sintaxe, é descrita
na notação Backus-Naur Form (BNF).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Comentários:

Não, a Notação BNF é utilizada para descrever a Sintaxe!

Gabarito: E

11. (CESPE - 2007 – TSE - Analista de Sistemas – D Os interpretadores não analisam


sintaticamente os códigos fonte uma vez que os traduzem para um formato
interno. Por isso, um interpretador traduz um código em menos tempo que um
compilador.

Comentários:

Os interpretadores realizam tradução mais rápida que compiladores; no entanto,


programas compilados são executados mais rapidamente que programas
interpretados. O item está incorreto porque interpretadores analisam sintaticamente
os códigos fontes (eles realizam toda a fase de análise, mas não de síntese).

Gabarito: E

12. (CESPE - – FUB - Analista de Sistemas) O compilador pode ser visto como
um tradutor, uma vez que o mesmo transforma um programa de linguagem de
alto nível para linguagem de baixo nível.

Comentários:

Perfeito, é exatamente isso!


16712855225

Gabarito: C

13. (CESPE - – TRT/5 - Analista de Sistemas) As definições de variáveis no


código de um programa não interferem na geração de um código-objeto
porque as variáveis não possuem relação direta com a entrada e a saída de
dados em um programa.

Comentários:

Como não? Claro que interferem! Entradas e Saídas de dados geralmente são
armazenadas em uma variável.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Gabarito: E

14. (CESPE - 2008 – ANAC - Analista de Sistemas) O compilador, em contraste com


o montador, opera sobre uma linguagem de alto nível, enquanto o montador
opera sobre uma linguagem de montagem.

Comentários:

Perfeito, é exatamente isso! Compilador opera sobre uma linguagem de alto nível
(entre outras) para traduzir para uma linguagem de máquina, já o Montador opera
sobre uma linguagem de montagem (Assembly) para traduzir também para uma
linguagem de máquina.

Gabarito: C

15. (CESPE - – ANAC - Analista de Sistemas) A criação da tabela de símbolos


constitui tarefa realizada pelo ligador.

Comentários:

Não, a tabela de símbolos é criada por compiladores durante a Análise Léxica.

Gabarito: E

16. (CESPE - – FINEP - Analista de Sistemas – A Um código escrito em


linguagem de máquina (Assembly) deve ser compilado e ligado antes de ser
executado.
16712855225

Comentários:

Assembly é uma linguagem de montagem e, não, de máquina. Além disso, ela não
é compilada, mas montada.

Gabarito: E

17. (CESPE - – FINEP - Analista de Sistemas – B) A análise semântica é uma


tarefa normalmente realizada pelo link-editor.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Não! Link-Editor realiza a ligação; compiladores/interpretadores realizam a análise


semântica.

Gabarito: E

18. (CESPE - – FINEP - Analista de Sistemas – C) A otimização de código, feita


durante a fase de análise, é uma das tarefas do compilador.

Comentários:

Não! De fato, a otimização de código é uma das tarefas do compilador. No entanto,


ela é realizada na fase de síntese e, não, de análise.

Gabarito: E

19. (CESPE - – FINEP - Analista de Sistemas – D) Um interpretador é classificado


como um tradutor, uma vez que analisa e executa o código. O compilador, por
realizar análise e síntese do código, não é considerado um tradutor.

Comentários:

Não, ambos são tradutores.

Gabarito: E

(CESPE - – FINEP - Analista de Sistemas – E) A construção da tabela de


símbolos é atividade que pode ser iniciada durante a análise léxica.
16712855225

Comentários:

Perfeito, é exatamente isso!

Gabarito: C

21. (CESPE - 2010 – INMETRO - Analista de Sistemas – B) Todo compilador de


linguagem de programação de alto nível tem a responsabilidade de analisar o
código fonte até a geração de código executável.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

A geração do código executável é feita na síntese, portanto ele tem a


responsabilidade de analisar o código-fonte até antes da geração do código
intermediário.

Gabarito: E

(CESPE - 2010 – METRO - Analista de Sistemas – C Carregadores são


programas usados exclusivamente por linguagens de programação de alto nível,
com o objetivo de transferir um módulo de carga para a memória.

Comentários:

Não, eles não são usados exclusivamente por linguagens de programação de alto
nível.

Gabarito: E

(CESPE - 2010 – INMETRO - Analista de Sistemas – D) A declaração de variável


“int 7g;” em um programa escrito na linguagem Java, leva a um erro de
compilação detectado durante a análise sintática.

Comentários:

Não, o erro é detectado na Análise Léxica. Lembrm-se que na Análise Léxica que se
lê o código-fonte, caractere por caractere, e divide o código escrito em símbolos
léxicos chamados tokens, guardados em uma tabela de símbolos. Quando começar
a compilação e for realizada a análise léxica vai separar “int” e “7g”, mas não existe
“7g”. No entanto, esse token não pode existir, uma variável não pode começar com
16712855225

número em Java, logo o compilador indicará um erro.

Gabarito: E

24. (CESPE - 2010 – INMETRO - Analista de Sistemas – E Em programas que usam


funções disponíveis em bibliotecas, as referências a estas funções serão
resolvidas pelo ligador. No caso de bibliotecas estáticas, o código objeto das
funções é integrado ao módulo executável durante o processo de ligação.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Perfeito! Executáveis e Bibliotecas fazem referências mútuas conhecidas como


ligações, tarefa tipicamente realizada por um ligador. Lembrando que Bibliotecas
Dinâmicas são aquelas que podem ser compartilhadas com vários programas e
Bibliotecas Estáticas são aquelas que podem ser ligadas somente a um programa
individualmente.

Gabarito: C

(CESPE - 2010 – INMETRO - Analista de Sistemas) A análise léxica/sintática de


uma linguagem que tem palavras reservadas tende a ser mais complexa que a
de linguagens que têm apenas palavras-chave usadas também como
identificadores.

Comentários:

Não, isso não interfere na complexidade da análise léxica/sintática.

Gabarito: E

(CESPE - 2010 – TRE/MT - Analista de Sistemas) Durante a compilação de um


código-fonte, a fase do compilador que é responsável por produzir uma
sequência de tokens é a:

a) análise léxica.
b) análise semântica.
c) análise sintática.
d) geração de código executável.
e) verificação de tipos.
16712855225

Comentários:

A tokenização ocorre na Análise Léxica!

Gabarito: A

27. (CESPE - 2010 – TRE/MT - Analista de Sistemas – A Compiladores são projetados


para um tipo específico de hardware e de sistema operacional.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Não, compiladores não dependem em nada do hardware.

Gabarito: E

(CESPE - 2010 – TRE/MT - Analista de Sistemas – B A interpretação nada mais é


do que uma compilação cruzada.

Comentários:

A compilação cruzada é aquela capaz de produzir código executável em uma


plataforma diferente da qual o compilador está sendo executado. Interpretadores
não podem ser definidos como uma compilação cruzada.

Gabarito: E

(CESPE - 1 – FUB - Analista de Sistemas) Na programação empregando uma


linguagem de alto nível, a utilização de um compilador implica o uso de um
ligador e de um carregador para a correta execução do programa; por outro
lado, a utilização de um interpretador, que simula a existência de um
processador cujas instruções são aquelas da linguagem de alto nível empregada,
torna desnecessárias as etapas de ligação e carga.

Comentários:

Perfeito, é exatamente isso!

Gabarito: C
16712855225

(CESPE - 2011 – TJ/ES - Analista de Sistemas) Em programa escrito em linguagem


de alto nível e traduzido por compilador, alguns comandos que fazem parte
desse código são instruções da linguagem de programação, enquanto outros
comandos são instruções típicas do compilador denominadas diretivas.

Comentários:

Perfeito. Lembram-se das diretivas de compilação? Elas não são compiladas, são
pré-processadas antes do processo de compilação em si.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

31. (CESPE - 2011 – TJ/ES - Analista de Sistemas) Durante a execução de um


programa que utiliza funções em uma biblioteca dinâmica, esta deve ser
carregada em memória e ligada ao processo em tempo de execução.

Comentários:

Perfeito, bibliotecas dinâmicas são ligadas em tempo de execução.

Gabarito: C

(CESPE - 2011 – TRE/ES - Analista de Sistemas) O link-editor tem a função de


vincular os dados de um programa aos programas de sistema e a outros
programas de usuário.

Comentários:

Perfeito, é exatamente isso!

Gabari : C

(CESPE - 2010 – TRF/4 - Analista de Sistemas - A Interpretadores são programas


que convertem códigos escritos em linguagem de alto nível para programas em
linguagem de máquina.

Comentários:

Na verdade, esse é o compilador! Interpretadores convertem em código executável.


16712855225

Gabarito: E

34. (CESPE - 2010 – TRF/4 - Analista de Sistemas - B Linguagens de alto nível


cumprem tarefas mais substanciais com um número menor de comandos, mas
exigem programas tradutores denominados compiladores para converter
programas em linguagem de alto nível para linguagem de máquina.

Comentários:

Perfeito! Linguagens de alto nível, em geral, necessita de menos comandos para


realizar uma mesma tarefa que uma linguagem de baixo nível. Além disso, para

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

converter programas em linguagens de alto nível para linguagem de máquina, é


necessário um compilador.

Gabarito: C

(CESPE - 2010 – TRF/4 - Analista de Sistemas - C Um computador pode entender


qualquer linguagem de máquina, pois a linguagem de máquina não é definida
pelo projeto de hardware do computador.

Comentários:

Não! A Linguagem de Montagem é traduzida para uma Linguagem de Máquina (0


e 1) específica de cada processador. Apesar de ser um código binário, há diversas
maneiras de interpretá-lo de acordo com o processador (hardware) para o qual ele
foi escrito.

Gabarito: E

(CESPE - 2010 – TRF/4 - Analista de Sistemas - D Programadores podem


escrever instruções em várias linguagens de programação e todas são
entendidas diretamente pelos computadores sem a necessidade de tradução.

Comentários:

Claro que não! Elas precisam ser traduzidas, porque computadores só entendem 0
e 1 (0V e 5V).

Gabarito: E
16712855225

37. (CESPE - 2010 – TRF/4 - Analista de Sistemas - E Softwares escritos em


linguagens de máquina são portáveis.

Comentários:

Não, eles dependem da arquitetura do processador.

Gabarito: E

(CESPE - 2010 – BASA - Analista de Sistemas) Um interpretador é um programa


que lê um código escrito em uma linguagem e o converte em um código

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

equivalente em outra linguagem. No processo de conversão, o interpretador


relata a presença de erros no código original.

Comentários:

Não, quem relata problemas é o Compilador!

Gabarito: E

(CESPE - 2010 – INMETRO - Analista de Sistemas) Um interpretador traduz um


programa descrito no nível da linguagem para o nível da máquina, enquanto o
compilador eleva a máquina ao nível da linguagem, para que o programa
execute a partir da fonte.

Comentários:

Não! Compiladores traduzem do nível da linguagem para o nível da máquina, para


que o programa execute a partir da fonte.

Gabarito: E

40. (CESPE - 2011 – ECT - Analista de Sistemas) No programa em linguagem de alto


nível, os interpretadores executam os passos definidos para cada instrução e
produzem o mesmo resultado que o do programa compilado. Entretanto, a
execução de um programa em linguagem de alto nível com o uso de
interpretadores é mais lenta que a execução de um programa compilado, uma
vez que precisa examinar cada instrução no programa-fonte, à medida que ela
ocorre, e desviar para a rotina que executa a instrução.
16712855225

Comentários:

Perfeito, essa é uma questão para decorar! Muito bem escrita e boa para sedimentar
alguns conceitos!

Gabarito: C

41. (CESPE - – TCE/AC - Analista de Sistemas - A) Os programas escritos em


linguagem de programação de alto nível precisam ser convertidos em
programas de máquina, sendo o linker um tipo de software básico que efetua
essa tradução.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Comentários:

Não! O Linker (Ligador) não efetua tradução alguma! Quem faz isso é o Compilador!

Gabarito: E

42. (CESPE - 2007 – TCU - Analista de Sistemas) Um montador é considerado um


software de sistema, responsável pela tradução de uma linguagem de alto nível
para uma linguagem de baixo nível (linguagem simbólica).

Comentários:

Não, Montadores não são softwares de sistema e não realizam a tradução de


linguagens de alto nível para uma linguagem de baixo nível. Na verdade, ele traduz
linguagens de baixo nível para linguagem de máquina.

Gabarito: E

43. (CESPE - 2008 – FUB - Analista de Sistemas) O montador realiza a tarefa de


combinar módulos objetos em um módulo de carga.

Comentários:

Não, é o Ligador que é responsável por receber como entrada os diversos módulos
e conectá-los, gerando como saída um único módulo de carga.

Gabarito: E
16712855225

44. (CESPE - – FUB - Analista de Sistemas – C Para que um programa possa


ser executado, seu código de máquina deve estar presente na memória. O
ligador é o programa do sistema responsável por transferir o código de máquina
de um módulo objeto para a memória e encaminhar o início de sua execução.

Comentário

Não! O Ligador é o responsável por interligar os diversos módulos de um programa


para gerar o programa que será posteriormente carregado para a memória. O
carregador é responsável por transferir o código de máquina de um módulo objeto
para a memória e encaminhar o início de sua execução.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Gabarito: E

45. (CESPE - – DETRAN - Analista de Sistemas - D) O termo linguagem de


máquina é usado para denominar linguagens do tipo assembler ou C++.

Comentários:

Não, Linguagem de Máquina é código binário (0 e 1). Assembler não é linguagem,


é um programa chamado Montador. Assembly é uma linguagem de montagem e
C++ é uma linguagem de alto nível orientada a objetos.

Gabarito: E

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(FGV – 2014 – SUSAM – Analista de Sistemas) Programa destinado a


transformar um código escrito em linguagem de alto nível em uma linguagem
Assembly é o:

a) debugger.
b) compilador.
c) montador.
d) fortran.
e) otimizador.

Comentários:

16712855225

Conforme vimos em aula, trata-se do compilador.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

barito: B

(FGV – 2015 – TCE/SE – Analista de Sistemas) O módulo de análise léxica de um


compilador tem por objetivo:

a) verificar se o programa fonte obedece às regras da gramática da linguagem;


b) agrupar os caracteres do programa fonte em unidades denominadas tokens;
c) gerar o código objeto correspondente à tradução do programa fonte para
alguma forma intermediária de representação;
d) construir as árvores sintáticas dos diversos comandos do programa fonte;
e) eliminar comandos supérfluos do programa fonte.

Comentários:

 Análise Léxica: nesta fase, um analisador léxico (ou scanner) lê o código-fonte,


caractere por caractere e divide o código escrito em símbolos léxicos chamados
tokens, guardados em uma tabela de símbolos. Ele descarta comentários, espaços
em branco, marcas de formatação e produz uma sequência de palavras-chaves,
pontuações e nomes. Terminada essa fase, vamos para a próxima!

Conforme vimos em aula, trata-se do agrupamento de unidades em tokens.

Gabarito: B

(FGV – 2010 – DETRAN/RN – alista de Sistemas) As etapas realizadas durante


a programação em uma linguagem de alto nível, para se gerar um código
executável, são:
16712855225

a) Programa fonte, compilação, interpretação, ligação, código executável.


b) Programa fonte, compilação, código-objeto, ligação, código executável.
c) Programa fonte, interpretação, código-objeto, ligação, código executável.
d) Programa fonte, montagem, compilação, código-objeto, código executável.
e) Programa fonte, montagem, código-objeto, ligação, interpretação.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

Conforme eu disse em aula, a maioria dos compiladores contém um montador.


Dessa forma, podemos afirmar que ordem é: programa fonte (código-fonte) 
compilação  código-objeto  ligação  código executável.

Gabarito: B

(FGV – 2010 – DETRAN/RN – Analista de Sistemas) São funções realizadas pelo


módulo front-end de um compilador: 16712855225

a) Análise léxica e análise lógica.


b) Análise sintática, análise léxica e análise lógica.
c) Análise sintática e análise lógica.
d) Análise semântica, análise léxica e análise sintática.
e) Análise semântica e análise lógica.

Comentários:

O compilador é um programa de computador que lê um código-fonte escrito em uma


linguagem de alto nível e o traduz para uma linguagem de baixo nível. O processo

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

de compilação é dividido em duas fases: Análise ou Front-End (Análise Léxica,


Sintática, Semântica e Geração de Código Intermediário) e Síntese ou Back-end
(Otimização de Código Intermediário e Geração de Código Final).
Conforme vimos em aula, o front-end inclui análise semântica, léxica e sintática.
Gabarito: D

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SISTEMAS MÓVEIS

(CESPE – 2014 – ANATEL – Analista de Sistemas) O desenvolvimento de


aplicações web e o de aplicações nativas são as principais formas de
desenvolvimento móvel.

(CESPE – 2013 – BACEN – Analista de Sistemas) No projeto de aplicações para


dispositivos móveis, devem ser considerados, entre outros aspectos, as
características dos dispositivos de hardware para os quais a aplicação está sendo
desenvolvida e o consumo de energia gerado por cada recurso do sistema,
visando-se a economia de bateria.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


ANDROID
(CESPE – 2012 – DPF – Analista de Sistemas) O sistema Android 4.0 foi
desenvolvido com base no kernel Linux versão 2.6 e é voltado para dispositivos
móveis controlando os serviços do sistema, como gerenciamento de memória e
de tarefas, diretivas de segurança e drivers.

(CESPE – 2013 – ANTT – Analista de Sistemas) Com o uso do banco de dados


SQLite, incluso no Android, é possível desenvolver um provedor de conteúdo,
bem como um servidor de banco de dados, que necessita gerenciar o acesso
aos dados com persistência. No entanto, não se justifica a utilização de um
provedor de conteúdo para disponibilizarem-se dados para várias atividades ou
aplicativos distintos.

(CESPE – 2015 – TCU – Analista de Sistemas) No desenvolvimento de aplicação


para dispositivos móveis, em vez de se utilizar uma plataforma específica ou um
ambiente cross-platform, pode-se optar por um tipo híbrido, como, por
exemplo, um componente HTML 5 envelopado em containers para acessar
recursos específicos de cada plataforma.

(CESPE – 2013 – ANTT – Analista de Sistemas) Com base no kernel Linux, o


ambiente operacional Android, utilizado para o desenvolvimento de aplicações
móveis e não móveis, inclui um navegador incorporável baseado em WebKit,
com muitas opções de conectividade (wifi, bluetooth, dados wireless através de
conexão celular, como GPRS, EDGE e 3G). Os aplicativos Android são gravados
na linguagem Java e executados em uma máquina virtual JVM.
16712855225

(CESPE – 2013 – TCE/RO – Analista de Sistemas) No Android, os componentes


Intents são criados a partir de ações do usuário e representam a intenção de se
realizar alguma atividade, como iniciar o aplicativo de correio eletrônico ou abrir
uma página, utilizando-se do navegador que acompanha o Android. O código
mostrado a seguir apresenta corretamente um exemplo de utilização desse
componente.

Uri uri = Uri.parse("http://www.cespe.unb.br");


Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE – 2013 – FUB – Analista de Sistemas) O Android pode ser executado


sobre qualquer sistema operacional, pois os aplicativos Android são escritos na
linguagem de programação Java e executados em uma máquina virtual Java.

(IBFC – 2013 – PC – Analista de Sistemas) É uma plataforma de software que está


revolucionando o mercado global de aplicativos para celulares. É a primeira
plataforma de aplicativos para telefones celulares de código aberto que se fez
notar pelos maiores mercados mundiais de telefonia celular. Estamos falando do:

a) Unix.
b) Linux.
c) Android.
d) Mac OS X.
e) Windows.

(CESPE – 2014 – ANATEL – Analista de Sistemas) A arquitetura do Android


disponibiliza o módulo denominado OOM handling, que permite às aplicações
o gerenciamento do mecanismo de baixo consumo de energia do aparelho; por
exemplo, se um processo necessitar ser executado em segundo plano, o referido
módulo possibilitará a desativação temporária desse mecanismo até a finalização
do processo em execução.

(FCC – 2011 – TRE/PE – Analista de Sistemas) A versão do Android feita, a


princípio, apenas para tablets, que apresenta melhorias nos recursos multitarefa
e nos widgets, é considerada como:

a) Cupcake
b) Frozen Yogurt
c) Gingerbread. 16712855225

d) Honeycomb.
e) Ice Cream.

10. (CESPE – 2013 – SERPRO – Analista de Sistemas) Em uma aplicação desenvolvida


para Android, os serviços que forem executados em background serão
implementados como componentes do tipo service e permanecerão em
execução até que a aplicação que os instanciar seja encerrada.

11. (QUADRIX – 2013 – CREFONO – Analista de Sistemas) Como o software Android,


da empresa Google, pode ser classificado?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

a) Um aplicativo para celulares.


b) Um aplicativo para celulares e tablets.
c) Um sistema operacional para celulares e tablets.
d) Um hardware para celulares e tablets.
e) Um tipo de celular.

12. (FUMARC – 2014 – AL/MG – Analista de Sistemas) Em relação aos principais


componentes de um aplicativo Android, analise os itens a seguir, marcando com
(V) a assertiva verdadeira e com (F) a assertiva falsa.

( ) Uma “atividade” do Android é tanto uma unidade de interação do usuário


quanto uma unidade de execução.
( ) Um programa Android interativo é iniciado pela criação de subclasses da
classe Activity.
( ) A classe ContentProvider do Android é utilizada em tarefas de segundo plano,
que podem estar ativas, mas não visíveis na tela.
( ) A classe Service do Android possui o quarteto de atividades básicas para
inserção, consulta, atualização e exclusão.

A sequência CORRETA, de cima para baixo, é:

a) V, F, F, V.
b) F, V, F, V.
c) F, V, V, F.
d) V, V, F, F.

13. (CESPE – 2014 – ANATEL – Analista de Sistemas) O sistema operacional Android


tem o Linux como base, o que permite a utilização simultânea de aplicações que
podem ser executadas em segundo plano, de forma transparente para o usuário.
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


iOS

(CESPE – 2012 – DPF – Analista de Sistemas) A arquitetura do iOS possui quatro


camadas (layers) que funcionam como interface entre a aplicação e o hardware.
Essas camadas, listadas da mais baixa para a mais alta, são: Core OS, Core
Services, Media e CoCoa Touch.

(CESPE – 2013 – SERPRO – Analista de Sistemas) Como o iOS não implementa


um sistema de garbage collection, o Objective-C mantém um contador de
referência para os objetos de forma a viabilizar a liberação de memória de tal
objeto.

(FUMARC – – AL/MG – Analista de Sistemas) Analise as seguintes afirmativas


sobre fundamentos para desenvolvimento de aplicações móveis para iOS.

I. Xcode é o ambiente nativo da Apple para desenvolvimento de aplicativos para


iOS.
II. Objective-C é a linguagem de desenvolvimento de aplicativos para iOS.
III. A classe NSObject é a classe raiz das principais hierarquias de classes em
Objective-C.

Estão CORRETAS as afirmativas:

a) I, II e III.
b) I e II, apenas.
c) I e III, apenas. 16712855225

d) II e III, apenas.

(CESPE – 2014 – SUFRAMA – Analista de Sistemas) Para que os programas


aplicativos sejam executados no Android e no iOS, é necessário uma máquina
virtual própria, cujas responsabilidades são, entre outras, gerenciar a
comunicação entre o aplicativo e as bibliotecas nativas, prover segurança e
permitir que os aplicativos possam gravar dados privados, incluindo bancos de
dados. No Android 4.3, a máquina virtual é a Dalvik; no iOS 7, é a XCode.

(CESPE – 2014 – SUFRAMA – Analista de Sistemas) No iOS 7, os frameworks são


diretórios que contêm biblioteca compartilhada dinâmica com recursos como

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

arquivos de cabeçalho, imagens e aplicativos auxiliares a serem utilizados no


desenvolvimento dos aplicativos.

(CESPE – 2014 – SUFRAMA – Analista de Sistemas) O iOS 7 possui as camadas


Cocoa Touch, Media, Core Services e Core OS; esta última, que é a camada mais
baixa, suporta aplicativos desenvolvidos em 64 bits no modelo LP64.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SEGURANÇA NO DESENVOLVIMENTO

(CESPE - 2014 – TC/DF – Analista de Sistemas) SQL Injection é uma técnica usada
para executar um código no espaço de outro programa, o que, normalmente,
força o programa a carregar a DLL (Dynamic-Link Library), que assume o espaço
de memória do programa em execução.

(CESPE - 2013 – CNJ – Analista de Sistemas) O SDL é um processo de


desenvolvimento de software seguro, que envolve a adição de produtos e
atividades, como o desenvolvimento de modelos de ameaças.

(FCC - 2 – TJ/PE – Analista de Sistemas) São práticas eficientes para revisão


de código, EXCETO:

a) Revisar código por, no máximo, 90 minutos por vez.


b) Revisar até 500 linhas de código por hora.
c) Adotar revisões de código com auxílio de ferramentas.
d) Revisar até 1000 linhas de código por vez.
e) Decidir antecipadamente os objetivos do processo de revisão de código e
como medir sua efetividade.

(CESPE - – PCF – Analista de Sistemas) No que se refere a processos de


desenvolvimento seguro de aplicações, julgue o item subsecutivo.

O processo SDL (Secure Development Lifecycle) tem sido adotado pela Microsoft no desenvolvimento de
alguns de seus produtos, como Windows Server, SQL Server e Exchange Server, reduzindo o número de
vulnerabilidades encontradas nesses produtos em versões desenvolvidas sem o uso do SDL.
16712855225

Uma das características desse processo é que ele provê dois roteiros, sendo um
com foco no suporte a desenvolvimento de novos sistemas com base em um
processo iterativo, e outro que enfoca a manutenção de sistemas já existentes.

(CESPE - – PCF – Analista de Sistemas) O CLASP (Comprehensive,


Lightweight Application Security Process) fornece uma taxonomia de
vulnerabilidades que podem ocorrer no código-fonte e que podem ser
verificadas com o uso de ferramentas automatizadas para análise estática de
código.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(FCC - – TJ/PE – Analista de Sistemas) Em relação a princípios de segurança


de aplicações, conforme definição da OWASP, é INCORRETO afirmar:

a) São coleções desejáveis de propriedades de aplicações, comportamentos,


arquiteturas e práticas de implementação.

b) Para que sejam úteis, os princípios devem ser avaliados, interpretados e


aplicados para resolver um problema específico.

c) Visam a garantir a segurança de aplicações e programas, utilizando técnicas


para proteção do sigilo do código fonte.

d) É um conjunto de tarefas que tenta reduzir a possibilidade de ocorrência de


ataques e o impacto destes ataques, caso ocorram.

e) Utilizam primitivas de arquitetura neutra e de linguagem independente, que


podem ser utilizadas na maioria dos métodos de desenvolvimento de software.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


COMPILADORES E INTERPRETADORES

(CESPE - – DATAPREV - Analista de Sistemas) Uma diferença fundamental


entre um compilador e um montador é que o compilador gera um arquivo
executável a partir de um arquivo texto com o programa, enquanto o montador
executa diretamente a descrição assembler, sem gerar arquivo na saída.

(CESPE - – DATAPREV - Analista de Sistemas) O compilador é parte


integrante do kernel de sistemas operacionais.

(CESPE - – ANATEL - Analista de Sistemas) A compilação é o processo de


análise de um programa escrito em linguagem de alto nível, dominando
programa-fonte, e sua conversão em um programa equivalente, escrito em
linguagem binária de máquina, denominado programa-objeto.

(CESPE - 2011 – ECT - Analista de Sistemas) Instruções em linguagem de máquina


são apresentadas na forma de padrões de bits utilizados para representar as
operações internas ao computador. A linguagem de montagem constitui uma
versão da linguagem de máquina; cada instrução é representada por uma cadeia
de texto que descreve o que a instrução faz. Nesse processo, o montador é o
elemento que converte instruções em linguagem de montagem para linguagem
de máquina.

(CESPE - 7 – TCU - Analista de Sistemas) Uma das principais tarefas do


ligador, programa responsável por unir módulos-objeto em um único módulo,
denominado módulo de carga, é resolver referências internas e externas.
16712855225

(CESPE - 2007 – TCU - Analista de Sistemas) Um interpretador pode ser


considerado como um programa que lê um conjunto de instruções e as executa
passo a passo. Programas interpretados são, em geral, menores e mais
facilmente mantidos, embora sejam mais lentos que os programas compilados.

(CESPE - 2007 – TCU - Analista de Sistemas) A análise semântica — responsável


por verificar se a estrutura gramatical do programa está correta, ou seja, se essa
estrutura foi formada de acordo com as regras gramaticais da linguagem — é
uma das tarefas realizadas pelo compilador.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 91 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE - 2007 – TSE - Analista de Sistemas – A) Um programa pode ser


composto por partes independentemente carregadas e realocadas. Um ligador
pode ser usado para resolver as referências aos símbolos externos às partes e
para produzir um código executável.

(CESPE - 2007 – TSE - Analista de Sistemas – B) Um carregador transfere para a


memória códigos a serem executados. Se for transferido um código objeto, tem
que ser armazenado nos endereços definidos quando foi gerado, pois um
código objeto não pode ser realocado.

10. (CESPE - 2007 – TSE - Analista de Sistemas – C Para gerar um código objeto,
um compilador precisa fazer a análise sintática e semântica de um programa.
Para isso ser possível, a semântica da linguagem, mas não a sintaxe, é descrita
na notação Backus-Naur Form (BNF).

11. (CESPE - 2007 – TSE - Analista de Sistemas – D Os interpretadores não analisam


sintaticamente os códigos fonte uma vez que os traduzem para um formato
interno. Por isso, um interpretador traduz um código em menos tempo que um
compilador.

12. (CESPE - – FUB - Analista de Sistemas) O compilador pode ser visto como
um tradutor, uma vez que o mesmo transforma um programa de linguagem de
alto nível para linguagem de baixo nível.

13. (CESPE - – TRT/5 - Analista de Sistemas) As definições de variáveis no


código de um programa não interferem na geração de um código-objeto
porque as variáveis não possuem relação direta com a entrada e a saída de
dados em um programa.
16712855225

14. (CESPE - 2008 – ANAC - Analista de Sistemas) O compilador, em contraste com


o montador, opera sobre uma linguagem de alto nível, enquanto o montador
opera sobre uma linguagem de montagem.

15. (CESPE - – ANAC - Analista de Sistemas) A criação da tabela de símbolos


constitui tarefa realizada pelo ligador.

16. (CESPE - – FINEP - Analista de Sistemas – A Um código escrito em


linguagem de máquina (Assembly) deve ser compilado e ligado antes de ser
executado.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 92 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

17. (CESPE - – FINEP - Analista de Sistemas – B) A análise semântica é uma


tarefa normalmente realizada pelo link-editor.

18. (CESPE - – FINEP - Analista de Sistemas – C) A otimização de código, feita


durante a fase de análise, é uma das tarefas do compilador.

19. (CESPE - – FINEP - Analista de Sistemas – D) Um interpretador é classificado


como um tradutor, uma vez que analisa e executa o código. O compilador, por
realizar análise e síntese do código, não é considerado um tradutor.

(CESPE - – FINEP - Analista de Sistemas – E) A construção da tabela de


símbolos é atividade que pode ser iniciada durante a análise léxica.

21. (CESPE - 2010 – INMETRO - Analista de Sistemas – B) Todo compilador de


linguagem de programação de alto nível tem a responsabilidade de analisar o
código fonte até a geração de código executável.

(CESPE - 2010 – INMETRO - Analista de Sistemas – C Carregadores são


programas usados exclusivamente por linguagens de programação de alto nível,
com o objetivo de transferir um módulo de carga para a memória.

(CESPE - 2010 – INMETRO - Analista de Sistemas – D) A declaração de variável


“int 7g;” em um programa escrito na linguagem Java, leva a um erro de
compilação detectado durante a análise sintática.

24. (CESPE - 2010 – INMETRO - Analista de Sistemas – E Em programas que usam


funções disponíveis em bibliotecas, as referências a estas funções serão
resolvidas pelo ligador. No caso de bibliotecas estáticas, o código objeto das
funções é integrado ao módulo executável durante o processo de ligação.
16712855225

(CESPE - 2010 – INMETRO - Analista de Sistemas) A análise léxica/sintática de


uma linguagem que tem palavras reservadas tende a ser mais complexa que a
de linguagens que têm apenas palavras-chave usadas também como
identificadores.

(CESPE - 2010 – TRE/MT - Analista de Sistemas) Durante a compilação de um


código-fonte, a fase do compilador que é responsável por produzir uma
sequência de tokens é a:

a) análise léxica.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 93 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

b) análise semântica.
c) análise sintática.
d) geração de código executável.
e) verificação de tipos.

27. (CESPE - 2010 – TRE/MT - Analista de Sistemas – A Compiladores são projetados


para um tipo específico de hardware e de sistema operacional.

(CESPE - 2010 – TRE/MT - Analista de Sistemas – B A interpretação nada mais é


do que uma compilação cruzada.

(CESPE - 1 – FUB - Analista de Sistemas) Na programação empregando uma


linguagem de alto nível, a utilização de um compilador implica o uso de um
ligador e de um carregador para a correta execução do programa; por outro
lado, a utilização de um interpretador, que simula a existência de um
processador cujas instruções são aquelas da linguagem de alto nível empregada,
torna desnecessárias as etapas de ligação e carga.

(CESPE - 2011 – TJ/ES - Analista de Sistemas) Em programa escrito em linguagem


de alto nível e traduzido por compilador, alguns comandos que fazem parte
desse código são instruções da linguagem de programação, enquanto outros
comandos são instruções típicas do compilador denominadas diretivas.

31. (CESPE - 2011 – TJ/ES - Analista de Sistemas) Durante a execução de um


programa que utiliza funções em uma biblioteca dinâmica, esta deve ser
carregada em memória e ligada ao processo em tempo de execução.

(CESPE - 2011 – TRE/ES - Analista de Sistemas) O link-editor tem a função de


vincular os dados de um programa aos programas de sistema e a outros
16712855225

programas de usuário.

(CESPE - 2010 – TRF/4 - Analista de Sistemas - A Interpretadores são programas


que convertem códigos escritos em linguagem de alto nível para programas em
linguagem de máquina.

34. (CESPE - 2010 – TRF/4 - Analista de Sistemas - B Linguagens de alto nível


cumprem tarefas mais substanciais com um número menor de comandos, mas
exigem programas tradutores denominados compiladores para converter
programas em linguagem de alto nível para linguagem de máquina.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 94 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

(CESPE - 2010 – TRF/4 - Analista de Sistemas - C Um computador pode entender


qualquer linguagem de máquina, pois a linguagem de máquina não é definida
pelo projeto de hardware do computador.

(CESPE - 2010 – TRF/4 - Analista de Sistemas - D Programadores podem


escrever instruções em várias linguagens de programação e todas são
entendidas diretamente pelos computadores sem a necessidade de tradução.

37. (CESPE - 2010 – TRF/4 - Analista de Sistemas - E Softwares escritos em


linguagens de máquina são portáveis.

(CESPE - 2010 – BASA - Analista de Sistemas) Um interpretador é um programa


que lê um código escrito em uma linguagem e o converte em um código
equivalente em outra linguagem. No processo de conversão, o interpretador
relata a presença de erros no código original.

(CESPE - 2010 – INMETRO - Analista de Sistemas) Um interpretador traduz um


programa descrito no nível da linguagem para o nível da máquina, enquanto o
compilador eleva a máquina ao nível da linguagem, para que o programa
execute a partir da fonte.

40. (CESPE - 2011 – ECT - Analista de Sistemas) No programa em linguagem de alto


nível, os interpretadores executam os passos definidos para cada instrução e
produzem o mesmo resultado que o do programa compilado. Entretanto, a
execução de um programa em linguagem de alto nível com o uso de
interpretadores é mais lenta que a execução de um programa compilado, uma
vez que precisa examinar cada instrução no programa-fonte, à medida que ela
ocorre, e desviar para a rotina que executa a instrução.
16712855225

41. (CESPE - – TCE/AC - Analista de Sistemas - A) Os programas escritos em


linguagem de programação de alto nível precisam ser convertidos em
programas de máquina, sendo o linker um tipo de software básico que efetua
essa tradução.

42. (CESPE - 2007 – TCU - Analista de Sistemas) Um montador é considerado um


software de sistema, responsável pela tradução de uma linguagem de alto nível
para uma linguagem de baixo nível (linguagem simbólica).

43. (CESPE - 2008 – FUB - Analista de Sistemas) O montador realiza a tarefa de


combinar módulos objetos em um módulo de carga.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 95 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

44. (CESPE - – FUB - Analista de Sistemas – C Para que um programa possa


ser executado, seu código de máquina deve estar presente na memória. O
ligador é o programa do sistema responsável por transferir o código de máquina
de um módulo objeto para a memória e encaminhar o início de sua execução.

45. (CESPE - – DETRAN - Analista de Sistemas - D) O termo linguagem de


máquina é usado para denominar linguagens do tipo assembler ou C++.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 96 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

LISTA DE EXERCÍCIOS COMENTADOS (FGV)


COMPILADORES E INTERPRETADORES

(FGV – 2014 – SUSAM – Analista de Sistemas) Programa destinado a


transformar um código escrito em linguagem de alto nível em uma linguagem
Assembly é o:

a) debugger.
b) compilador.
c) montador.
d) fortran.
e) otimizador.

(FGV – 2015 – TCE/SE – Analista de Sistemas) O módulo de análise léxica de um


compilador tem por objetivo:

a) verificar se o programa fonte obedece às regras da gramática da linguagem;


b) agrupar os caracteres do programa fonte em unidades denominadas tokens;
c) gerar o código objeto correspondente à tradução do programa fonte para
alguma forma intermediária de representação;
d) construir as árvores sintáticas dos diversos comandos do programa fonte;
e) eliminar comandos supérfluos do programa fonte.

(FGV – 2010 – DETRAN/RN – Analista de Sistemas) As etapas realizadas durante


a programação em uma linguagem de alto nível, para se gerar um código
executável, são:
16712855225

a) Programa fonte, compilação, interpretação, ligação, código executável.


b) Programa fonte, compilação, código-objeto, ligação, código executável.
c) Programa fonte, interpretação, código-objeto, ligação, código executável.
d) Programa fonte, montagem, compilação, código-objeto, código executável.
e) Programa fonte, montagem, código-objeto, ligação, interpretação.

(FGV – 2010 – DETRAN/RN – Analista de Sistemas) São funções realizadas pelo


módulo front-end de um compilador:

a) Análise léxica e análise lógica.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 97 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

b) Análise sintática, análise léxica e análise lógica.


c) Análise sintática e análise lógica.
d) Análise semântica, análise léxica e análise sintática.
e) Análise semântica e análise lógica.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 98 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SISTEMAS MÓVEIS

1 2 3 4 5 6 7 8 9 10
C C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


ANDROID

1 2 3 4 5 6 7 8 9 10
E E C E C E C E D E
11 12 13 14 15 16 17 18 19 20
C D C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


iOS

1 2 3 4 5 6 7 8 9 10
C C A E C C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


16712855225

SEGURANÇA NO DESENVOLVIMENTO

1 2 3 4 5 6 7 8 9 10
E C D E C C

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


COMPILADORES E INTERPRETADORES

1 2 3 4 5 6 7 8 9 10

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 99 de 100


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10

E E C C X C E C E E
11 12 13 14 15 16 17 18 19 20
E C E C E E E E E C
21 22 23 24 25 26 27 28 29 30
E E E C E A E E C C
31 32 33 34 35 36 37 38 39 40
C C E C E E E E E C
41 42 43 44 45 46 47 48 49 50
E E E E E

GABARITO DOS EXERCÍCIOS COMENTADOS (FGV)


COMPILADORES E INTERPRETADORES

1 2 3 4 5 6 7 8 9 10
B B B D

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 100 de 100


Aula 11

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

AULA 11

SUMÁRIO PÁGINA
Apresentação 01
- Sistemas De Controle De Versão 02
- Subversion (SVN) 09
- Concurrent Versions System (CVS) 20
- GIT 27
- Análise Estática De Código-Fonte 37
- Sonarqube 45
- Práticas Ágeis 49
- ntegração, Entrega E Implantação Contínua 51
- Refatoração 60
Lista de Exercícios Comentados 68
Gabarito 79

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
16712855225

Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

SISTEMAS DE CONTROLE DE VERSÃO

Professor, o que seria um Sistema de Controle de Versão? É um sistema que registra


as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo
de forma que seja possível recuperar versões específicas. Eu, por exemplo, uso um
sistema de controle de versão para guardar todas as versões das aulas que eu faço
– já pensou se eu perco isso? 

Galera, se um sistema desses é importante para que eu controle as versões das


minhas aulas, imaginem para quem gerencia um projeto de software – muitas vezes
com 800 módulos e 400.000 linhas de código! O desenvolvedor deve poder
conseguir gerenciar as diferentes versões de código-fonte, documentação, etc do
software que ele está desenvolvendo. Vamos ver um pouquinho de história...

No ano de 1972, foi criado o primeiro Sistema de Controle de Versões – Source Code
Control System (SCCS). Passados dez anos, foi desenvolvido o Revision Control
System (RCS), utilizando técnicas mais avançadas e já mantido pelo GNU Project.
entanto, uma de suas desvantagens era que ele só permitia gerenciar versões de
um arquivo individualmente.

Dessa forma, em 1986, foi iniciado o projeto de criação do Concurrent Versions


System (CVS) – esse, sim, era capaz de gerenciar projetos inteiros. Em 2000, foi
lançada a primeira versão do Subversion (SVN) com a proposta de melhorar as
funcionalidades do CVS. Ele bombou, popularizou e fez muito sucesso – tanto que
é utilizado até hoje!

Paralelamente ao desenvolvimento e surgimento de novas ferramentas de controle


16712855225

de versão, que trabalhavam de forma centralizada, a Sun Microsystems – criadora


do Java – começou a desenvolver o TeamWare, um software para controlar projetos
internos da empresa. Ele trabalhava de forma distribuída e posteriormente passou
a não ser mais utilizado. Por que, professor?

Porque a comunidade de desenvolvedores optou por softwares que já trabalhavam


com o mesmo conceito de distribuição, mas com funcionalidades mais modernas,
como o Mercurial. Dos sistemas de controle de versão que trabalhavam de forma
distribuída, dois tiveram bastante aceitação do mercado: Mercurial, criado por Matt
Mackall; e o Git, criado por Linus Torvalds (aquele cara do Linux).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

CENTRALIZADO DISTRIBUÍDO

LIVRE COMERCIAL LIVRE COMERCIAL


SCCS (1972) CCC/HARVEST (1977) GNU ARCH (2001) TEAMWARE (1990)
RCS (1982) CLEARCASE (1992) DCVS (2002) CODE CO-OP (1997)
CVS (1990) SOURCESAFE (1994) GIT (2005) BITKEEPER (1998)
CVSNT (1998) PERFORCE (1995) MERCURIAL (2005) PLASTIC SCM (2006)
SVN (2000) TFS (2005) BAZAAR (2005)

Rapaziada, vamos falar sobre alguns conceitos importantes quando o tema é


ferramenta de controle de versão! Coisa simples, mas que vocês precisam saber:

CONCEITO DESCRIÇÃO

Item de Representa cada um dos elementos de informação que são criados, ou que são
Configuração (IC) necessários, durante o desenvolvimento de um produto de software. Eles devem ser
identificados de maneira única e sua evolução deve ser passível de rastreamento.
Local de armazenamento de todas as versões dos arquivos.
Repositório

Representa o estado de um Item de Configuração que está sendo modificado. Toda


Versão versão deve possuir um identificador único, ou VID (Version Identifier),

Versão que resulta de correção de defeitos ou implementação de uma nova


Revisão funcionalidade. As revisões evoluem sequencialmente, logo se a Versão 2 substitui
a Versão 1, então a Versão 2 é uma revisão da Versão 1.
Versão paralela ou alternativa. Os ramos não substituem as versões anteriores e
Ramo são usados concorrentemente em configurações alternativas.
16712855225

Espaço de Também conhecido como workspace, é o espaço temporário para manter uma cópia
Trabalho local da versão a ser modificada. Ele isola as alterações feitas por um desenvolvedor
de outras alterações paralelas, tornando essa versão privada.
checkout Comando de criação de uma cópia de trabalho local do repositório.
(clone)

Comando de envio de modificações realizadas no repositório para a área de


update trabalho.

Comando de criação de um artefato no repositório pela primeira vez ou criação de


commit uma nova versão do artefato quando este passar por uma modificação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Mesclagem entre versões diferentes, objetivando gerar uma única versão que
merge agregue todas as alterações realizadas. Utiliza algoritmos que diferenciam os ICs
em questão, o que caracteriza o conceito de Delta (Diferença).
Coleção atômica de alterações realizadas nos arquivos do repositório.
changeset

Conceitos simples e fáceis de entender! Apenas para deixar mais claro, o repositório
é o responsável por armazenar todo o histórico de evolução do projeto e o
desenvolvedor, quando desejar realizar modificações, deve copiar os arquivos do
repositório para a sua área de trabalho e, após as alterações, deve salvar os arquivos
de volta no repositório. Pergunta: quais os comandos responsáveis para fazer isso?

Quem respondeu update e commit acertou na mosca! Galera, uma pergunta bastante
sensata seria: por que não simplesmente criar um diretório e ir salvando cada versão
de um arquivo nesse diretório? Ora, nada impede que você faça isso! No entanto,
percebam que – apesar de ser uma ideia extremamente simples – ela é bastant
suscetível a erros! Pessoal, nós somos humanos e, muitas vezes, desatentos.

Eu, por exemplo, sou extremamente lerdo! Por conta disso, eu salvo absolutamente
todas as minhas aulas em três nuvens diferentes e faço backup para mídias físicas
constantemente. Agora imaginem um cara que tem que gerenciar um projeto
imenso com 200 diretórios. E se ele achar que está em um diretório, mas na verdade
está em outro? E se ele acabar gravando acidentalmente no diretório errado?

16712855225

E se ele sobrescrever arquivos indevidamente sem intenção? Pois é, para resolver esse
problema foram desenvolvidos os Sistemas de Controle de Versão Locais! Eles
armazenam todas as alterações dos arquivos sob controle de revisão. Como assim?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Ora, basta salvar o arquivo e ele é gravado no diretório com cada uma de suas
versões. No entanto, há um probleminha...

Para uma pessoa apenas, é uma abordagem razoável. Imaginem agora dez
desenvolvedores trabalhando com tecnologias diferentes e armazenando suas
versões cada um em seu computador! Ora, como eles podem trabalhar em conjunto
integrando seus componentes? Para lidar com esse problema, foi criado o Sistema
de Controle de Versão Centralizado!

Eles possuem um servidor ou repositório central único e várias cópias de trabalho,


que contêm todos os arquivos versionados. As operações de commit e update ocorrem
entre Cliente e Servidor. Uma vantagem é que os desenvolvedores têm uma visão
geral sobre o projeto. Uma desvantagem é que, se o servidor falhar, todos param
de trabalhar; e se o armazenamento for corrompido, já era!

A rotina básica de um desenvolvedor que trabalha com um sistema de controle de


versões centralizado começa pela execução do comando checkout, em que é
carregada uma cópia de trabalho no local especificado por ele. Para trazer as
16712855225

alterações do repositório para sua área de trabalho, o desenvolvedor deve executar


o comando update.

Após realizar as modificações desejadas, o desenvolvedor executa o comando


commit, que é responsável por enviar essas modificações ao repositório. Entre a
execução dos comandos commit e update, podem ocorrer conflitos entre os arquivos
manipulados por essas operações e para sanar tal problema deve-se utilizar o
comando merge, que faz uma mesclagem entre os arquivos, resolvendo o problema.

Para resolver o problema de se ter um ponto único de recuperação, foram criados


os Sistemas de Controle de Versão Distribuídos (ou Descentralizados). Nesse

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

modelo, existem vários repositórios autônomos e independentes, um para cada


desenvolvedor, e cada um desses repositórios possui uma área de trabalho
acoplada a ele. Neste modelo, operações de commit e update acontecem localmente.

A rotina básica de um desenvolvedor que trabalha com um sistema de controle de


versões distribuído é semelhante à rotina do desenvolvedor que trabalha com o
modelo centralizado. As diferenças básicas são que, no modelo distribuído, checkout
é chamado de clone; as operações de commit e update acontecem localmente; e é
possível realizar a sincronização de repositórios através dos comandos pull e push.

O comando pull atualiza o repositório local (destino) com as alterações realizadas


em outro repositório (origem) e o comando push envia as alterações do repositório
local (origem) para outro repositório (destino). Caso um servidor falhe, pode-s
copiar os repositórios dos clientes de volta para o servidor e restaurá- . Em vez de
existir apenas um repositório, cada usuário possui uma cópia do repositório inteiro.

Comparação entre abordagens: SCV Local é uma estrutura composta por um único
repositório e uma área de trabalho; SCV Centralizado é uma estrutura composta
por um único repositório e diversas áreas de trabalho, que se comunicam somente
por meio do repositório central; e SCV Distribuído é uma estrutura em que cada
desenvolvedor possui um repositório próprio acoplado a uma área de trabalho.

16712855225

Apesar de os Sistemas de Controle de Versão Distribuídos terem surgido mais


recentemente já com grande aceitação do mercado, em muitos casos, ainda é
melhor e mais viável o uso de sistemas que trabalham com o modelo centralizado.
O uso desses sistemas tem se popularizado, devido ao baixo custo de implantação,
o grande número de ferramentas gratuitas e a vasta documentação disponível.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas) São


exemplos típicos de ferramentas open source para controle de versão no
desenvolvimento de um software:

a) Git, ClearCase e CVS.


b) CVS, SVN e Git.
c) SourceSafe, CVS e ClearCase.
d) SVN, ClearCase e Git.
e) SourceSafe, ClearCase e SVN.

Comentários:

CENTRALIZADO DISTRIBUÍDO

LIVRE COMERCIAL LIVRE COMERCIAL


SCCS (1972) CCC/HARVEST (1977) GNU ARCH (2001) TEAMWARE (1990)
RCS (1982) CLEARCASE (1992) DCVS (2002) CODE CO-OP (1997)
CVS (1990) SOURCESAFE (1994) GIT (2005) BITKEEPER (1998)
CVSNT (1998) PERFORCE (1995) MERCURIAL (2005) PLASTIC SCM (2006)
SVN (2000) TFS (2005) BAZAAR (2005)

Conforme vimos em aula, trata-se do CVS, SVN e GIT!


16712855225

Gabarito: B

(CESPE - 4 – ANATEL – Analista de Sistemas As ferramentas de controle de


versão Git e SVN oferecem o mesmo grau de confiabilidade no armazenamento
das informações e são ambas implantadas conforme o conceito de sistemas de
controle de versão distribuído.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

CENTRALIZADO DISTRIBUÍDO

LIVRE COMERCIAL LIVRE COMERCIAL


SCCS (1972) CCC/HARVEST (1977) GNU ARCH (2001) TEAMWARE (1990)
RCS (1982) CLEARCASE (1992) DCVS (2002) CODE CO-OP (1997)
CVS (1990) SOURCESAFE (1994) GIT (2005) BITKEEPER (1998)
CVSNT (1998) PERFORCE (1995) MERCURIAL (2005) PLASTIC SCM (2006)
SVN (2000) TFS (2005) BAZAAR (2005)

Conforme vimos em aula, SVN é um modelo centralizado e, não, distribuído,

Gabarito: E

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

SUBVERSION (SVN)

O Subversion (SVN) é um Sistema de Controle de Versão! E ele serve para quê? Ele
16712855225

mantém as versões de arquivos como código-fonte, páginas web e documentação


– lidando eficientemente arquivos textos ou binários. Quem programa sabe como
esses arquivos são editados o tempo todo, portanto é de suma importância ter o
histórico de versões! Ele é distribuído como um software livre sob a licença Apache.

Criado em 2000, tinha o intuito de substituir o Concurrent Versions System (CVS) 1!


Por que? Porque era necessário ultrapassar algumas limitações e corrigir alguns erros
críticos! Cara, talvez seja um dos softwares mais robustos que existe, sendo também

1
A ideia era ser uma evolução do CVS! Logo, não se desejava romper com a metodologia e estrutura existentes.
Ele deveria manter a compatibilidade, tornando fácil a migração CVS > SVN.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

um dos mais utilizado do mundo, logo é bastante estável! Pois é! Hoje em dia, ele
bastante utilizado em todos os lugares (utilizo no meu trabalho).

O Subversion gerencia arquivos e diretórios, e as modificações feitas neles ao longo


do tempo. Isto permite que você recupere versões antigas de seus dados, ou que
examine o histórico de suas alterações. Devido a isso, muitas pessoas tratam-no
como uma espécie de “máquina do tempo”. Ele pode funcionar em rede, o que lhe
possibilita ser usado por pessoas em diferentes computadores.

Em certo nível, a capacidade de várias pessoas modificarem e gerenciarem o mesmo


conjunto de dados de seus próprios locais (podem estar em cidades, países,
continentes diferentes) é o que fomenta a colaboração. Progressos podem ocorrer
muito mais rapidamente quando não há um gargalo único por onde todas as
modificações devam acontecer.

Sua portabilidade é bacana! Cliente e Servidor podem trabalhar com Windows, Unix,
etc – facilitando o trabalho de desenvolvedores que precisam interagir com
diferentes sistemas operacionais. Os criadores do SVN se esforçaram em sanar
problemas causados por diferenças entre esses sistemas, de modo que os
comandos em linha de código sejam os mesmos, independentemente do SO!

Outro ponto forte é a interoperabilidade! Existem dezenas de plug-ins para diversas


IDEs (Ex: Subclipse/Subversive para Eclipse; VisualSVN para Visual Studio; etc).
próprio Netbeans já possui funcionalidades nativas para trabalhar com SVN. Um
ponto fraco: implantação! Como ele não está disponível em um pacote completo,
existe um certo grau de dificuldade em instalar os componentes do servidor.

A ferramenta permite, além do desenvolvimento colaborativo, o merge de


conteúdo, armazenamento de logs e geração de estatísticas diversas. E mais: ele
16712855225

permite comentar as revisões, com o objetivo de facilitar o entendimento das


alterações realizadas. Coloca-se no diretório trunk o código pronto para ser
compilado e colocado em produção.

E como o trabalho está versionado, você não precisa ter medo de que seu trabalho
perca qualidade por não ter essa via única para modificações. É muito simples: se
os dados sofrerem alguma modificação indevida, apenas desfaça tal modificação.
Alguns Sistemas de Controle de Versão também são Sistema de Gerenciamento de
Configuração (GC).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Estes sistemas são especificamente desenvolvimento para gerenciar árvores de


código-fonte, e possuem muitos recursos específicos para o desenvolvimento de
software – como identificação nativa de linguagens de programação, ou
ferramentas de apoio para compilação de software. O Subversion, no entanto, não
é um sistema desse tipo.

É um sistema de caráter geral que pode ser usado para gerenciar quaisquer
conjuntos de arquivos. Para você, estes arquivos podem ser código-fonte – para
outros, podem ser qualquer coisa desde lista de compras de supermercado a
arquivos de edição de vídeo, e muito mais. Vamos ver agora algumas características
que se mostraram um avanço em relação aos recursos do CVS:

VERSIONAMENTO DE DIRETÓRIOS

O Subversion implementa um sistema de arquivos virtual sob controle de versão que rastreia modificações
a toda a árvore de diretório ao longo do tempo – arquivos e os diretórios são versionados.

HISTÓRICO DE VERSÕES EFETIVO

O Subversion permite adicionar, excluir, copiar, e renomear ambos os arquivos ou diretórios. Cada novo
arquivo adicionado começa com um histórico próprio e completamente novo.

COMMITS ATÔMICOS

Um conjunto de modificações ou é inteiramente registrado no repositório, ou não é registrado de forma


nenhuma. Isto possibilita aos desenvolvedores criarem e registrarem alterações como blocos lógicos, e
16712855225

também evita problemas que possam ocorrer quando apenas uma parte de um conjunto de alterações é
enviada com sucesso ao repositório.

VERSIONAMENTO DE METADADOS

Cada arquivo e diretório tem um conjunto de propriedades — chaves e seus valores — associadas consigo.
Você pode criar e armazenar quaisquer pares chave/valor que quiser. As propriedades são versionadas ao
longo do tempo, tal como os conteúdos de arquivo.

ESCOLHA DAS CAMADAS DE REDE

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

O Subversion tem uma noção abstrata do acesso ao repositório, tornando-o mais fácil para as pessoas
implementarem novos mecanismos de rede. Ele pode se associar ao servidor Apache HTTP como um módulo
de extensão, fornecendo maior estabilidade e interoperabilidade, além de acesso instantâneo aos recursos
oferecidos por este servidor (Ex: Autenticação, Autorização, Compactação Online, etc).

MANIPULAÇÃO CONSISTENTE DE DADOS

O Subversion exprime as diferenças de arquivo usando um algoritmo diferenciado, o qual funciona de


maneira idêntica tanto em arquivos texto (compreensível para humanos) quanto em arquivos binários
(incompreensível para humanos). Ambos os tipos de arquivos são igualmente armazenados de forma
compactada no repositório, e as diferenças são enviadas em ambas as direções pela rede.

RAMIFICAÇÕES E ROTULAGEM EFICIENTE

O custo de se fazer ramificações (branching) e de rotulagem (tagging) não precisa ser proporcional ao
tamanho do projeto. O Subversion cria ramos e rótulos simplesmente copiando o projeto, usando um
mecanismo semelhante a um hard-link. Assim essas operações levam apenas uma pequena e constante
quantidade de tempo.

HACKABILITY

O Subversion não tem qualquer bagagem histórica; ele é implementado como um conjunto de bibliotecas C
compartilhadas com APIs bem definidas. Isto torna o Subversion extremamente manutenível e usável por
outras aplicações e linguagens.

Percebam, então, que o commit é atômico! Se houver uma queda de energia no exato
momento em que era realizada uma operação de commit, o repositório não fica em
um estado inconsistente. Pessoal, observem rapidamente a imagem que vem logo
abaixo e que ilustra uma visão em alto nível da estrutura do sistema, i.e., Arquitetura
do Subversion. 16712855225

Em uma ponta, encontra-se um repositório do Subversion que mantém todos os


seus dados versionados. No outro extremo está o seu programa cliente Subversion,
que gerencia cópias locais de partes desses dados versionados (chamadas de
“cópias de trabalho”). Entre esses dois extremos estão múltiplas rotas por várias
camadas de Acesso ao Repositório.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Algumas dessas rotas partem das redes de computadores até os servidores de rede,
de onde então acessam o repositório. Outras desconsideram a rede completamente
e acessam diretamente o repositório. Uma vez instalado, o Subversion consiste num
conjunto de diversas partes. Uma breve visão geral sobre tudo o que você dispõe é
mostrada a seguir:
16712855225

COMPONENTE DESCRIÇÃO

SVN Programa cliente de linha de comando.

SVNVERSION Programa para informar o estado (em termos das revisões dos itens presentes) da
cópia de trabalho.
SVNLOOK Ferramenta para inspecionar um repositório subversion diretamente.

SVNADMIN Ferramenta para criação, ajuste e manutenção de um repositório subversion.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

SVNDUMPFILTER Programa para filtragem de fluxos de um repositório subversion.

MOD_DAV_SVN Módulo plug-in para o servidor Apache HTTP, usado para disponibilizar seu repositório
a outros através da rede.
SVNSERVE Programa servidor independente, executável como um processo daemon ou invocável
via SSH; uma outra forma de disponibilizar seu repositório a outros através da rede.
SVNSYNC Programa para fazer espelhamento incremental de um repositório para outro através
da rede.

Nas primeiras versões do Subversion, não havia a possibilidade de clonar


repositórios remotos, de maneira que esses repositórios fossem replicados para uma
área local e operassem com as mesmas funcionalidades do repositório remoto.
Porém, as versões mais recentes do Subversion possuem uma ferramenta chamada
svnsync que possibilita essa replicação.

Como o Subversion possui uma grande comunidade de colaboradores, não é difícil


encontrar componentes desenvolvidos por terceiros que também realizem essa
função, tais como: SVN::Mirror e SVN-Pusher. O SVN é uma ferramenta de controle de
versões que trabalha de forma centralizada, por isso não possui a funcionalidade de
opagar as mudanças de um repositório para outro.

Essa funcionalidade está presente em ferramentas de controle de versões que


trabalham de forma distribuída, utilizando os comandos push e pull. Porém, os
mesmos componentes citados anteriormente, SVN::Mirror e SVN-Pusher, também
oferecem essa funcionalidade ao Subversion. Agora vamos ver os principais
comandos do Subversion e, em seguida, vejam a imagem do fluxo de trabalho.

COMANDO DESCRIÇÃO
16712855225

checkout Baixa o repositório desejado, criando uma cópia de trabalho.


 svn checkout <url do repositório> [PATH]
add Adiciona arquivos, diretórios ou links simbólicos.
 svn add <arquivo ou diretório>
delete Exclui um item de uma cópia de trabalho ou do repositório.
 svn delete <caminho do repositório até o arquivo a ser deletado>
update Traz mudanças do repositório para a cópia de trabalho.
 svn update <caminho do repositório>
commit Envia mudanças da cópia de trabalho para o repositório.
 svn commit <caminho do repositório até o arquivo a ser comitado>
copy Copia um arquivo ou diretório em uma cópia de trabalho ou no repositório
 svn copy <arquivo ou diretório>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

move Move um arquivo ou diretório.


 svn move <arquivo ou diretório>
status Exibe informações sobre o estado de arquivos e diretórios na cópia de trabalho.
 svn status <arquivo ou diretório>
diff Exibe as diferenças entre duas revisões ou caminhos (antes de enviar ao repositório).
 svn diff <arquivo ou diretório>
revert Desfaz todas as edições locais.
 svn revert <arquivo ou diretório>
resolved Remove arquivos ou diretórios da cópia de trabalho do estado de conflito.
 svn resolved <arquivo ou diretório>
help Ajuda sobre algum comando.
 svn help <comando svn>
blame Obtém informações de autor e revisões por linha de um arquivo ou URL.
 svn blame <arquivo ou diretório>

16712855225

O Subversion é uma das ferramentas de controle de versões com o maior número


de clientes baseados em interface Web. Geralmente, esses clientes possibilitam que

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

o usuário navegue através da árvore e das várias revisões dos arquivos, além de
possibilitar a execução de diffs, o trabalho com o formato rss, a execução de checkouts,
entre outras funcionalidades.

São exemplos de clientes de interface web para o SVN: ViewVC, WebSVN, ViewSVN,
Trac, SVN Browser, Insurrection, etc. Existem também muitos clientes que trabalham
em modo gráfico para o SVN. Esta é uma característica importante na avaliação de
ferramentas de controle de versões, pois muitos desenvolvedores não gostam de
trabalhar com linhas de comando (Ex: RapidSVN, TortoiseSVN, JSVN, etc).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(CESPE - 2011 - – Analista de Sistemas) O Subversion é ferramenta capaz


de controlar versões dos arquivos referentes ao código-fonte de um software.

Comentários:

O Subversion (SVN) é um Sistema de Controle de Versão! E ele serve para quê? Ele
mantém as versões de arquivos como código-fonte, páginas web e documentação –
lidando eficientemente arquivos textos ou binários. Quem programa sabe como esses
arquivos são editados o tempo todo, portanto é de suma importância ter o histórico
de versões! Ele é distribuído como um software livre sob a licença Apache.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE - 2013 – STF – Analista de Sistemas) Para criar uma cópia de trabalho do
Subversion, pode-se utilizar o comando abaixo, que carrega uma cópia de
trabalho para o diretório local do projeto a ser trabalhado que esteja
compartilhado no repositório.

svn checkout svn://repositorio/diretório diretorio_local


16712855225

Comentários:

COMANDO DESCRIÇÃO

checkout Baixa o repositório desejado, criando uma cópia de trabalho.


 svn checkout <url do repositório> [PATH]

Conforme vimos em aula, está perfeito!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(CESPE - 2014 – ANTAQ – Analista de Sistemas) A ferramenta SVN, também


denominada Subversion, é mais eficiente na transmissão e no armazenamento
de arquivos textos do que de arquivos binários.

Comentários:

O Subversion (SVN) é um Sistema de Controle de Versão! E ele serve para quê? Ele
mantém as versões de arquivos como código-fonte, páginas web e documentação –
lidando eficientemente arquivos textos ou binários. Quem programa sabe como esses
arquivos são editados o tempo todo, portanto é de suma importância ter o histórico
de versões! Ele é distribuído como um software livre sob a licença Apache.

Conforme vimos em aula, não existe essa diferença! Além disso: "Note that whether
or not a file is binary does not affect the amount of repository space used to store
changes to that file, nor does it affect the amount of traffic between client and server.
For storage and transmission purposes, Subversion uses a diffing method that works
equally well on binary and text files; this is completely unrelated to the diffing method
used by the 'svn diff' command".

Gabarito: E

(CESPE - 2014 – ANATEL – Analista de Sistemas) As ferramentas de controle de


versão Git e SVN oferecem o mesmo grau de confiabilidade no armazenamento
das informações e são ambas implantadas conforme o conceito de sistemas de
controle de versão distribuído.

Comentários:

É importante ressaltar que o Subversion não é um sistema de controle de versões


16712855225

distribuído. O que isso quer dizer, professor? Em Sistemas de Controle de Versão


Distribuídos (DVCS), os clientes não apenas fazem cópias das últimas versões dos
arquivos; eles fazem cópias completas do repositório. Assim, se algum servidor falha,
qualquer um dos repositórios dos clientes pode ser copiado de volta para restaurar.

Conforme vimos em aula, ele não é distribuído! Pode dar exemplos de ferramentas
que são distribuídas, professor? Claro! Git, Bazaar, Mercurial, Darcs, etc.

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(CESGRANRIO - 2010 – BACEN – Analista de Sistemas) Uma equipe de


desenvolvimento de sistemas, que utiliza Eclipse como IDE Java, deseja utilizar o
Subversion para controle de versão de seus programas. Que plugins podem ser
instalados no Eclipse para que haja a integração da IDE com o repositório do
Subversion?

a) FileSync e Subclipse
b) ProjectSet e Subclipse
c) ProjectSet e FileSync
d) Subversive e Subclipse
e) Subversive e FileSync

Comentários:

Outro ponto forte é a interoperabilidade! Existem dezenas de plug-ins para diversas


IDEs (Ex: Subclipse/Subversive para Eclipse; VisualSVN para Visual Studio; etc).
próprio Netbeans já possui funcionalidades nativas para trabalhar com SVN. Um
ponto fraco: implantação! Como ele não está disponível em um pacote completo,
existe um certo grau de dificuldade em instalar os componentes do servidor.

Conforme vimos em aula, trata-se do Subversive e Subclipse.

Gabarito: D

(CESPE – 2015 – TCU – Analista de Sistemas) Caso um usuário, ao utilizar o


software de controle de versões Subversion, tente sobrescrever uma mudança já
realizada por outro e isso gere uma situação designada como conflito, o software
não tentará resolver automaticamente essa situação.
16712855225

Comentários:

Galera, quando você atualiza sua cópia de trabalho, o Subversion mostra uma
telinha com todos os conflitos gerados e VOCÊ tem a responsabilidade de resolver
os conflitos na mão - isso não ocorre automaticamente.

Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

CONCURRENT VERSIONS SYSTEM (CVS)

Concurrent Version System (ou CVS) é um Sistema de Controle de Versão! E ele


serve para quê? Ele gerencia várias versões de documentos, além de permitir que
várias pessoas possam trabalhar no mesmo arquivo, organizado em um diretório
local ou remoto. Ele é open source, bastante utilizado em ambientes de software e
pode ser executado por equipes distribuídas.

Possibilita armazenar o histórico dos arquivos-fonte com economia de espaço,


através do armazenamento somente das diferenças entre as versões. Ele utiliza uma
arquitetura cliente-servidor em que o servidor armazena as versões atuais do
projeto e seu histórico, e os clientes se conectam a esse servidor para obter uma
cópia completa do projeto.

Ele foi desenhado para controlar códigos-fonte, no entanto pode ser utilizado com
qualquer arquivo baseado em textos. Seu sistema estabelece um repositório simples;
mantém todas as versões de um arquivo em um arquivo único ao armazenar apenas
as diferenças; e protege contra mudanças simultâneas a um arquivo ao estabelecer
diferentes diretórios para cada desenvolvedor.
16712855225

Galera, sabe quando você está com o código funcionando, aí você decide tentar fazer
uma implementação específica de uma maneira diferente e dá tudo errado? Pois é,
bugs podem aparecer quando o software é modificado, e pode demorar um bom
tempo após a modificação do software para conseguir encontrar o erro. O CVS
permite recuperar versões antigas em que não havia esse erro! Bacana?

Professor, mas eu não preciso de um programa para isso! Basta eu salvar cada versão
do meu software. Bem, além de isso ser extremamente trabalhoso, pode ocupar
bastante espaço dependendo do tamanho e complexidade do arquivo. Já imaginou

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

que, em um único dia, você pode criar centenas de versões? Pois é, o nosso sistema
de controle de versões utiliza uma abordagem incremental para salvar os arquivos.

Ademais, já imaginaram se houver mais de uma pessoa trabalhando no mesmo


projeto? Pode acontecer de você sobrescrever um arquivo que não foi salvo
anteriormente. O CVS resolve esse problema ao isolar diferentes desenvolvedores
um do outro, i.e., cada desenvolvedor trabalha em seu próprio diretório e o CVS
funde esses dois diretórios posteriormente.

Cabe salientar que ele não se trata de um sistema de build, i.e., ele não vai compilar
nada. Ademais, não é um substituto para gerenciamento, i.e., não há cronogramas,
marcos, datas de release, nem nada disso – ele não faz gerenciamento. Ele também
não é um substituto para a comunicação entre desenvolvedores, i.e., eles devem se
comunicar por outro meio de contato.

Por fim, é bom enfatizar que ele não se trata de um sistema de gerenciamento de
configuração, visto que não possui rastreamento de dependências, rastreamento de
bugs, procedimentos de testes, entre outras características de um verdadeiro
sistema de gerenciamento de configuração. Bacana? Agora vamos ver alguns
conceitos básicos sobre ele!

CVS armazena todos os arquivos em um repositório centralizado: um diretório (tal


como /usr/local/cvsroot) que é populado com uma hierarquia de arquivos e
diretórios. Os arquivos no repositório são organizados em módulos – cada um é
composto de um ou mais arquivos, e podem ser incluídos a partir de diversos
diretórios. Um uso típico é definir um módulo por projeto.

Cada versão de um arquivo possui um Número de Revisão (Tag) único (Ex: 1.1, 1.2.1.4,
etc). Por definição, a revisão inicial é a 1.1! Cada commit altera o número de revisão.
16712855225

Observem pela figura abaixo que CVS não é limitada ao desenvolvimento linear! A
Árvore de Revisão pode ser dividida em branches (ou galhos).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

O CVS possui algumas limitações: os arquivos em um repositório não podem ser


renomeados – devem ser explicitamente removidos e readicionados. Ademais, o
protocolo não permite que os diretórios sejam movidos ou renomeados. Cada
arquivo do subdiretório em questão deve ser individualmente removido e
readicionado. Bacana?

Outros conceitos importantes: o repositório é a cópia mestre onde o servidor


mantém o histórico de revisões. Cada projeto contém exatamente um repositório.
16712855225

Já uma Cópia de Trabalho (ou Cópia Local) é a cópia em que se faz as alterações
nos arquivos do projeto. Podem existir diversas cópias em um mesmo arquivo do
projeto. Em geral, cada desenvolvedor possui a sua.

Checkout é o ato de pedir uma cópia par ao repositório; Commit é o ato de enviar
alterações da cópia local para o repositório (alguns chamam de Checkin);
Mensagens de Log são arquivos que armazenam informações sobre alterações;
Update é o ato de trazer alterações feitas no repositório para a cópia local, i.e., seria
o inverso do Commit.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Pessoal, eventualmente pode ocorrer de dois desenvolvedores tentarem comitar


mudanças em uma mesma região do arquivo. O CVS não resolve o conflito, apenas
avisa aos desenvolvedores. O CVS está cada vez mais em desuso, por contado do
Subversion (SVN). Não sei ainda porque cobram em alguns editais, no entanto não
há porque se preocupar: há pouquíssimas questões, logo não é comum cair.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(CESPE - 2011 – TRE/ES – Analista de Sistemas) O CVS é uma ferramenta que


implementa as principais funções do processo de controle de versão,
armazenando, em um repositório, as modificações realizadas nos arquivos ao
longo do tempo. O CVS, ao armazenar um arquivo em um repositório, realiza a
compilação ou a interpretação da sintaxe do conteúdo desse arquivo.

Comentários:

Como é? Compilar ou interpretar a sintaxe do conteúdo de um arquivo? Não faz o


menor sentido! Ele simplesmente armazena versões de arquivos! Aliás, não é só
código-fonte, i.e., ele pode armazenar praticamente qualquer formato de artigo.

Gabarito: E

(CESPE - 2011 – TRE/ES – Analista de Sistemas) Quando um projeto é transferido


do repositório do CVS para a área de trabalho do usuário, a edição do arquivo
pode ser iniciada e, uma vez que o projeto conste no CVS, as operações de
inclusão ou exclusão de arquivos na área de trabalho do usuário são
reconhecidas automaticamente pelo CVS.

Comentários:

Não é automático! As alterações devem ser ‘comitadas’!


16712855225

Gabarito: E

(FCC - – TRT/24 – Analista de Sistemas) O Sistema de Versões Concorrentes


(CVS) é:

a) um importante auxiliar para a gerência de configuração de software.

b) o mais avançado CASE livre para geração de aplicativos UML.

c) o atual gerenciador de conteúdos RUP produzido pela Rational©.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

d) uma ferramenta de controle de carga de processamento concorrente


(overloading).

e) um aplicativo de apoio à decisão estratégica para análise de concorrência no


negócio de produção de softwares pelas fábricas de software.

Comentários:

(a) Perfeito, é importantíssimo para auxiliar a gerência de configuração de software;


(b) Não tem absolutamente nada a ver com UML! (c) Não tem absolutamente nada
a ver com RUP! (d) Não tem absolutamente nada a ver com Controle de Carga! (e)
Não tem absolutamente nada a ver com apoio à decisão estratégica!

Gabarito: A

(CESPE - 2011 – TRE/ES – Analista de Sistemas) O CVS é um sistema de controle


de versão Open Source. Acerca das terminologias utilizadas pelo CVS, leia os
trechos a seguir:

_______ é o envio das modificações feitas pelo usuário ao repositório CVS.


_______ é a numeração atribuída pelo CVS a cada modificação de um arquivo.
_______ é uma ramificação no desenvolvimento, usada para descrever o processo
de divisão dos arquivos de um projeto em linhas de desenvolvimento
independentes.

Assinale a alternativa que preencha corretamente, de cima para baixo, as lacunas


dos trechos acima:
16712855225

a) Checkout – Release – Branch.


b) Commit – Revision – Branch.
c) Update – Revision – Merge.
d) Commit – Checkin – Hijack.
e) Update – Checkin – Merge.

Comentários:

O Commit é o envio das modificações feitas pelo usuário ao repositório CVS. O


Revision é a numeração atribuída pelo CVS a cada modificação de um arquivo. O
Branch é uma ramificação no desenvolvimento, usada para descrever o processo de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

divisão dos dos arquivos de um projeto em linhas de desenvolvimento


independentes.

Gabarito: B

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

GIT

Galera, havia um Sistema de Controle de Versões chamado BitKeeper, usado pelos


desenvolvedores do kernel do Linux! Ele era descentralizado e possuía licença
gratuita, no entanto o detentor de seus direitos autorais decidiu torná-la proprietária
e paga. Linux combina com esse negócio de ‘licença proprietária’? Lógico que não!
Logo, Linus Torvalds decidiu criar sua própria ferramenta – surgia o GIT!

Essa ferramenta deveria ser distribuída, open-sourcer e rápido, ter alto desempenho
e conter medidas de segurança contra o corrompimento de arquivos. Esse sistema
de controle de versão foi desenvolvido inicialmente para controlar as versões do
Kernel do Sistema Operacional Linux. Bacana? Agora vamos ver os principais
comandos do GIT e, em seguida, vejam a imagem do fluxo de trabalho (abaixo).

16712855225

COMANDO DESCRIÇÃO

git push Envia as alterações do repositório local (origem) para outro repositório (destino).

git add Adiciona arquivos ao repositório.

git rm Exclui um item de uma cópia de trabalho ou do repositório.

git commit Envia mudanças da cópia de trabalho para o repositório.

git move Move ou renomeia um arquivo ou diretório.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

git status Exibe informações sobre o estado de arquivos e diretórios na cópia de trabalho.

git diff Exibe as diferenças entre duas revisões ou caminhos. Controla as alterações realizadas
na cópia de trabalho que ainda não foram enviadas ao repositório.
git revert Desfaz todas as edições locais.

git fetch Atualiza o repositório sem atualizar a cópia de trabalho. Ele faz o download dos commits
de um repositório remoto para o repositório local. 2
git merge Mescla as alterações baixadas com o seu repositório.

git pull Atualiza o repositório local e sua área de trabalho com as alterações de outro
repositório (seria o mesmo que um fetch + merge).
git mergetool Executa ferramentas de resolução de conflitos para resolver conflitos de junção.

git clone Clona um repositório em um novo diretório, cria ramos remotos para cada ramo do
repositório clonado e cria um ramo inicial já realizando um checkout.
git help Descreve a sintaxe, opções e comportamentos de um comando.

git stash Ignorar alterações indesejadas, alocando-as em um diretório isolado.

git blame Analisa as alterações realizadas em um arquivo linha por linha através do comando git
blame.
git status Verifica quais arquivos estão em quais estados.

Apesar de ter sido criado para funcionar bem com o Linux, o GIT funciona bem com
diversos outros sistemas operacionais. Um ponto forte do GIT, assim como do SVN,
é sua interoperabilidade – existem plug-ins disponíveis para várias IDEs (JGit e EGit
para Eclipse; Git Extensions para Visual Studio; NbGit para o NetBeans; etc). Além
disso, ele é extremamente bem documentado.

A grande vantagem da implantação do GIT é o fato de existirem pacotes completos


16712855225

para a sua instalação. No Linux a instalação pode ser feita através de seu sistema
nativo de gerenciamento de pacotes. Para o Windows, está disponível o pacote
msysgit, que possui diferentes versões, desde um instalador portátil até um instalador
com todo o código fonte do GIT e um compilador em C.

A instalação em plataformas Unix e em ambiente Mac também é trivial. Ele permite


também trabalhar com diversos protocolos de rede. Similar ao SVN, a operação
2
git fetch: baixa novos dados do repositório remoto, mas não mexe na sua Cópia de Trabalho. É bom para
visualizar atualizações no Repositório Remoto. Assim, você pode decidir depois o que você deseja (ou não)
integrar na sua Cópia de Trabalho (Obs: Área de Trabalho é o local onde fica sua Cópia de Trabalho); git pull: baixa
os arquivos do Repositório Remoto para o Repositório Local, mas integra automaticamente à Cópia de Trabalho
(sem perguntar nada!). Em outras palavras, git pull = git fetch + git merge.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

commit é atômica, i.e., se uma operação é interrompida, ela é desconsiderada e o


repositório não fica em um estado inconsistente. Por ser descentralizado, clonar um
repositório é comum e trivial.

16712855225

O GIT permite definir permissões tanto para o repositório como um todo quanto
para diretórios e arquivos. O controle dessas permissões pode ser feito de várias
maneiras, como – por exemplo – através do protocolo SSH, que permite criar chaves
para controle de autenticação ou através do protocolo HTTP, que permite definir
permissões de leitura e escrita para cada arquivo ou diretório.

O histórico do GIT registra as revisões, quem realizou as alterações e quando essas


alterações foram realizadas em um arquivo ou diretório. Os desenvolvedores do GIT
consideram a palavra changeset inadequada para a ferramenta, pois alegam que o

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

GIT não grava alterações, mas estados. É possível mover arquivos e diretórios,
porém ele não oferece suporte à operação de rename como acontece no Subversion.

Para falar a verdade, essa funcionalidade está disponível através do comando git mv,
que ao invés de renomear o arquivo, o apaga, fazendo em seguida uma réplica
idêntica à apagada, com o nome desejado. No caso de um merge com um arquivo
renomeado, é similar ao Subversion, i.e., ele não consegue reconhecer o arquivo e
copia o arquivo de origem para o local destinado, apagando o arquivo de destino.

A operação de cópia não é suportada. Todo commit pode ser acompanhado de uma
mensagem de log, i.e., o usuário pode descrever todas as alterações relativas aquele
commit em uma mensagem, que fica gravada no repositório. Ele também permite
apenas uma mensagem de log para todo o conjunto de mudanças, não permitindo
que cada arquivo possua uma mensagem de log particular.

Diferente do SVN, ele não oferece ao usuário a opção de realizar um checkout parcial,
ou seja, realizar um checkout em apenas um diretório por exemplo. O GIT não possui
tantos clientes baseados em interface web como o Subversion, porém sua
distribuição já possui um cliente, o Gitweb, que foi desenvolvido na linguagem Perl
e permite navegar pelos diretórios através de revisões desejadas.

Existem bons clientes de modo gráfico disponíveis para a ferramenta. O cliente Gitk
já acompanha a distribuição do GIT! Há também o QGIT, GIT-GUI e TortoiseGIT.
Mesmo com uma boa documentação disponível, a curva de aprendizagem do GIT
um pouco íngreme, logo ele é recomendado para usuários que já possuam algum
grau de conhecimento em controle de versões.

A maior diferença entre GIT e outras ferramentas está na forma que ele trata os
dados. Conceitualmente, a maior parte dos outros sistemas armazena informação
16712855225

como uma lista de mudanças por arquivo. Esses sistemas tratam a informação que
mantém como um conjunto de arquivos e as mudanças feitas a cada arquivo ao
longo do tempo, conforme mostra a imagem:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

GIT não armazena sua informação assim. Em vez disso, ele considera que os dados
são como um conjunto de snapshots (captura de algo em um determinado instante,
como em uma foto) de um mini-sistema de arquivos. Cada vez que você salva ou
consolida (commit) o estado do seu projeto, é como se ele tirasse uma foto de todos
os seus arquivos naquele momento e armazenasse uma referência para captura.

Para ser eficiente, se nenhum arquivo foi alterado, a informação não é armazenada
novamente - apenas um link para o arquivo idêntico anterior que já foi armazena .
Vejam na imagem abaixo que quando não há alterações, continua o mesmo
arquivo, com o mesmo nome, mas pontilhado para indicar que se trata de um link
para o arquivo original.

16712855225

Tudo no GIT tem seu checksum (valor para verificação de integridade) calculado
antes que seja armazenado e então passa a ser referenciado pelo checksum. Isso
significa que é impossível mudar o conteúdo de qualquer arquivo ou diretório sem
que o GIT tenha conhecimento. Essa funcionalidade é parte fundamental do GIT e
é integral à sua filosofia.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Você não pode perder informação em trânsito ou ter arquivos corrompidos sem
que o GIT seja capaz de detectar. O mecanismo que o GIT usa para fazer o
checksum é chamado de hash SHA-1, uma string de 40 caracteres composta de
caracteres hexadecimais (0-9 e a-f) que é calculado a partir do conteúdo de um
arquivo ou estrutura de um diretório no GIT.

GIT faz com que seus arquivos sempre estejam em um dos três estados
fundamentais: Consolidado (Committed), Modificado (Modified) e Selecionado
(Staged). Dados são ditos consolidados quando estão seguramente armazenados
em sua base de dados local. Modificado trata de um arquivo que sofreu mudanças,
mas que ainda não foi consolidado na base de dados.

Um arquivo é tido como selecionado quando você marca um arquivo modificado


em sua versão corrente para que ele faça parte do snapshot do próximo commit
(consolidação). Isso nos traz para as três seções principais de um projeto do GIT: o
Diretório do GIT, o Diretório de Trabalho, e a Área de Preparação. Vejam a imagem
ilustrativa abaixo:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

O Diretório do GIT é o local onde ele armazena os metadados e o banco de objetos


de seu projeto. Esta é a parte mais importante do GIT, e é a parte copiada quando
você clona um repositório de outro computador. O Diretório de Trabalho é um
único checkout de uma versão do projeto. Estes arquivos são obtidos a partir da base
de dados comprimida no Diretório do GIT.

Então, eles são colocados em disco para que você possa utilizar ou modificar.
Área de Preparação é um simples arquivo, geralmente contido no seu diretório GIT,
que armazena informações sobre o que irá em seu próximo commit. É bastante
conhecido como índice (index), mas está se tornando padrão chamá-lo de Área de
Preparação. O workflow básico do GIT pode ser descrito assim:

(1) Você modifica arquivos no seu Diretório de Trabalho; (2) você seleciona os
arquivos, adicionando snapshots deles para sua área de preparação; (3) você faz
um commit, que leva os arquivos como eles estão na sua área de preparação e os
armazena permanentemente no seu diretório GIT. Dessa forma, chegamos a uma
conclusão sobre os estados:

 Se uma versão particular de um arquivo está no Diretório GIT, então é


considerada consolidada (ou inalterada).

 Caso seja modificada, mas foi adicionada à Área de Preparação, então está
preparada (ou selecionada).

 E se foi alterada desde que foi obtida, no entanto não foi preparada, está
modificada (ou alterada).

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(FCC – 2014 – TRT/SP – Analista de Sistemas No sistema de controle de versões


Git, para efetuar o download dos commits de um repositório remoto para o
repositório local é utilizado o comando git:

a) apply.
b) get.
c) push.
d) fetch.
e) update.

Comentários:

COMANDO DESCRIÇÃO

fetch Atualiza o repositório sem atualizar a cópia de trabalho. Ele faz o download dos commits
de um repositório remoto para o repositório local.

Conforme vimos em aula, trata-se do comando fetch.

Gabarito: D

(CESPE – 2014– ANATEL – Analista de Sistemas Os comandos da ferramenta Git


são relativamente simples: para adicionar, por exemplo, um arquivo novo ao
16712855225

repositório no Git, basta utilizar o comando commit depois de efetuar o


comando add.

Comentários:

COMANDO DESCRIÇÃO

add Adiciona arquivos ao repositório.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Conforme vimos em aula, está perfeito!

Gabarito: C

(FCC – 2014 – TRT/PB – Analista de Sistemas Paulo está executando o Git no


Linux. Ele tem um repositório Git e um checkout ou cópia funcional dos arquivos
para o projeto atual. Cada arquivo, no diretório de trabalho de Paulo, pode estar
em um de dois estados: monitorado ou não monitorado. Arquivos monitorados
são arquivos que estavam no último snapshot; podendo estar inalterados,
modificados ou selecionados. Arquivos não monitorados são os restantes.

Para Paulo verificar, em linha de comando, quais arquivos estão em quais


estados ele utilizou o comando git status. Em seguida, ele adicionou um novo
arquivo chamado trt ao projeto.

Para passar a monitorar este arquivo ele deve usar o comando:

a) git add trt


b) git -a --sx trt
c) git state trt
d) git fetch trt
e) git -mu trt

Comentários:

COMANDO DESCRIÇÃO

add Adiciona arquivos ao repositório.


16712855225

Conforme vimos em aula, é necessário que ele adicione o arquivo para passar a
monitorá-lo.

Gabarito: A

(CESPE – 2014– ANATEL – Analista de Sistemas Os comandos da ferramenta Git


são relativamente simples: para adicionar, por exemplo, um arquivo novo ao
repositório no Git, basta utilizar o comando commit depois de efetuar o
comando add.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Comentários:

Vejam como essa banca é perspicaz! Aposto que muita gente achou que estava
errado, mas está correto. Não basta eu adicionar, eu devo fazer um commit para que
vá para o repositório.

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

ANÁLISE ESTÁTICA DE CÓDIGO-FONTE

A Análise Estática de Código-Fonte trata do processo de detecção de erros código


sem, de fato, executá-lo – pode ser considerado um processo de revisão automática
de código3! Em geral, é utilizada para encontrar bugs ou garantir conformidade com
boas práticas de programação. Querem um exemplo comum? Um compilador! Ele
é capaz de encontrar erros léxicos, sintáticos e, até mesmo, semânticos.

Sommerville define como: “Técnica automatizada de análise de programa na qual o


programa é analisado detalhadamente para encontrar condições potencialmente
errôneas”. Inspeções são uma forma de análise estática, em que se examina um
programa sem executá-lo. As inspeções são frequentemente dirigidas por checklists
de erros e heurísticas que identificam erros comuns em diferentes linguagens.

Para alguns erros e heurísticas, é possível automatizar o processo de verificação de


programas em relação a essa lista, o que resultou no desenvolvimento de
analisadores estáticos automatizados para diferentes linguagens de programação.
Analisadores estáticos são ferramentas de software que varrem o código-fonte de
um programa e detectam possíveis defeitos e anomalias.

Eles analisam o código e, assim, reconhecem os tipos de declarações no programa.


Podem portanto detectar se as declarações estão bem formuladas, fazer inferências
sobre o fluxo de controle do programa e, em muitos casos, computam o conjunto
de todos os valores possíveis para os dados de programa. Eles complementam os
recursos de detecção de erros providos pelo compilador da linguagem.

Podem ser usados como parte do processo de inspeção ou como uma atividade
16712855225

separada do processo de verificação e validação. A intenção da análise estática


automática é chamar a atenção do inspetor para anomalias do programa, como
variáveis usadas sem serem iniciadas, variáveis não usadas ou dados cujos valores
poderiam ficar fora de sua extensão.

As anomalias são frequentemente um resultado de erros de programação ou


omissões, de modo que eles enfatizam coisas que poderiam sair erradas quando o
programa fosse executado. Entretanto, você deve compreender que essas

3
Na maioria das vezes, a análise é executada em alguma versão do código-fonte, e em outros casos é executada
no código-objeto (i.e., código de máquina ou de montagem).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

anomalias não são necessariamente defeitos de programa. Eles podem ser


determinados ou não ter consequências adversas.

O BSTQB define Análise Estática de Código-Fonte como a prática de encontrar


defeitos no código-fonte e na modelagem. Análise Estática é feita sem a execução
do software examinado pela ferramenta; já o teste dinâmico executa o software.
Análise estática pode localizar defeitos que são dificilmente encontrados em testes.
Como as revisões, a análise estática encontra defeitos ao invés de falhas.

Ferramentas de análise estática analisam o código do programa (ex.: fluxo de


controle e fluxo de dados), gerando, como saída, arquivos do tipo HTML e XML, por
exemplo. Ferramentas de análises estáticas são tipicamente usadas por
desenvolvedores antes e durante o teste de componente e de integração e por
projetistas durante a modelagem do software.

BENEFÍCIOS DA ANÁLISE ESTÁTICA DE CÓDIGO-FONTE

Detecção de defeitos antes da execução do teste.

Conhecimento antecipado sobre aspectos suspeitos no código através de métricas, por


exemplo, na obtenção de uma medida da alta complexidade.
Identificação de defeitos dificilmente encontrados por testes dinâmicos.

Detecção de dependências e inconsistências em modelos de software, como links perdidos.

Aprimoramento da manutenibilidade do código e construção.


16712855225

Prevenção de defeitos, se as lições forem aprendidas pelo desenvolvimento.

DEFEITOS MAIS COMUNS DESCOBERTOS POR ANÁLISE ESTÁTICA

Referência a uma variável com valor indefinido.

Inconsistências entre as interfaces dos módulos e componentes.

Variáveis que nunca são usadas ou impropriamente declaradas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Código morto.

Falta de lógica ou lógica errada (loops infinitos).

Construções excessivamente complicadas.

Violação de padrões de programação.

Vulnerabilidade na segurança.

Violação de sintaxe e de modelos.

Os estágios envolvidos na análise estática incluem:

 Análise de Fluxo de Controle: identifica e enfatiza os loops com vários pontos de


saída ou de entrada e código inacessível. Código inacessível é aquele código
cercado por declarações incondicionais 'goto' ou em uma ramificação de uma
declaração condicional na qual a condição de guarda nunca pode ser verdadeira,
portanto nunca é acessada.

 Análise de Uso de Dados: enfatiza como as variáveis do programa são usadas.


Detecta variáveis usadas sem prévia iniciação, variáveis escritas duas vezes sem
uma tarefa de impedimento e variáveis declaradas mas que nunca são usadas.
A análise de uso de dados também descobre testes não eficientes nos quais a
condição do teste é redundante.
16712855225

 Análise de Interface: verifica a consistência das declarações de rotina e de


procedimento e seus usos. Ela é desnecessária se uma linguagem com tipagem
forte for usada, uma vez que o compilador realiza essas verificações. Detecta
erros de tipo em linguagens com tipagem fraca; funções e procedimentos
declarados e nunca chamados; ou resultados de funções que nunca são usados.

 Análise de Fluxo de Informações: identifica as dependências entre variáveis de


entrada e de saída. Embora não detecte anomalias, mostra como o valor de cada
variável é derivada de outros valores de variáveis. Com essas informações, a
inspeção de código deve ser capaz de encontrar valores que foram
erroneamente computados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

 Análise de Caminho: identifica todos os caminhos possíveis por meio do qual o


fluxo de um programa pode passar durante sua execução e estabelece as
declarações executadas naquele caminho. Essencialmente, ela elucida o controle
do programa e permite que cada predicado possível seja analisado
individualmente.

Analisadores estáticos são particularmente valiosos quando uma linguagem de


programação, como C, for usada. A linguagem C não possui regras de tipagem
estritas e a verificação que o compilador C pode executar é limitada. Portanto, é fácil
para programadores cometerem erros e a ferramenta de análise estática pode
descobrir automaticamente alguns dos defeitos de programa resultantes.

Isso é particularmente importante quando C (e, em menor extensão, C++) for usada
para o desenvolvimento de sistemas críticos. Nesse caso, a análise estática pode
descobrir um grande número de erros potenciais e reduzir significativamente os
custos de teste. No entanto, os projetistas de linguagens de programação
modernas, como Java4, têm removido algumas características propensas a erro.

Todas as variáveis devem ser iniciadas, não há declarações 'goto'; assim, os códigos
inacessíveis são menos prováveis de serem criados acidentalmente e o
gerenciamento de armazenamento é automático. Essa abordagem de prevenção
de erros em vez de detecção de erros é mais eficiente no aprimoramento da
confiabilidade de programa.

Voltando um pouco na história, a Revisão de Código é um dos métodos mais


antigos e seguros para detecção de defeitos. Em geral, trata-se da leitura atenciosa
do código e recomendações de como melhorá-lo. Um programador geralmente
não revisa seu próprio código, visto que é mais fácil encontrar erros nos códigos
16712855225

alheios do que em seu próprio código – entretanto, esse é um processo caro.

Já imaginaram alocar diversos programadores regularmente para revisar códigos, e


eventualmente re-revisar após receber recomendações de melhoria? Pois é, pode se
tornar um processo inviável! Logo, pode-se fazer uso de ferramentas automáticas
de análise de código5, que farão recomendações ao programador. Apesar de não
substituir um programador e sua experiência, é mais barato e viável.

4
Embora analisadores estáticos para Java estejam disponíveis, eles não são amplamente usados.
5
O termo Análise Estática, em geral, refere-se a ferramentas automáticas. O termo Revisão de Código, em geral,
refere-se à análise feita por programadores.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

As questões que podem ser resolvidas por ferramentas de análise de estática de


código-fonte podem ser divididas em três categorias: detecção de erros em
programas; recomendações de formatação de código; e cálculo de métricas.
Existem dezenas de ferramentas de análise estática de código-fonte com suporte a
diversas linguagens de programação (C, C++, C#, Java, Ada, Fortran, Perl, etc).

Deve ser ficar cristalino que essa técnica possui seus pontos fortes e pontos fracos.
Nenhum método de teste de software é ideal – diferentes métodos produzirão
diferentes resultados para diferentes classes de software. Apenas com a combinação
de vários métodos, será possível alcançar o mais alto nível de qualidade de um
software. Captaram a mensagem?

A grande vantagem da análise estática de código-fonte é que ela permite que você
reduza enormemente o preço de eliminação de defeitos em um software, visto que
quanto mais cedo se detecta um erro, menor será o preço para consertá-lo. De
acordo com Steve McConnell, consertar um erro na fase de testes custa dez vezes
mais do que na fase de implementação.

16712855225

CUSTO MÉDIO DE CONSERTO DE DEFEITOS DEPENDENDO DO MOMENTO EM QUE FORAM FEITOS E DETECTADOS.

Por fim, é importante citar – com relação às práticas ágeis na análise estática de
código-fonte – que a revisão por pares apresenta similaridades ao processo
proposto pela programação em pares (pair programming) das práticas ágeis.
Quanto à automatização da análise estática, não há menção nem mesmo
recomendação entre as práticas ágeis para essa técnica automatizada.

Dessa forma, pode-se dizer que os processos de análise estática nas práticas ágeis
são contemplados parcialmente. Consequentemente, sob a ótica de que há

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

necessidade de se realizarem técnicas de análise estática de código juntamente com


análise dinâmica (testes), as práticas ágeis não podem ser consideradas completas
e eficientes. Bacana? Isso já foi tema de discursiva!

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(CESGRANRIO – 2010 – PETROBRÁS – Analista de Sistemas – B) Ferramentas de


análise estática do código permitem obter métricas de qualidade de um produto
de software, tais como o grau de dependência entre seus componentes.

Comentários:

Perfeito! O cálculo de métricas de qualidade pode ser obtido por meio de


ferramentas de análise estática de código. Entre as métricas de qualidade de
software, podemos citar o acoplamento, que mede o grau de dependência entre
componentes de um software.

Gabarito: C

(CES – 2010 – INMETRO – Analista de Sistemas – E Teste é uma abordagem


de controle de qualidade de um software, e o teste pode ser desenvolvido por
meio de técnicas de análise estática de código, embora sejam mais comuns as
técnicas dinâmicas, incluindo simulação.

Comentários:

Essa questão é esquisita! Por que? Bem, eu nunca encontrei uma bibliografia que
falasse qual das duas técnicas é a mais comum. Por que eu acho que é a análise
16712855225

estática? Porque uma leitura do código procurando um erro, é uma análise estática;
a compilação é uma análise estática; a inspeção é uma análise estática. No entanto,
vocês poderiam me dizer dezenas de tipos de testes dinâmicas também! Portanto,
na minha opinião, é impossível dizer – logo caberia recurso!

Gabarito: E

(CESPE – 2010 – TCU – Analista de Sistemas No projeto a ser desenvolvido, será


apropriado adotar a revisão estática de código, pois tal abordagem produz
resultados precisos, objetivos e completos acerca do grau de vulnerabilidade do
código analisado, especialmente quando se utilizam ferramentas de software de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

análise estática que simulem o comportamento da aplicação a partir de seu


código-fonte.

Comentários:

Completos? Não! Já vimos que todos os testes têm limitações. Um alto grau de
qualidade é alcançado quando temos a combinação de vários métodos.

Gabarito: E

(FCC – – TRF/4 – Analista de Sistemas Os requisitos específicos dos


usuários, que sugerem os casos de teste que os colocarão à prova, são isolados
por Ferramentas CASE de testes para:

a) Gerenciamento de testes.
b) Aquisição de dados.
c) Análise estática.
d) Análise dinâmica.
e) Avaliações transfuncionais.

Comentários:

Pessoal! Em geral, testes estáticos são realizados nas primeiras fases do ciclo de vida
de desenvolvimento de software e testes dinâmicos são realizados na fase final. Na
implementação, ambos são utilizados. Portanto, os requisitos do usuário são feitos
por ferramentas CASE de testes para Análise Estática.

Gabarito: C
16712855225

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

SONARQUBE

O SonarQube é uma ferramenta web


open-source utilizada para gerenciar
a qualidade do código – ele cobre
sete grandes categorias: arquitetura e
design; comentários; duplicações de
código; padrões de codificação; testes
(cobertura de código); complexidade
ciclomática; e bugs em potencial.

Ele é escrito em Java e Ruby, é bastante organizado e customizado – além de ter


uma extensa documentação. Galera, existe um conceito chamado Entropia! Quem
aí sabe o que é isso? É o conceito de termodinâmica que mede a desordem das
partículas de um sistema físico. No desenvolvimento de software, ele significa que,
quanto mais se adicionam linhas de código, mais complexo o software fica.

Aliás, não só complexo como também bagunçado. Imaginem um sistema


estruturante de uma organização/empresa que está se deteriorando por conta dos
16712855225

altos custos de manutenção ou por conta da imensa quantidade de bugs ou por


conta da demora para solucionar esses bugs. A entropia só tende a aumentar e,
muitas vezes, exponencialmente.

Pessoal, em meu tempo de serviço público, uma coisa que eu percebi claramente é
que – para se ter uma visão gerencial de um processo ou trabalho – é necessário
ter métricas/números. Como você melhora a qualidade do atendimento de primeiro
nível de um Service Desk se você não sabe quanto tempo demora o atendimento, a
solução do problema, o transbordo para outros níveis, entre outros?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

O SonarQube é bacana por conta disso! Ele consegue oferecer uma porrada de
métricas sobre o código-fonte de um sistema. Dessa forma, o programador pode
ter uma visão estruturada sobre a aplicação que está sendo desenvolvida e pode
controlar sua qualidade. Gente, uma pancada de empresas competentíssimas utiliza
o SonarQube, como IBM, EBay, HP, Nike, Cisco, PayPal, etc.

Em suma, podemos dizer que ele se propõe a ser a central de qualidade do seu
código-fonte, possibilitando o controle sobre um grande número de métricas de
software, e ainda apontando uma série de possíveis bugs. Tudo gerado através de
uma análise completa do código-fonte, e apresentado por meio de uma interface
web, em forma de dashboards e gráficos, como é mostrado acima.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

A Arquitetura do SonarQube é composta de três componentes:

 Banco de Dados:

Deve haver apenas um! Ele mantém os resultados da análise, os projetos e


configuração global, mas também mantém uma análise histórica.

 Servidor Web:

Deve haver apenas um! Ele é responsável por fornecer aos usuários diversos painéis
de qualidade de código-fonte e por configurar a instância do SonarQube.

 Analisadores:

Um conjunto de analisadores de código-fonte que são agrupados e acionados por


demanda – eles utilizam a configuração armazenada no banco de dados.

Por fim, ele suporta diversas linguagens de programação; pode ser utilizado para
análise de desenvolvimento mobile; fornece um histórico de métricas e gráficos de
evolução (chamado Time Machine) e diferentes views; integra bem com Maven, Ant,
Grandle, Jenkings, Hudson, etc; integra bem com Eclipse, Mantis, LDAP; é bastante
extensível por meio de plug-ins; entre outras funcionalidades.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(CESPE – 2015 – TCU – Analista de Sistemas) Uma característica positiva da


ferramenta SonarQube, quando utilizada para realizar a análise estática de
código-fonte, é a conveniência de instalação e utilização em dispositivos móveis.

Comentários:

Por fim, ele suporta diversas linguagens de programação; pode ser utilizado para
análise de desenvolvimento mobile; fornece um histórico de métricas e gráficos de
evolução (chamado Time Machine) e diferentes views; integra bem com Maven, Ant,
Grandle, Jenkings, Hudson, etc; integra bem com Eclipse, Mantis, LDAP; é bastante
extensível por meio de plug-ins; entre outras funcionalidades.

Galera, ele pode ser utilizado para analisar código-fonte de aplicações móveis. No
entanto, não é possível executá-lo em dispositivos móveis, porque é necessário ter
uma JRE/OpenJDK instalada – e, pelo menos atualmente, não existe!

Gabarito: E

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

PRÁTICAS ÁGEIS

Abordagens de desenvolvimento ágil de software têm se tornado cada vez mais


populares durante os últimos anos. Práticas ágeis têm sido desenvolvidas com o
objetivo de entregar software mais rápido e garantir que o software atenda às
necessidades dinâmicas dos clientes. Em geral, estas abordagens têm alguns
princípios comuns. Quais, professor?

Bem, melhorar a satisfação do cliente, adaptando-se às necessidades das mudanças,


muitas vezes fornecendo software de trabalho, e uma estreita colaboração do
cliente com os desenvolvedores. Galera, existem dezenas de práticas ágeis e,
infelizmente, não há um consenso entre os autores mais importantes – até porque
varia para cada metodologia. De todo modo, abaixo há alguns exemplos:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

EXEMPLOS DAS PRINCIPAIS PRÁTICAS ÁGEIS

Divisão em funcionalidades (Features/Stories) Backlog do Produto (Product Backlog)

Metáforas do sistema (Metaphor) Padrões de Codificação (Coding Standards)

Código coletivo (Collective Code Ownership) Integração Contínua (Continuous Integration)

Programação em par (Pair Programming) Refatoração do Código (Refactoring)

Entregas curtas (Small Releases) Desenvolvimento dirigido por testes (Test Driven
Development)
Automação de testes (Automated Testing) Cliente presente (On-site customer)

Ritmo sustentável (Sustainable Pace/40 hour week) Times multidisciplinares (Whole Team/Multi-Skill
Teams)
Jogo do planejamento (Planning Game) Visibilidade do projeto (Project visibility)

Retrospectivas (Retrospective) Reuniões Scrum (Scrum Meetings) e Reuniões de pé


(Stand-up Meetings)

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

INTEGRAÇÃO, ENTREGA E IMPLANTAÇÃO CONTÍNUA

A integração contínua é um termo originado na metodologia ágil XP e utilizado em


diversas metodologias, consistindo em algo simples: o desenvolvedor integra o
código alterado e/ou desenvolvido ao projeto principal na mesma frequência com
que as funcionalidades são desenvolvidas, sendo feito idealmente muitas vezes ao
dia ao invés de apenas uma vez.

O objetivo principal de utilizar a integração contínua é verificar se as alterações ou


novas funcionalidades não criaram novos defeitos no projeto já existente. A prática
da integração contínua pode ser feita através de processos manuais ou
automatizados, utilizando ferramentas como o Jenkins, Hudson, entre outros. Um
dos nossos maiores guias, Martin Fowler, já dizia:

“A Integração Contínua se trata de uma prática de desenvolvimento de


software em que os membros de um time integram seu trabalho
frequentemente, geralmente cada pessoa integra pelo menos diariamente –
podendo haver múltiplas integrações por dia. Cada integração é verificada por
um build automatizado (incluindo testes) para detectar erros de integração o
mais rápido possível. Muitos times acham que essa abordagem leva a uma
significante redução nos problemas de integração e permite que um time
desenvolva software coeso mais rapidamente. ”

Basicamente, a grande vantagem da integração contínua está no feedback


instantâneo. A prática da integração contínua se mostra muito eficaz nas equipes
de desenvolvimento e está sendo usada amplamente. Inúmeros projetos open-
source usam várias máquinas dedicadas a serem servidores de integração, rodando
16712855225

muitas vezes em softwares/plataformas diferentes.

Em equipes onde há distância geográfica, recomenda-se o uso de integração


contínua assíncrona e, em equipes que trabalham no mesmo espaço físico,
recomenda-se o uso de integração contínua síncrona. Em ambos casos,
importante ter pelo menos uma máquina dedicada a integração que seja um clone
do ambiente de produção, pois quanto mais rápido for o feedback melhor.

Dessa forma, podemos afirmar que a prática de Integração Contínua busca dois
objetivos: minimizar a duração e esforço requeridos por cada episódio de
integração; e ser capaz de entregar uma versão do produto que possa ser lançada

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

a qualquer momento. É requerido um procedimento de integração que seja


reproduzível no mínimo e, em grande parte, automatizável.

Essa automatização não visa apenas evitar trabalho repetitivo. Ela na verdade
permite aos desenvolvedores alcançarem um nível muito maior de produtividade e
qualidade. Um problema recorrente no desenvolvimento de software é que os erros
ocultos nos programas que desenvolvemos são cada vez mais caros e difíceis de
corrigir à medida que o tempo avança.

Qualquer pessoa que trabalhe com programação já deve ter passado pela situação
de achar que um programa estava quase pronto e "só faltava testar". Depois
descobre-se que, na verdade, muita coisa ainda estava errada ou até mesmo
faltando no código. Outra situação recorrente é a "preguiça" de testar o software,
ou pelo menos a prática de postergar os testes.

Sem testes e deploys automatizados, o desenvolvedor tende a escrever uma grande


quantidade de código antes de realmente colocar o programa para executar, afinal
se o processo é trabalhoso e toma muito tempo, ele vai evitar de fazer isso ao
máximo. Só que no final, gasta-se muito tempo para corrigir todos os "detalhes"
que não estavam corretos.

16712855225

Para mitigar todos esses problemas, surgiu a Integração Contínua – justamente para
automatizar o processo para que, com bastante frequência, uma ou mais vezes ao
dia, seja possível integrar todas as alterações de todos os desenvolvedores

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

envolvidos no projeto e realizar um teste geral. Tem uma metáfora que eu gosto de
usar bastante para explicar esse tema: um filme de ação.

Ora, todo filme é composto de várias cenas. Em nosso caso, uma aplicação é
composta de vários builds. Toda vez que eu adiciono uma nova cena em um filme,
o editor faz um teste rodando todo o filme novamente para ver se o filme faz sentido
com a nova cena. Caso o teste falhe, i.e., a nova cena não se encaixe na história, ela
deve ser refeita! Em nosso caso, dizemos que ele a build foi quebrada.

Desta feita, em vez de construir vários componentes separadamente e depois juntá-


los em um software final, nós vamos integrar continuamente. Novos builds só são
integrados quando o build anterior é corrigido. Percebam que esses procedimentos
auxiliam a reduzir riscos e a entregar soluções livres de defeitos. A Integração
Contínua segue as seguintes práticas:

AS PRÁTICAS...

1. Mantenha um único repositório de código-fonte.


2. Automatize um build.
3. Faça um build auto-testável.
4. Todo commit devem ser um build na máquina de integração.
5. Mantenha os builds rápidos.
6. Teste em uma cópia do ambiente de produção.
7. Mantenha fácil que todos consigam o último executável.
8. Todos consegue visualizar o processo.
9. Automatização do deployment.

COMO FAZER...
16712855225

1. Desenvolvedores devem fazer checkout do código em seus workspaces privados.


2. Quando finalizado, o commit modifica o repositório.
3. O Servidor de CI monitora o repositório e faz checkout das mudanças quando elas
ocorrem.
4. O Servidor de CI constrói o sistema e roda testes de integração e testes de unidade.
5. O Servidor de CI lança artefatos implantáveis para testes.
6. O Servidor de CI atribui um rótulo de build para a versão do código que ele construiu.
7. O Servidor de CI informa ao time sobre o sucesso do build.
8. Se a build ou teste falhar, o Servidor de CI alerta a equipe.
9. A equipe corrige o problema na melhor oportunidade.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

10. Continue a integrar continuamente e a testar durante o projeto.

Vamos falar um pouco sobre a entrega contínua. Uma equipe ágil geralmente
entrega seu produto nas mãos dos usuários finais, ouvindo seus feedbacks (críticas
e elogios). A frequência de entregas varia de acordo com aspectos técnicos e
negociais do contexto que se encontra, mas se nós tivéssemos que chutar um
número, diríamos que há uma entrega a cada quatro a seis iterações, no máximo.

Em contextos técnicos favoráveis, como desenvolvimento web, um ritmo mais


frequente de entregas pode ser alcançado (Ex: uma entrega a cada iteração). Já
algumas equipes vão ao limite dessa prática por meio de continous deployments.
Apresentar a última versão do produto para o gerente de projetos/produtos para
teste não é suficiente, nem entregar a uma equipe de garantia de qualidade.

Uma entrega, em seu sentido primário, deve ser pelo menos uma versão beta
avaliada por usuários representativos. Em alguns casos (como em softwares
embarcados), não é possível organizar entregas contínuas para todos os usuários,
mas isso não deve se tornar um pretexto para desistir das entregas contínuas mesmo
que somente para alguns usuários.

Entre os benefícios esperados, busca-se mitigar a falha de planejamento bastante


conhecida de descobrir atrasos muito tarde. Ela ajuda a validar o ajuste do produto
ao mercado mais cedo, além de fornecer feedbacks adiantados sobre a qualidade
e estabilidade do produto. Por fim, ele permite um retorno mais rápido do
investimento (ROI – Return On Investment) sobre o produto.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Professor, qual a diferença entre Integração, Entrega e Implantação Contínua?


primeira é o processo de testes e integração de um novo código com a base de
código já existente – geralmente são feitos testes automatizados. A segunda é o
processo de garantir que o novo código pode ser implantado no ambiente de
produção a qualquer momento – geralmente são feitos testes de comportamento.

Por fim, o terceiro trata do processo de publicação (deploy) no ambiente de


produção, tão logo você esteja certo de que o código passou por todos os testes e
está pronto para ser publicado. Se o código já passou pelos testes automatizados e
pelos testes manuais, visuais e de comportamento, então ele pode ser publicado de
forma automatizada. Observem a imagem abaixo:

16712855225

Quem ainda não entendeu, vai entender agora! Imaginem que temos uma equipe
de desenvolvimento formada por quatro pessoas trabalhando em um sistema. Cada
desenvolvedor está focado em implementar uma funcionalidade diferente. Caso o
primeiro desenvolvedor termine sua parte na codificação, ele pode fazer um commit
do código em uma ferramenta de controle de versão (Ex: Git).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

A Integração Contínua é uma prática que pode ser aplicada por meio de uma
ferramenta (Ex: Jenkins). Essa ferramenta pode ser configurada para, de tempos em
tempos, buscar tudo que foi comitado pelos desenvolvedores e realizar testes de
unidade e de integração automaticamente. Caso algum problema seja encontrado,
temos um feedback imediato.

Os desenvolvedores são notificados e ninguém faz check-in do repositório até que


o problema seja resolvido. Se os testes passarem, o primeiro desenvolvedor saberá
que o código que ele implementou não quebrou o sistema. Então, percebam que a
integração contínua consiste em, periodicamente, realizar testes automatizados e
integrar novos códigos ao sistema (via de regra, no ambiente de desenvolvimento).

A diferença entre Entrega Contínua e Implantação Contínua é mais sutil! A primeira


é uma prática ágil na qual o software é construído de tal forma que ele pode ser
colocado em produção a qualquer momento. A segunda é uma prática ágil na qual
o software é construído de tal forma que ele é colocado em produção em
determinado momento (isso é configurável).

A grande diferença é simplesmente por conta do último ponto no nosso desenho.


Em outras palavras, a Entrega Contínua sempre apresenta uma versão candidata
para publicação após cada funcionalidade passar por todos os estágios e, então, o
negócio poderá decidir quando colocá-la efetivamente em produção. Já na
Implantação Contínua, a entrada em produção ocorre automaticamente.

Do início, vamos andar pelo desenho? Idealmente, o terceiro desenvolvedor pode


terminar uma nova funcionalidade e realizar o commit do seu código para sua
ferramenta de controle de versão. Serão realizados testes de unidade e testes de
integração automatizados. Passando por esses estágios, o código é integrado ao
ambiente de desenvolvimento. 16712855225

Agora, todos os desenvolvedores poderão usufruir dessa nova funcionalidade


implementada pelo terceiro desenvolvedor. Caso tenhamos também Entrega
Contínua, o fluxo não para por aí! De tempos em tempos, o sistema integrado
passará por testes de aceitação automatizados. Caso não haja erros, ele estará
pronto para ser implantado em um ambiente de produção.

É comum que esse código fique em um ambiente de homologação, aguardando o


negócio decidir quando ele deverá ser implantado, finalmente, no ambiente de
produção. Caso tenhamos também a Implantação Contínua, o fluxo continua e, não

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

mais será uma decisão do negócio a implantação ou não do software em produção


– a implantação ocorrerá automaticamente. Fim :)

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(CESGRANRIO – 2010 – PETROBRÁS – Analista de Sistemas – É comum, na


Engenharia de Software, o uso de ferramentas de software que auxiliam na
realização de diversas atividades do desenvolvimento. Nesse contexto,
ferramentas de integração contínua são destinadas a automatizar a implantação
do produto de software no ambiente de produção.

Comentários:

A integração contínua é um termo originado na metodologia ágil XP e utilizado em


diversas metodologias, consistindo em algo simples: o desenvolvedor integra o código
alterado e/ou desenvolvido ao projeto principal na mesma frequência com que as
funcionalidades são desenvolvidas, sendo feito muitas vezes ao dia ao invés de apenas
uma vez.

Conforme vimos em aula, não se trata de automatizar a implantação, mas de


oferecer feedbacks tempestivos por meio da integração a todo momento.
Automatizar a implantação é apenas um detalhe!

Gabarito: E

(CESPE – 2004 – TCE/PE – Analista de Sistemas) A prática de integração contínua


depende fortemente do uso de ferramentas de build e controle de versão.
16712855225

Comentários:

Cada integração é verificada por um build automatizado (incluindo testes) para


detectar erros de integração o mais rápido possível. Muitos times acham que essa
abordagem leva a uma significante redução nos problemas de integração (...)

Perfeito! Necessita de ferramentas de build e controle de versão...

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(FCC – – BACEN – Analista de Sistemas – ) A técnica de Continuous


Integration diz que o código desenvolvido por cada par de desenvolvedores
deve ser integrado ao código base constantemente. Quanto menor o intervalo
entre cada integração, menor a diferença entre os códigos desenvolvidos e
maior a probabilidade de identificação de erros, pois cada vez que o código é
integrado, todos os unit tests devem ser executados, e, se algum deles falhar, é
porque o código recém integrado foi o responsável por inserir erro no sistema.

Comentários:

A integração contínua é um termo originado na metodologia ágil XP e utilizado em


diversas metodologias, consistindo em algo simples: o desenvolvedor integra o código
alterado e/ou desenvolvido ao projeto principal na mesma frequência com que as
funcionalidades são desenvolvidas, sendo feito idealmente muitas vezes ao dia ao
invés de apenas uma vez.

Conforme vimos em aula, está perfeito!

Gabarito: C

(CESPE – 2015 – TCU – Analista de Sistemas) Para que a prática de integração


contínua seja eficiente, é necessário parametrizar e automatizar várias atividades
relativas à gerência da configuração, não somente do código-fonte produzido,
mas também de bibliotecas e componentes externos.

Comentários:

Questão perfeita! Parametrizam-se e automatizam-se componentes como código-


fonte, bibliotecas, scripts de build, entre outros, ajustando a dependência entre eles.
16712855225

Gabarito: C

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

REFATORAÇÃO

Uma importante atividade sugerida por diversas metodologias ágeis de


desenvolvimento de software, a Refatoração é uma técnica (inclusive preconizada
pelo XP) de reorganização que simplifica o projeto (ou código) de um componente
de software sem modificar sua função ou seu comportamento. Martin Fowler define
refatoração da seguinte maneira:

“É o processo de mudar um sistema de software de tal forma que não altere o


comportamento externo do código, embora melhore sua estrutura interna”.

Quando um software é refatorado ou refabricado, o projeto existente é examinado


em termos de redundância, elementos de projeto não utilizados, algoritmos
ineficientes ou desnecessários, estruturas de dados mal construídas ou
inapropriadas, ou qualquer outra falha de projeto que possa ser corrigida para
produzir um projeto melhor. Vamos ver um exemplo?

Uma primeira iteração de projeto poderia gerar um componente que apresentasse


baixa coesão (realizar três funções que possuem apenas relacionamento limitado
entre si). Após cuidadosa consideração, talvez decidamos que o componente
devesse ser refabricado em três componentes distintos, cada um apresentando alta
coesão. O resultado será um software mais fácil de se integrar, testar e manter.

Portanto a Refatoração consiste da melhoria da estrutura interna do código-fonte


de um programa, enquanto preserva seu comportamento externo. Prestem
bastante atenção: Refatoração não é reescrever o código! Refatoração não é
consertar bugs! Refatoração não é melhorar aspectos observáveis do software, tais
16712855225

como sua interface.

Entre os benefícios esperados, podemos afirmar que a refatoração melhora


atributos objetos de código (tamanho, duplicação, acoplamento, coesão,
complexidade ciclomática, entre outros) que estão relacionados com facilidade de
manutenção. Além disso, ele ajuda a compreensão do código-fonte e encoraja o
desenvolvedor a pensar sobre suas decisões de projeto. Bacana?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(FCC – 0 – DPE/SP – Analista de Sistemas) A refatoração é o processo de


modificar um sistema de software para melhorar a estrutura interna do código
sem alterar seu comportamento externo.

Comentários:

Portanto a Refatoração consiste da melhoria da estrutura interna do código-fonte de


um programa, enquanto preserva seu comportamento externo. Prestem bastante
atenção: Refatoração não é reescrever o código! Refatoração não é consertar bugs!
Refatoração não é melhorar aspectos observáveis do software, tais como sua
interface.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE – 2006 – CENSIPAM – Analista de Sistemas) A refatoração modifica a


estrutura interna de um software visando facilitar o entendimento e as futuras
modificações sem alterar o comportamento apresentado pelo software. Não é
uma prática que possa ser aplicada em processos de desenvolvimento ágeis,
pois requer a construção de modelos tanto para o projeto de alto nível quanto
para o projeto detalhado.
16712855225

Comentários:

Portanto a Refatoração consiste da melhoria da estrutura interna do código-fonte de


um programa, enquanto preserva seu comportamento externo. Prestem bastante
atenção: Refatoração não é reescrever o código! Refatoração não é consertar bugs!
Refatoração não é melhorar aspectos observáveis do software, tais como sua
interface.

Uma importante atividade sugerida por diversas metodologias ágeis de


desenvolvimento de software, a Refatoração é uma técnica (inclusive preconizada
pelo XP) de reorganização que simplifica o projeto (ou código) de um componente de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

software sem modificar sua função ou seu comportamento. Martin Fowler define
refatoração da seguinte maneira:

Conforme vimos em aula, a segunda sentença está incorreta! Ele tanto é aplicado
que é explicitamente referenciado pelo XP.

Gabarito: E

(CESPE – 2006 – CENSIPAM – Analista de Sistemas) A refatoração é aplicável


quando são identificados fragmentos de código que podem ser agrupados,
expressões complicadas, atributos acessados mais por outras classes que pelas
classes das quais são membros, enunciados condicionais complexos, códigos
duplicados, longos métodos, longas classes, muitos parâmetros, métodos ou
classes pouco usadas.

Comentários:

Entre os benefícios esperados, podemos afirmar que a refatoração melhora atributos


objetos de código (tamanho, duplicação, acoplamento, coesão, complexidade
ciclomática, entre outros) que estão relacionados com facilidade de manutenção.
Além disso, ele ajuda a compreensão do código-fonte e encoraja o desenvolvedor a
pensar sobre suas decisões de projeto. Bacana?

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE – 9 – INMETRO – Analista de Sistemas) As técnicas de refatoração de


código compreendem, entre outras, a remoção de números mágicos e a
16712855225

introdução de padrões de desenho.

Comentários:

Entre os benefícios esperados, podemos afirmar que a refatoração melhora atributos


objetos de código (tamanho, duplicação, acoplamento, coesão, complexidade
ciclomática, entre outros) que estão relacionados com facilidade de manutenção.
Além disso, ele ajuda a compreensão do código-fonte e encoraja o desenvolvedor a
pensar sobre suas decisões de projeto. Bacana?

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Conforme vimos em aula, está perfeito! Número mágicos são aqueles não tem um
significado documentado e esclarecido no código e que, em geral, não estão
atribuídos diretamente a uma variável.

Gabarito: C

(CESPE – 1 – INMETRO – Analista de Sistemas) A técnica de refatoração,


utilizada no paradigma de orientação a objetos, é mais bem enquadrada como
uma técnica de reengenharia de software, isto é, que altera um software para
reconstituí-lo em uma nova forma, função e implementação, que como uma
técnica de engenharia reversa de software, isto é, uma técnica que analisa um
software e cria novas representações abstratas do mesmo.

Comentários:

Portanto a Refatoração consiste da melhoria da estrutura interna do código-fonte de


um programa, enquanto preserva seu comportamento externo. Prestem bastante
atenção: Refatoração não é reescrever o código! Refatoração não é consertar bugs!
Refatoração não é melhorar aspectos observáveis do software, tais como sua
interface.

Conforme vimos em aula, é exatamente o contrário! Lembrem-se que a refatoração


muda dentro sem mudar fora, logo não se encaixa como uma técnica de
reengenharia, porque essa altera o software para reconstruí-lo de uma nova forma.

Gabarito: E

(CESPE – 2012 – BASA – Analista de Sistemas) Denomina-se refatoração a


atividade de reestruturação de programas, classes e métodos existentes para
16712855225

adaptá-los a alterações de funcionalidades e requisitos.

Comentários:

Portanto a Refatoração consiste da melhoria da estrutura interna do código-fonte de


um programa, enquanto preserva seu comportamento externo. Prestem bastante
atenção: Refatoração não é reescrever o código! Refatoração não é consertar bugs!
Refatoração não é melhorar aspectos observáveis do software, tais como sua
interface.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Conforme vimos em aula, a questão está errada (mas a banca não entendeu dessa
forma). Se houve alterações de funcionalidade, não é uma refatoração! Isso talvez
seria uma reengenharia de software. Enfim, discordo!

Gabarito: C

(CESPE – 3 – BASA – Analista de Sistemas) A refatoração objetiva tornar o


código mais claro e limpo.

Comentários:

Entre os benefícios esperados, podemos afirmar que a refatoração melhora atributos


objetos de código (tamanho, duplicação, acoplamento, coesão, complexidade
ciclomática, entre outros) que estão relacionados com facilidade de manutenção.
Além disso, ele ajuda a compreensão do código-fonte e encoraja o desenvolvedor a
pensar sobre suas decisões de projeto. Bacana?

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

(CESPE – 2013 – BASA – Analista de Sistemas) Ao refatorar um código, altera-se


a funcionalidade do sistema.

Comentários:

Portanto a Refatoração consiste da melhoria da estrutura interna do código-fonte de


um programa, enquanto preserva seu comportamento externo. Prestem bastante
atenção: Refatoração não é reescrever o código! Refatoração não é consertar bugs!
16712855225

Refatoração não é melhorar aspectos observáveis do software, tais como sua


interface.

Conforme vimos em aula, a questão está incorreta! A funcionalidade permanece a


mesma!

Gabarito: E

(CESPE – 2013 – UNIPAMPA – Analista de Sistemas) No que concerne às


mudanças futuras, a refatoração de um programa orientado a objetos e a
manutenção preventiva têm propostas opostas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Comentários:

Não, têm propostas similares! Ambas buscam melhorar a estrutura do código sem
alterar seu comportamento externo.

Gabarito: E

10. (CESPE – 9 – ANAC – Analista de Sistemas) A técnica conhecida como


refactoring é constantemente aplicada no desenvolvimento baseado no método
ágil extreme programming.

Comentários:

Uma importante atividade sugerida por diversas metodologias ágeis de


desenvolvimento de software, a Refatoração é uma técnica (inclusive preconizada
pelo XP) de reorganização que simplifica o projeto (ou código) de um componente de
software sem modificar sua função ou seu comportamento. Martin Fowler define
refatoração da seguinte maneira:

Conforme vimos em aula, está perfeito!

Gabarito: C

11. (CESPE – – INMETRO – Analista de Sistemas) A refabricação (ou refactoring)


significa que primeiro deve ser desenvolvido um conjunto mínimo de
funcionalidades que agreguem valor ao negócio e, depois, novas
funcionalidades devem ser incrementadas ao produto já entregue.
16712855225

Comentários:

Não faz o menor sentido! Nada de novas funcionalidades, é apenas otimização do


comportamento interno.

Gabarito: E

12. (CESPE – 2010 – SAD/PE – Analista de Sistemas) Em ferramentas CASE, como


refactoring, é melhor adotar-se uma abordagem formal que uma abordagem
heurística.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Comentários:

Bem... a despeito de a questão tratar refactoring como uma ferramenta e, não, como
uma técnica, é melhor adotar uma abordagem heurística, devido a imensa
variedade de algoritmos, entradas, saídas, etc. Ademais, é uma abordagem
puramente empírica, baseada em fatos reais, na procura de possíveis melhorias.

Gabarito: E

13. (CESPE – 3 – STF – Analista de Sistemas) O refactoring aprimora o design de


um software, reduz a complexidade da aplicação, remove redundâncias
desnecessárias, reutiliza código, otimiza o desempenho e evita a deterioração
durante o ciclo de vida de um código.

Comentários:

Entre os benefícios esperados, podemos afirmar que a refatoração melhora atributos


objetos de código (tamanho, duplicação, acoplamento, coesão, complexidade
ciclomática, entre outros) que estão relacionados com facilidade de manutenção.
Além disso, ele ajuda a compreensão do código-fonte e encoraja o desenvolvedor a
pensar sobre suas decisões de projeto. Bacana?

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

14. (CESPE – 5 – TCU – Analista de Sistemas) A cada nova funcionalidade de


software adicionada na prática de refactoring (refatoração) em XP, a chance, o
desafio e a coragem de alterar o código-fonte de um software são aproveitados
16712855225

como oportunidade para que o design do software adote uma forma mais
simples ou em harmonia com o ciclo de vida desse software, ainda que isso
implique a alteração de um código com funcionamento correto.

Comentários:

Uma importante atividade sugerida por diversas metodologias ágeis de


desenvolvimento de software, a Refatoração é uma técnica (inclusive preconizada
pelo XP) de reorganização que simplifica o projeto (ou código) de um componente de
software sem modificar sua função ou seu comportamento. Martin Fowler define
refatoração da seguinte maneira:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

Conforme vimos em aula, a questão está completamente errada! Vimos


insistentemente que a refatoração não adiciona novas funcionalidades. Quando vi
que o gabarito preliminar veio como correto, achei um absurdo. Tinha certeza que
a banca mudaria o gabarito, mas ela não deu o braço a torcer e apenas anulou a
questão. Menos mal...

Gabarito: X

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SISTEMAS DE CONTROLE DE VERSÃO
(FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas) São
exemplos típicos de ferramentas open source para controle de versão no
desenvolvimento de um software:

a) Git, ClearCase e CVS.


b) CVS, SVN e Git.
c) SourceSafe, CVS e ClearCase.
d) SVN, ClearCase e Git.
e) SourceSafe, ClearCase e SVN.

(CESPE - 4 – ANATEL – Analista de Sistemas As ferramentas de controle de


versão Git e SVN oferecem o mesmo grau de confiabilidade no armazenamento
das informações e são ambas implantadas conforme o conceito de sistemas de
controle de versão distribuído.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SVN

(CESPE - 2011 - – Analista de Sistemas) O Subversion é ferramenta capaz


de controlar versões dos arquivos referentes ao código-fonte de um software.

(CESPE - 2013 – STF – Analista de Sistemas) Para criar uma cópia de trabalho do
Subversion, pode-se utilizar o comando abaixo, que carrega uma cópia de
trabalho para o diretório local do projeto a ser trabalhado que esteja
compartilhado no repositório.

svn checkout svn://repositorio/diretório diretorio_local

(CESPE - 2014 – ANTAQ – Analista de Sistemas) A ferramenta SVN, também


denominada Subversion, é mais eficiente na transmissão e no armazenamento
de arquivos textos do que de arquivos binários.

(CESPE - 2014 – ANATEL – Analista de Sistemas) As ferramentas de controle de


versão Git e SVN oferecem o mesmo grau de confiabilidade no armazenamento
das informações e são ambas implantadas conforme o conceito de sistemas de
controle de versão distribuído.

(CESGRANRIO - 2010 – BACEN – Analista de Sistemas) Uma equipe de


desenvolvimento de sistemas, que utiliza Eclipse como IDE Java, deseja utilizar o
Subversion para controle de versão de seus programas. Que plugins podem ser
instalados no Eclipse para que haja a integração da IDE com o repositório do
Subversion? 16712855225

a) FileSync e Subclipse
b) ProjectSet e Subclipse
c) ProjectSet e FileSync
d) Subversive e Subclipse
e) Subversive e FileSync

(CESPE – 2015 – TCU – Analista de Sistemas) Caso um usuário, ao utilizar o


software de controle de versões Subversion, tente sobrescrever uma mudança já
realizada por outro e isso gere uma situação designada como conflito, o software
não tentará resolver automaticamente essa situação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


CVS

(CESPE - 2011 – TRE/ES – Analista de Sistemas) O CVS é uma ferramenta que


implementa as principais funções do processo de controle de versão,
armazenando, em um repositório, as modificações realizadas nos arquivos ao
longo do tempo. O CVS, ao armazenar um arquivo em um repositório, realiza a
compilação ou a interpretação da sintaxe do conteúdo desse arquivo.

(CESPE - 2011 – TRE/ES – Analista de Sistemas) Quando um projeto é transferido


do repositório do CVS para a área de trabalho do usuário, a edição do arquivo
pode ser iniciada e, uma vez que o projeto conste no CVS, as operações de
inclusão ou exclusão de arquivos na área de trabalho do usuário são
reconhecidas automaticamente pelo CVS.

(FCC - – TRT/24 – Analista de Sistemas) O Sistema de Versões


Concorrentes (CVS) é:

f) um importante auxiliar para a gerência de configuração de software.

g) o mais avançado CASE livre para geração de aplicativos UML.

h) o atual gerenciador de conteúdos RUP produzido pela Rational©.

i) uma ferramenta de controle de carga de processamento concorrente


(overloading).
16712855225

j) um aplicativo de apoio à decisão estratégica para análise de concorrência no


negócio de produção de softwares pelas fábricas de software.

(CESPE - 2011 – TRE/ES – Analista de Sistemas) O CVS é um sistema de controle


de versão Open Source. Acerca das terminologias utilizadas pelo CVS, leia os
trechos a seguir:

_______ é o envio das modificações feitas pelo usuário ao repositório CVS.


_______ é a numeração atribuída pelo CVS a cada modificação de um arquivo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

_______ é uma ramificação no desenvolvimento, usada para descrever o processo


de divisão dos arquivos de um projeto em linhas de desenvolvimento
independentes.

Assinale a alternativa que preencha corretamente, de cima para baixo, as lacunas


dos trechos acima:

f) Checkout – Release – Branch.


g) Commit – Revision – Branch.
h) Update – Revision – Merge.
i) Commit – Checkin – Hijack.
j) Update – Checkin – Merge.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


GIT

(FCC – 2014 – TRT/SP – Analista de Sistemas No sistema de controle de versões


Git, para efetuar o download dos commits de um repositório remoto para o
repositório local é utilizado o comando git:

a) apply.
b) get.
c) push.
d) fetch.
e) update.

(CESPE – 2014– ANATEL – Analista de Sistemas Os comandos da ferramenta Git


são relativamente simples: para adicionar, por exemplo, um arquivo novo ao
repositório no Git, basta utilizar o comando commit depois de efetuar o
comando add.

(FCC – 2014 – TRT/PB – Analista de Sistemas Paulo está executando o Git no


Linux. Ele tem um repositório Git e um checkout ou cópia funcional dos arquivos
para o projeto atual. Cada arquivo, no diretório de trabalho de Paulo, pode estar
em um de dois estados: monitorado ou não monitorado. Arquivos monitorados
são arquivos que estavam no último snapshot; podendo estar inalterados,
modificados ou selecionados. Arquivos não monitorados são os restantes.

Para Paulo verificar, em linha de comando, quais arquivos estão em quais


estados ele utilizou o comando git status. Em seguida, ele adicionou um novo
16712855225

arquivo chamado trt ao projeto.

Para passar a monitorar este arquivo ele deve usar o comando:

a) git add trt


b) git -a --sx trt
c) git state trt
d) git fetch trt
e) git -mu trt

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(CESPE – 2014– ANATEL – Analista de Sistemas Os comandos da ferramenta Git


são relativamente simples: para adicionar, por exemplo, um arquivo novo ao
repositório no Git, basta utilizar o comando commit depois de efetuar o
comando add.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


ANÁLISE ESTÁTICA DE CÓDIGO-FONTE

(CESGRANRIO – 2010 – PETROBRÁS – Analista de Sistemas – B) Ferramentas de


análise estática do código permitem obter métricas de qualidade de um produto
de software, tais como o grau de dependência entre seus componentes.

(CES – 2010 – INMETRO – Analista de Sistemas – E Teste é uma abordagem


de controle de qualidade de um software, e o teste pode ser desenvolvido por
meio de técnicas de análise estática de código, embora sejam mais comuns as
técnicas dinâmicas, incluindo simulação.

(CESPE – 2010 – TCU – Analista de Sistemas No projeto a ser desenvolvido, será


apropriado adotar a revisão estática de código, pois tal abordagem produz
resultados precisos, objetivos e completos acerca do grau de vulnerabilidade do
código analisado, especialmente quando se utilizam ferramentas de software de
análise estática que simulem o comportamento da aplicação a partir de seu
código-fonte.

(FCC – – TRF/4 – Analista de Sistemas Os requisitos específicos dos


usuários, que sugerem os casos de teste que os colocarão à prova, são isolados
por Ferramentas CASE de testes para:

a) Gerenciamento de testes.
b) Aquisição de dados.
c) Análise estática.
d) Análise dinâmica. 16712855225

e) Avaliações transfuncionais.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SONARQUBE
(CESPE – 2015 – TCU – Analista de Sistemas) Uma característica positiva da
ferramenta SonarQube, quando utilizada para realizar a análise estática de
código-fonte, é a conveniência de instalação e utilização em dispositivos móveis.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


INTEGRAÇÃO CONTÍNUA, ENTREGA CONTÍNUA E IMPLANTAÇÃO CONTÍNUA
(CESGRANRIO – 2010 – PETROBRÁS – Analista de Sistemas – É comum, na
Engenharia de Software, o uso de ferramentas de software que auxiliam na
realização de diversas atividades do desenvolvimento. Nesse contexto,
ferramentas de integração contínua são destinadas a automatizar a implantação
do produto de software no ambiente de produção.

(CESPE – 2004 – TCE/PE – Analista de Sistemas) A prática de integração contínua


depende fortemente do uso de ferramentas de build e controle de versão.

(FCC – – BACEN – Analista de Sistemas – ) A técnica de Continuous


Integration diz que o código desenvolvido por cada par de desenvolvedores
deve ser integrado ao código base constantemente. Quanto menor o intervalo
entre cada integração, menor a diferença entre os códigos desenvolvidos e
maior a probabilidade de identificação de erros, pois cada vez que o código é
integrado, todos os unit tests devem ser executados, e, se algum deles falhar, é
porque o código recém integrado foi o responsável por inserir erro no sistema.

(CESPE – 2015 – TCU – Analista de Sistemas) Para que a prática de integração


contínua seja eficiente, é necessário parametrizar e automatizar várias atividades
relativas à gerência da configuração, não somente do código-fonte produzido,
mas também de bibliotecas e componentes externos.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


REFATORAÇÃO

(FCC – 0 – DPE/SP – Analista de Sistemas) A refatoração é o processo de


modificar um sistema de software para melhorar a estrutura interna do código
sem alterar seu comportamento externo.

(CESPE – 2006 – CENSIPA – Analista de Sistemas) A refatoração modifica a


estrutura interna de um software visando facilitar o entendimento e as futuras
modificações sem alterar o comportamento apresentado pelo software. Não é
uma prática que possa ser aplicada em processos de desenvolvimento ágeis,
pois requer a construção de modelos tanto para o projeto de alto nível quanto
para o projeto detalhado.

(CESPE – 2006 – CENSIPAM – Analista de Sistemas) A refatoração é aplicável


quando são identificados fragmentos de código que podem ser agrupados,
expressões complicadas, atributos acessados mais por outras classes que pelas
classes das quais são membros, enunciados condicionais complexos, códigos
duplicados, longos métodos, longas classes, muitos parâmetros, métodos ou
classes pouco usadas.

(CESPE – 9 – INMETRO – Analista de Sistemas) As técnicas de refatoração de


código compreendem, entre outras, a remoção de números mágicos e a
introdução de padrões de desenho.

(CESPE – 1 – INMETRO – Analista de Sistemas) A técnica de refatoração,


utilizada no paradigma de orientação a objetos, é mais bem enquadrada como
16712855225

uma técnica de reengenharia de software, isto é, que altera um software para


reconstituí-lo em uma nova forma, função e implementação, que como uma
técnica de engenharia reversa de software, isto é, uma técnica que analisa um
software e cria novas representações abstratas do mesmo.

(CESPE – 2012 – BASA – Analista de Sistemas) Denomina-se refatoração a


atividade de reestruturação de programas, classes e métodos existentes para
adaptá-los a alterações de funcionalidades e requisitos.

(CESPE – 3 – BASA – Analista de Sistemas) A refatoração objetiva tornar o


código mais claro e limpo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

(CESPE – 2013 – BASA – Analista de Sistemas) Ao refatorar um código, altera-se


a funcionalidade do sistema.

(CESPE – 2013 – UNIPAMPA – Analista de Sistemas) No que concerne às


mudanças futuras, a refatoração de um programa orientado a objetos e a
manutenção preventiva têm propostas opostas.

10. (CESPE – 9 – ANAC – Analista de Sistemas) A técnica conhecida como


refactoring é constantemente aplicada no desenvolvimento baseado no método
ágil extreme programming.

11. (CESPE – – INMETRO – Analista de Sistemas) A refabricação (ou refactoring)


significa que primeiro deve ser desenvolvido um conjunto mínimo de
funcionalidades que agreguem valor ao negócio e, depois, novas
funcionalidades devem ser incrementadas ao produto já entregue.

12. (CESPE – 2010 – SAD/PE – Analista de Sistemas) Em ferramentas CASE, como


refactoring, é melhor adotar-se uma abordagem formal que uma abordagem
heurística.

13. (CESPE – 3 – STF – Analista de Sistemas) O refactoring aprimora o design de


um software, reduz a complexidade da aplicação, remove redundâncias
desnecessárias, reutiliza código, otimiza o desempenho e evita a deterioração
durante o ciclo de vida de um código.

14. (CESPE – 5 – TCU – Analista de Sistemas) A cada nova funcionalidade de


software adicionada na prática de refactoring (refatoração) em XP, a chance, o
desafio e a coragem de alterar o código-fonte de um software são aproveitados
como oportunidade para que o design do software adote uma forma mais
16712855225

simples ou em harmonia com o ciclo de vida desse software, ainda que isso
implique a alteração de um código com funcionamento correto.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SISTEMAS DE CONTROLE DE VERSÃO

1 2 3 4 5 6 7 8 9 10
B E

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


SVN

1 2 3 4 5 6 7 8 9 10
C C E E D C

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


CVS

1 2 3 4 5 6 7 8 9 10
E E A B

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


GIT

1 2 3 4 5 6 7 8 9 10
D C A C 16712855225

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


ANÁLISE ESTÁTICA DE CÓDIGO-FONTE

1 2 3 4 5 6 7 8 9 10
C E E C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 80


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 11

SONARQUBE

1 2 3 4 5 6 7 8 9 10
E

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


INTEGRAÇÃO CONTÍNUA, ENTREGA CONTÍNUA E IMPLANTAÇÃO CONTÍNUA

1 2 3 4 5 6 7 8 9 10
E C C C

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


REFATORAÇÃO

1 2 3 4 5 6 7 8 9 10
C E C C E C C E E C
11 12 13 14 15 16 17 18 19 20
E E C X

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 80


Aula 12

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Olá! Antes de iniciarmos, é importante saber que nesta aula vou considerar que você
já conhece o básico de lógica de programaçao, ok? Assim poderemos focar no que é
específico das diferentes linguagens. Mas fique tranquilo, começaremos com os
conceitos básicos, e nas resoluções das questões tudo está bem explicado, mas caso
tenha alguma dúvida, fique mais do que à vontade para utilizar o fórum ou mandar
um email, ok? Outra coisa, não se assuste com o tamanho da aula, infelizmente são
muitos pequenos assuntos, a boa notícia é que as 40 páginas finais são apenas as lista
de exercícios :)

C#
Vamos começar pela sopa de letrinhas. C# é uma linguagem de programação. .Net é um
framework, que já possui uma biblioteca com várias soluções prontas. Visual Studio é a
IDE, ou seja, é uma ferramenta que auxilia o desenvolvedor na criação dos sistemas, de
forma mais produtiva. Agora sim, estamos prontos para entender mais sobre o
desenvolvimento neste ambiente.

Um programa em C# é composto de três partes básicas, e hierárquicas: os Namespaces,


as Classes e os Métodos.

Um programa está dentro de um


Namespace - ele indica que as
12542341605
classes pertencem à sua
aplicação - para que o código
fique separado do .Net. Uma
classe contém um “pedaço” do seu
programa, deve haver no mínimo
uma classe. Por sua vez, os
métodos contém as instruções,
que são ações individuais.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 1 128


Muito abstrato? Então vamos ver nosso primeiro trecho de código.
using System
using System Collections Generic
using System Linq
using System Text

namespace MinhaAplicacao
class Program

static void Main string args

Console WriteLine Oi Eu sou o Goku

Então o que apareceu de diferente? Já sabemos que o .Net é um framework, ou seja,


nele estão contidas várias bibliotecas que podem ser utilizadas por sua aplicação. É
exatamente isso que as primeiras 4 linhas do código acima estão fazendo, a palavra using
é utilizada para incluir bibliotecas externas ao seu namespace.

Nessa aplicação temos apenas uma classe, Program, e um método, Main(). Todos os
programas C# devem conter apenas um método Main(), ele é o ponto de entrada, é por
ele que o programa inicia quando é executado.

Mas está muito simples não é? Vamos incluir uma nova variável.
namespace MinhaAplicacao
class Program

static void Main string args

string Nome Goku


Console WriteLine Oi
12542341605
Eu sou o
Nome

Declaramos uma nova variável no formato:


Tipo nome_da_variavel [ = valor_inicial ];
O valor_inicial está entre colchetes pois é opcional. Simples não é? Essa é a
estrutura básica de um programa C#! Agora vamos aprender mais alguns conceitos.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 2 128


arrays
Em algum momento, você vai precisar trabalhar com vários dados do mesmo tipo, e é
para isso que servem os arrays, ou vetores. Para declarar é simples, defina o tipo seguido
de colchetes:

int meuarray
meuarray new int

Acabamos de criar um array, de inteiros e que foi inicializado com 10 números. Perceba
que é necessário utilizar o new pois arrays são objetos, eles precisam que seja alocada
memória. Outra alternativa, é simplesmente, declarar e já iniciar, na mesma linha.

int meuarray new int

Lembre‐se o índice dos arrays começam no 0 (zero). Então para definir o valor da
primeira variável temos que utilizar esta instrução: meuarray Caso o array
fosse de objetos, por exemplo, Pessoa, cada índice guardaria um objeto, e precisaria ser
inicializado: meuarray new Pessoa

Mas se quisermos iniciar o array com 10 valores, não precisamos gastar 10 linhas para
isso, basta declarar dessa forma:

string Nomes Ana Beto Carlos Daniel Elias Fernanda


Goku Hélio Ian Jonas

Console WriteLine Oi Eu sou o Nomes


12542341605

Você já sabe o que vai sair aqui não é

Você deve ter sentido falta de algo não é? Nesse caso não é obrigatório declarar com o
new string , pois o compilador já aloca automaticamente o espaço necessário
para os elementos que declaramos inicialmente.

herança
Herança é um conceito que está presente em toda a linguagem orientada a objetos, com
C# não é diferente. Quando você necessita que alguma classe tenha um comportamento

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 3 128


mais específico, mas que ainda tenha o comportamento da classe mais geral, utilizamos
a herança, ou seja uma classe extende a outra. Vamos pensar no clássico exemplo de
animais. Se fossemos criar a superclasse Animal quais variáveis e métodos ela teria? Algo
mais ou menos assim:

Esta é uma boa classe para representar todos os animais, eles todos fazem essas coisas.
Porém nem todos fazem tudo igual, não é mesmo?

Agora, se fossemos criar as classes Hipopótamo e Cachorro quais métodos seriam


diferentes? De acordo com a nossa tirinha (rs), Comer() seria um deles. Outro método
diferente seria o FazerBarulho(), o cachorro late e o hipopótamo grunhe (pesquisei
essa). A subclasse modifica os métodos da superclasse (ou classe base) através da
sobrescrita, em C# basta utilizar a palavra‐chave override no método da subclasse, e a
palavra‐chave virtual no método da classe base.
12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 4 128


Agora que já temos os conceitos básicos de herança, vamos ver um código de
exemplo?

public class Animal

esta é nossa classe base Animal

public String nome


o atributo nome é público será herdado por todas as subclasses

public virtual void FazerBarulho


Console WriteLine Grunhido

public virtual void Comer

Console WriteLine Nhac


12542341605

os métodos FazerBarulho e Comer estão marcados com a


palavra chave virtual ou seja podem ser sobrescritos

public void Dormir


Console WriteLine Zzz

public void Andar


Console WriteLine Pegada

já os métodos Dormir e Andar não poderão ser sobrescritos Todos


os animais que herdarem a classe Animal poderão Dormir e Andar apenas
através desses métodos da classe base

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 5 128


public class Cachorro Animal
Cachorro será nossa primeira subclasse que extende Animal Repare que
o símbolo utilizado para indicar a herança é o sinal de
dois pontos

public override void FazerBarulho


Console WriteLine Au

O método FazerBarulho foi sobrescrito repare na palavra chave


override Ela indica que o método que será chamado será o da classe
filha e não mais o da base Ou seja se você chamar
cachorro FazerBarulho O resultado será Au e não mais Grunhido

public override void Comer


Console WriteLine Hum osso

public class Hipopotamo Animal

public override void FazerBarulho


base FazerBarulho
Console WriteLine

O método FazerBarulho na classe Hipopótamo também foi sobrescrito


mas digamos que você não saiba o que o método FazerBarulho do
Hipopótamo tem de diferente você pode chamar novamente o FazerBarulho
do Animal é isso que a linha base FazerBarulho faz executa o método
da classe base Então o resultado desse método será Grunhido

public override void Comer


Console WriteLine Hum grama

Código bem comentado não precisa de explicação certo? Esses são os conceitos básicos de
Herança em C#.
12542341605

encapsulamento
Você deve ter percebido a palavra chave public em nossos exemplos de herança. Isso
significa que todas as classes e métodos são visíveis por todas as outras classes da
aplicação que as instanciarem.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 6 128


Mas nem tudo deverá ser público não é mesmo? Para isso o C# possui modificadores de
acesso, através deles é possível realizar o encapsulamento, ou seja, outras classes só
verão o que for realmente necessário, a complexidade ficará “escondida”. Caso nenhum
modificador seja utilizado, o padrão para atributos e métodos é privado, e para classes e
interfaces é internal.

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 7 128


foreach
Um dos comando especiais do C# é o foreach através dele é possível fazer um loop em
qualquer lista genérica. Diferente do for que apenas itera até que uma condição seja
verdadeira.

Mas o que é uma lista genérica? Elas também são chamadas de Collections. Um exemplo
é a própria classe List (que faz parte do framework .Net), outro são os arrays. A
questão é que para que possa ser percorrido pelo foreach obrigatoriamente sua coleção
implementará a interface IEnumerable<T>

Vamos ver um trecho de código de exemplo?

List Pessoa pessoas new List Pessoa

foreach Pessoa pessoa in pessoas 12542341605

Console.WriteLine(pessoa.name);

A saída desse loop serão os nomes de todas as pessoas que tiverem sido inseridas na lista,
em ordem. Caso a lista esteja vazia, o loop não imprimirá nada.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 8 128


Muito prático, não é mesmo? Mas como? O quê o foreach executa por trás das
cortinas é isso:

IEnumerator Pessoa enumerator


pessoas GetEnumerator()
while enumerator MoveNext()
Pessoa pessoa enumerator Current
Console.WriteLine(pessoa.name);

MoveNext() ­ retorna true se existe outro elemento na lista, e false quando o


enumerator chega ao final da lista.

Current() ­ retorna uma referência para o elemento atual.

Muito mais fácil usar apenas o foreach não é mesmo? É importante lembrar
dessa sintaxe! Olhe novamente o trecho de código acima e repare na
colocação dos parentêses e da palavra reservada in.

yield return / yield break


Já entendemos como funciona a interface IEnumerable<T>, a partir do .Net 2.0 foi
introduzida a instrução yield para auxiliar na criação de enumeradores para diferentes
conjuntos de objetos, inclusive enums criadas pelo desenvolvedor. Vamos entender seu
funcionamento através de exemplos.

Suponha que você quer retornar um conjunto de números de 1 a 100, provavelmente


12542341605

você faria algo parecido com o método abaixo:

public static List int GetListaNumeros

var lista new List int


for int i i i

lista Add i

return lista

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 9 128


Agora vamos ver o mesmo trecho utilizando o yield:

public static IEnumerable int GetListaNumeros

for int i i i

yield return i

Vamos fazer o jogo dos 7 erros? Procure as diferenças!

Encontrou todas? Achou mais simples?

Logo de cara a gente percebe que não é preciso mais utilizar a lista genérica de inteiros.
O que já nos poupou 2 linhas, além disso agora está mais claro que estou retornando
números e não apenas uma variável chamada “lista”.

Perceba que o retorno agora é IEnumerable int ainda é uma lista! Essa é a “mágica”
do yield ele é um criador de objetos enumeráveis. Ou seja, você ainda irá retorna uma
lista de 1 até 100, a diferença é que a cada rodada do loop eu já retorno o objeto que
está sendo inserido na lista. Dessa forma há um ganho de desempenho, imagine se o loop
não fosse só até 100, mas fossem milhões?

12542341605

Como o retorno do nosso método GetListaNumeros é um IEnumerable int , nós


podemos utilizar este método dentro de um foreach.

foreach int i in GetListaNumeros

Console WriteLine Meu número é i

Agora que já entendemos o yield return, ficou simples entender o yield break. Dentro de
um loop normal o comando break sozinho faz a iteração parar certo? Com o yield break
é a mesma coisa, a diferença é que ele vai mais além, ele encerra o método, ou seja,

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 10 128


mesmo que esteja dentro de loops aninhados a execução vai terminar. Vamos para mais
um exemplo:

public static IEnumerable string GetMaisResultados

for int i i i

yield return Valor i

yield break

Faça outra coisa

for int i i i

yield return Outro valor i

Qual é o retorno desse método? Pense um pouquinho…

Se você falou “Valor 0” acertou! Se não, vamos entender agora? O yield break é
poderoso lembra? Ele sai do método todo! E não apenas do loop. Então aquele segundo
for depois do comentário “Faça outra coisa” não será executado.

LINQ
LINQ é uma biblioteca introduzida no Visual Studio 2008. A sigla significa Language
Integrated Query (Linguagem de Consultas Integrada), esta biblioteca ajuda o
desenvolvedor a fazer consultas de dados uma maneira mais simples, agrupar dados, e
também mesclar dados de diferentes fontes (coleções, banco de dados, até xml). Para
12542341605

utilizar o LINQ basta incluir no início do arquivo a linha using System Linq

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 11 128


‘?’ operador condicional ternário
O operador condicional ‘?’ retornará um entre dois valores dependendo da condição. Esta
é sua sintaxe: condicao ? primeira_expressao : segunda_expressao; Caso a
condição seja verdadeira a primeira_expressao é retornada, caso seja falsa, a
12542341605

segunda_expressao é retornada. Vamos ver a comparação de um mesmo trecho de


código feito com o if‐else e com o ‘?’.
int entrada Convert ToInt Console ReadLine
string classificacao

construção com if else


if entrada
classificacao positivo
else
classificacao negativo
operador condicional
classificacao entrada positivo negativo

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 12 128


FRAMEWORK .NET

Em uma aplicação normalmente temos algumas funcionalidades que são comuns, temos
os botões (maximizar, minimizar), checkboxes, listas, formulários que devem ser salvos
em banco de dados, temos que desenhar gráficos, ler e escrever arquivos.Todas essas
ferramentas estão disponíveis no .Net. O programador pode utilizar suas bibliotecas e
dessa forma ganha mais tempo para focar nas especifidades de sua aplicação. Essas
ferramentas são divididas em diversos namespaces. Por exemplo, para trabalhar com
formulários adicionamos em nossa aplicação o namespace System Windows Forms

Quando compilamos o programa, ele é traduzido para a Common Intermediate


Language (CIL). Ao final, é gerado o arquivo executável (.exe). Quando você dá dois
cliques sobre o arquivo executável, o programa “roda” no Windows, mas existe uma
camada extra entre o programa e o Windows, que é o Common Language Runtime
(CLR). Esta camada é uma máquina virtual que trata as questões de sistema operacional
e de hardware, tirando essa preocupação do desenvolvedor.
12542341605

Visual Studio
O Visual Studio é um conjunto de ferramentas que auxiliam na criação de software,
desde o planejamento até o design da interface gráfica, codificação, teste, debugging,
análise da qualidade de código e de performance, implantação. Todas essas ferramentas
são integradas e estão disponíveis na IDE (Integrated Development Environment) Visual
Studio.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 13 128


Existem três versões o Visual Studio Community (gratuito), o Visual Studio Enterprise
(pago) e o Visual Studio Code (gratuito, código fonte para MAC e Linux).

O Visual Studio permite a criação de:


1. apps e jogos para Windows, Android e iOS.
2. websites e web services baseados em ASP.NET, JQuery, AngularJS, e outros
frameworks.
3. aplicações para plataformas e dispositivos diversos como Azure, Office,
Sharepoint, entre outros.
4. jogos e aplicações com uso intensivo de gráficos para diversos dispositivos
Windows, incluindo o Xbox, com a utilização do DirectX.

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 14 128


Este é o famoso Visual Studio IDE (versão 2015). Nela podemos ver um projeto aberto, a
solução “BGs Restaurant Guide”.

Agora que você já foi apresentado a tela do Visual Studio, vamos falar um pouco mais de
12542341605

alguns itens destacados:

Visual Studio Team Services ‐ a Team Explorer Window permite a navegação pelo
controle de versão de código e dos itens de trabalho da equipe do projeto.
Open Solution ‐ o Solution Explorer permite a navegação pelas pastas e arquivos
do projeto.
Code Editor ‐ Toda IDE possui essa área, que é onde você efetivamente escreve o
código.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 15 128


Uma ferramenta que merece destaque é a ToolBox. A imagem abaixo mostra os
Controles que você pode incluir no seu formulário apenas clicando e arrastando.

Digamos que você queira criar um formulário como o da figura a seguir, nesse caso o
Visual Studio adicionará Controles na sua classe, eles são objetos como qualquer outro,
porém já tem um padrão de desenho.

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 16 128


Para projetos que utilizam uma interface baseada em XAML, o designer padrão é o Blend.
Ele é integrado ao Visual Studio.

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 17 128


Não existem muitas questões de C#, .Net e Visual Studio, mas estas que
vamos resolver já darão uma boa noção de como é cobrado. São várias provas
diferentes. Mas fique tranquilo, tem muita coisa apenas de lógica de
programação, sendo possível resolver com um teste de mesa. Mas também é
preciso ter familiaridade com a sintaxe, então vamos praticar!

1. (FGV ‐ 2015 ‐ CM CARUARU ‐ ANALISTA LEGISLATIVO) Analise o código C# .NET a


seguir.

Assinale a opção que apresenta corretamente o resultado produzido pela execução


do trecho acima.
A) 2, 1, 4, 7, 10
B) 5, –2, 1, 4, 10
C) 2, 1, 4, 7
D) 5, –2, 1, 4
E) 5, –2, 1, 4, 7
12542341605

Comentários:
Esse tipo de questão é muito comum, e você consegue resolver tranquilamente,
basta realizar um teste de mesa, ou seja “rodar” o algoritmo, passo a passo.

Antes, vamos relembrar a sintaxe do for. Ele é um dos comandos de repetição,


assim como o while. A variável i não precisa ter sido declarada anteriormente,
você pode declará‐la dentro do próprio for. Normalmente é um número inteiro

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 18 128


int. As três instruções dos parênteses são as seguintes: (valor inicial; condição;
incremento/decremento). Então nesse caso a variável i começa com ‐5. O loop
continuará até que i seja menor ou igual 7 (Isso é importante! Não erre e vá até o
6!). E a cada final de rodada o valor de i será somado a 3. Repare! Foi utilizado o
operador += que é a forma mais rápida de escrever i = i + 3.

A instrução de dentro do for, Console.WriteLine(i); Apenas escreve o valor da


variável na saída e pula uma linha. A saída pode ser o terminal, mas se você
estiver utilizando o Visual Studio, sairá na aba Output.

Agora ᢴcou fácil não é? Vamos ao teste de mesa:


passo i i <= 7 saída ­5 i
passo i i <= 7 saída ­2 i
passo i i <= 7 saída 1 i
passo i i <= 7 saída 4 i
passo i i <= 7 saída 7 i
passo i i > 7 condição retorna false não entra
mais no loop

Resposta: Letra e)

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 19 128


2. (FGV ‐ 2015 ‐ TCE‐SE ‐ ANALISTA) Analise o código C# mostrado abaixo.

O resultado exibido pelo programa é:


A) ‐10
B) ‐10, ‐7, ‐4, ‐1, 2, 5, 8 <‐
C) ‐7, ‐4, ‐1, 2, 5, 8
D) ‐7, ‐4, ‐1, 2, 5, 8, 11
E) 0

Comentários:
Vamos iniciar a execução desse programa pelo método Main(), dentro dele
temos um foreach chamando o método XPTO com os argumentos -10 e 10.
12542341605

Esses argumentos são os parâmetros from e to. Eles são os valores de início
(from) e ᢴm (to) do for que está dentro do método. Então, vamos traduzir o for:

for int i i i
yield return i

yield break

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 20 128


Nessa aula já vimos o funcionamento do yield return e do yield break. Então
repare que o yield break está fora do for, isso signiᢴca que o loop será
executado até o ᢴnal preenchendo a lista IEnumerable<int>. Então os valores
retornados irão começar de -10, pulando de 3 em 3, até o último número menor
que 10: -10, -7, -4, -1, 2, 5, 8 (8+3 é 11. Ultrapassa 10 e não entra.). Retornamos
então para o método Main(), o foreach apenas percorre todos os valores e eles
são escritos na tela.

Resposta: Letra b)

3. (FGV ‐ 2015 ‐ TJ‐BA ‐ ANALISTA JUDICIÁRIO) Observe o trecho inicial, criado no


Visual Studio 2010 Ultimate, para uma aplicação de console escrita em C#.
using System
using System Collections Generic
using System Linq
using System Text

namespace ConsoleApplication
class Program

static void Main string args

A diretiva using System Linq refere‐se a um conjunto de padrões e artefatos


destinados à:
A) criação e utilização de relatórios; 12542341605

B) realização de consultas e atualizações de dados;


C) criação e utilização de expressões regulares;
D) comunicação remota direta com outras aplicações C#;
E) identificação e utilização de Web Services.

Comentários:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 21 128


Como visto na aula, o namespace System.Linq fornece classes e interfaces que
suportam consultas que utilizam a Language‐Integrated Query (LINQ) para
consulta e atualização de dados.

Resposta: Letra b)

4. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE


DESENVOLVIMENTO DE SISTEMAS) Considere o código escrito na linguagem C# mostrado
a seguir.

O resultado produzido pela execução desse código é


A) Acelerando.
B) Passeando.
12542341605

C) Movendo.
D) MovendoAcelerandoPasseando.
E) AcelerandoPasseando.

Comentários:
Essa é uma questão simples, mas que pode assustar. Mas não você! Nós já sabemos
como funciona a herança. A hierarquia no código dessa questão (do mais
especializado para o mais generalizado) é Fusca ‐> Veículo ‐> Automóvel. Todos

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 22 128


possuem o método mover(). Mas você deve ter reparado que Automóvel e Fusca
utilizaram a palavra chave override. Ou seja, estão sobreescrevendo o método
da classe pai.
Agora vamos analisar o método Main(). Perceba que apesar do tipo ser do pai,
Veículo, o objeto criado foi o Fusca. Ou seja, a variável veiculo referencia um
objeto Fusca. Não é errado tipar um objeto da classe mais especializada
(subclasse ‐ filho) com o tipo da classe mais generalizada (classe base ‐ pai).
Afinal podemos chamar um Fusca de Veículo na vida real não é mesmo?

Então agora você já sabe o que acontecerá quando o métoodo executar


veiculo mover Será chamado o método mover() da classe Fusca. Esse
método simplesmente escreve “Passeando” na tela.

Resposta: Letra b)

5. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE


DESENVOLVIMENTO DE SISTEMAS) Na linguagem C#, a forma correta para inicializar um
array de inteiros de cinco posições, com os números de 1 até 5 é
A) int[] Inteiros={1,2,3,4,5};
B) int[] Inteiros=[1,2,3,4,5];
C) int[5] Inteiros={1,2,3,4,5};
D) int Inteiros[]={1,2,3,4,5};
E) int Inteiros[]=new int[5]{1,2,3,4,5}; 12542341605

Comentários:
Lembre‐se a sintaxe de declaração do C# segue o formato Tipo
nome da variavel inicializacao Para arrays o tipo deve ser seguido por
colchetes vazios: int[]. E caso deseje inicializar com valores não é obrigatório o
uso do new, basta colocar os valores entre chaves: int[] inteiros =
{1,2,3,4,5}. O item B usa colchetes no lugar das chaves, o item C coloca a
quantidade de elementos dentro dos colchetes do tipo, o item D coloca os

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 23 128


colchetes após o nome da variável, e a letra E contém o mesmo erro da letra D (a
inicialização com new apesar de desnecessária, pois o compilador já sabe que
precisa alocar um espaço de 5 inteiros na memória, não está errada).

Resposta: Letra a)

6. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE


DESENVOLVIMENTO DE SISTEMAS) Uma empresa que desenvolve projetos no Visual
Studio decidiu utilizar o Team Foundation Service. Uma característica relacionada ao
desenvolvimento em equipe e outra, relacionada ao controle de código do Team
Foundation, são respectivamente
A) quadro de tarefas e gerenciamento de conflitos.
B) funcionar com Eclipse e permitir chamadas de função.
C) integrar com Microsoft Visual Studio e usar a plataforma .NET.
D) testes de unidade e função de auto completar código.
E) definição de testes e definição de complexidade.

Comentários:
O Team Foundation Service é um complemento do Visual Studio que permite que
uma equipe trabalhe junto em um mesmo projeto. Compartilhando o código,
acompanhado o trabalho e as entregas.
A figura abaixo mostra um exemplo de quadro de tarefas (característica de
desenvolvimento em equipe)
12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 24 128


No Team Foundation também temos a ferramenta de controle de versão de código
que permite o gerenciamento de conflitos.

Resposta: Letra A)

7. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE


DESENVOLVIMENTO DE SISTEMAS) Uma empresa possui um conjunto de sistemas
desenvolvidos com plataformas/tecnologias diferentes. Como parte da estratégia
dessa empresa, decidiu‐se que os sistemas precisam estar interoperáveis ou
integrados. Foi proposto o uso de serviços Web baseados em SOAP. Considerando‐se a
plataforma .NET, essa proposta
A) não deve ser aceita, pois a plataforma .NET não possui suporte para criação de
serviços Web baseados em SOAP.
B) não deve ser aceita, pois a integração de sistemas utilizando SOAP é pouco empregado
na indústria, não existindo padrões para a operação de sistemas heterogêneos.
C) deve ser aceita, pois serviços web baseados em SOAP têm como característica
12542341605

principal serem restritos à plataforma .NET.


D) deve ser aceita, entretanto, com a ressalva que serviços Web baseados em SOAP não
possuem descritores para os serviços desenvolvidos.
E) deve ser aceita, pois serviços web baseados em SOAP têm suporte na plataforma .NET
além de serem amplamente adotados por empresas para integração de sistemas
heterogêneos.

Comentários:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 25 128


Nenhum segredo aqui, SOAP é um padrão para a descrição de Web Services
amplamente utilizado, e a plataforma .NET tem suporte através da SOAP
Interface.

Resposta: Letra E)

8. (VUNESP ‐ 2014 ‐ TCE‐SP ‐ AGENTE DA FISCALIZAÇÃO FINANCEIRA) Observe a


declaração de um vetor em C#:
int vetor new int
Sem alterar o resultado, essa mesma declaração poderia ser escrita como:
A) int[] vetor = { 1, 2, 3 };
B) int[] vetor = int { 1, 2, 3 };
C) int[] vetor = new { 1, 2, 3 };
D) int[] vetor = new int[];
E) int[] vetor = new int[] = { 1, 2, 3 };

Comentários:
Essa está tranquila, as letras b), c), d) e e) darão erro de compilação, não existe
essa sintaxe. A letra a) é a correta, inclusive é até mais correta do que o
enunciado, pois é desnecessária a inicialização utilizando new quando já
colocamos os valores desejados para o vetor entre colchetes.

12542341605

Resposta: Letra a)

9. (VUNESP ‐ 2014 ‐ TCE‐SP ‐ AGENTE DA FISCALIZAÇÃO FINANCEIRA) Na plataforma


.NET, o componente responsável pela execução do código é chamado de
A) Common Execution Architecture – CEA.
B) Common Intermediate Language – CIL.
C) Common Language Runtime – CLR.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 26 128


D) Common Type System – CTS.
E) Common Virtual Machine – CVM.

Comentários:
Conforme vimos na aula a máquina virtual do .NET é o CLR ‐ Common Language
Runtime. As outras alternativas que também existem são a CIL ‐ Common
Intermediate Language, que é a linguagem de instruções para a qual o código é
compilado e a CTS ‐ Common Type System que define como os tipos são
declarados, utilizados e gerenciados no CLR.

Resposta: Letra C)

10. (VUNESP ‐ 2014 ‐ PRODEST‐ES ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO) Na


linguagem de programação C#, a sintaxe correta para declarar um objeto do tipo
Carro e produzir uma nova instância desse objeto é:
A) Carro obj = new Carro();
B) Carro obj = Carro.new;
C) Carro obj = Carro();
D) Carro = new Carro();
E) obj = Carro();

Comentários:
Simples não é? Você já sabe que a sintaxe de declaração do C# é TipoObjeto
12542341605

nome da variavel new TipoObjeto

Resposta: Letra a)

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 27 128


11. (VUNESP ‐ 2014 ‐ PRODEST‐ES ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO) Na
linguagem de programação C#, a declaração dos tipos e de seus membros permite que
seja determinada a sua visibilidade por meio de modificadores de acesso. Os
modificadores disponíveis para esse fim são:
A) default, open, closed, partial e full.
B) full‐access, write, write‐only, read e read‐only.
C) global, local, nested e virtual.
D) public, private, published e protected.
E) public, private, protected, internal e protected internal.

Comentários:
Conforme vimos na aula, C# possui 5 modificadores de acesso. Você já sabe quais
são não é?

Resposta: Letra e)

12. (VUNESP ‐ 2013 ‐ IMESC ‐ ANALISTA DE TECNOLOGIA) Na linguagem C#, para inserir
um elemento no final de um ArrayList, deve ser utilizado o método:
A) Add.
B) AddToEnd.
C) Append.
D) Insert.
12542341605

E) Put.

Comentários:
Um ArrayList é um tipo do .Net que pode ser utilizado ao adicionar using
System Collections É uma lista de objetos não genérica. Para adicionar um
elemento ao final do array utilizamos o método Add object value . E o
elemento sempre será inserido ao final do ArrayList. O único outro método que
existe é o Insert int index object value Nesse caso, o objeto será
inserido no índice especificado como parâmetro.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 28 128


Resposta: Letra a)

13. (VUNESP ‐ 2013 ‐ IMESC ‐ ANALISTA DE TECNOLOGIA) Analise o seguinte trecho de


código em linguagem C#:

Após a execução desse trecho de código, o valor das variáveis “x” e “y” serão,
respectivamente,
A) 2 e 0.
B) 10 e 18.
C) 10 e 20.
D) 12 e 19.
E) 12 e 20.

Comentários:
Nessa questão vamos trabalhar com o operador condicional ternário ‘?’. Como já
foi abordado na aula fica fácil, vamos executar o algoritmo?

A primeira coisa que devemos fazer é separar as expressões a maior hierarquia é


a atribuição, então podemos simplificar para x expressao e y
expressao ; Agora é só resolver as expressões 1 e 2.
12542341605

expressao1 x x y y x
Nossa condição é x falso. É retornada a segunda
expressão: y x 2.
Então, expressao1 = 2. E x é o mesmo que x x x 12.

expressao2 y y x x y
Nossa condição é y falso. É retornada a segunda
expressão: x y 0 (lembre‐se que estamos trabalhando com inteiros!).
Então, expressao2 = 0 e y é o mesmo que y y y 20.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 29 128


Resposta: Letra e)

14. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Na linguagem C#,


é possível dividir a definição de uma classe em diversos arquivos. Para tanto, é
necessário que a declaração da classe contenha a palavra chave:
A) split
B) partial
C) extern
D) continue
E) abstract

Comentários:
Apesar de não ter abordado na aula podemos trabalhar por eliminação. Sabemos
que ‘abstract’ é a classe que não pode ser instanciada, que precisa ser
implementada por outra classe. ‘continue’ é a palavra chave utilizada em loops
quando você quer que a iteração continue e que o restante das instruções sejam
“puladas”, o ‘extern’ é um modificador que indica que seu método é
implementado fora da sua classe. Aí nos sobram split e partial, as duas palavras
caberiam, mas se você lembrar que split é na verdade um método para separar
strings, sobra apenas o partial

Uma classe pode ser dividida em vários arquivos, quando o compilador vê a


12542341605

palavra-chave partial ele sabe que este arquivo é apenas um pedaço da classe.
Um exemplo de uso dessas classes parciais são os formulários do Visual Studio, se
você adicionar um form em seu projeto, a IDE irá criar dois arquivos, um com a
parte do formulário que você pode alterar e outro com o código que é gerado
automaticamente.

Resposta: Letra b)

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 30 128


15. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Na linguagem C#,
a forma correta de declarar a classe B, derivada da classe A, é:
A) public class B inherits A { }
B) public class B => A { }
C) public class A extends B { }
D) public class B : A { }
E) public class B implements A { }

Comentários:
Essa você já sabe não é? Vimos na aula. Em C# a sintaxe é a mesma tanto para
herança quanto para a implementação de interfaces.

Resposta: Letra d)

16. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Na linguagem C#,


a palavra reservada “sealed” pode ser utilizada na declaração de classes. Ela tem a
função de
A) indicar que a classe possui métodos que precisam ser sobrescritos.
B) impedir que a classe seja instanciada mais de uma vez.
C) impedir que a classe seja derivada por outras classes.
D) garantir que a classe não seja instanciada por classes que não estejam no mesmo
namespace.
12542341605

E) indicar que o conteúdo da classe é imutável, isto é, uma vez instanciada, seu conteúdo
não é mais alterado.

Comentários:
Esse é um modificador extra da linguagem C# e indica que a classe não pode ser
derivada, ou seja não há herança, ela está “selada”, “fechada”.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 31 128


Resposta: Letra c)

17. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) A plataforma .NET


possui as classes System.String e System.Text.StringBuilder para a representação de
cadeias de caracteres. Apesar de ambas terem funcionalidades semelhantes, a
utilização do System.Text.StringBuilder é indicada quando houver necessidade de
A) armazenar grandes quantidades de caracteres.
B) transferir os dados armazenados para uma base de dados.
C) armazenar caracteres alfanuméricos.
D) manipular a cadeia de caracteres.
E) proteger os dados armazenados contra acesso indevido.

Comentários:
O StringBuilder é uma classe que cria e concatena strings de forma eficiente. O
método Append() adiciona uma string ao final do objeto, o AppendFormat()
utiliza parâmetros, e o AppendLine() insere uma linha ao final. Para imprimir o
texto do StringBuilder deve‐se utilizar o ToString(). Vejamos um exemplo:
StringBuilder stringBuilder new StringBuilder Olá
stringBuilder Append amigos
stringBuilder AppendFormat Tenho anos e me chamo
rapaz Idade rapaz Nome
stringBuilder AppendLine O tempo está bom
Console WriteLine stringBuilder ToString
12542341605

Resposta: Letra D)

18. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) O Global Assembly


Cache (GAC) é um componente da plataforma .NET cuja função é
A) armazenar os dados transmitidos pela rede com o intuito de agilizar futuras
requisições.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 32 128


B) permitir que seja utilizada linguagem Assembly no código .NET.
C) manter os objetos eliminados pelo Garbage Collector.
D) garantir acesso às variáveis globais por todos os módulos de uma aplicação.
E) centralizar o armazenamento de código .NET compartilhado entre aplicações.

Comentários:
Conforme vimos na aula o GAC ‐ Global Assembly Cache centraliza o código
compartilhado entre as aplicações.

Resposta: Letra E)

19. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Todo código .NET
possui um conjunto de metadados chamados “Manifest”. Esses metadados descrevem
A) como os elementos do código se relacionam uns com os outros e suas dependências.
B) as bases de dados utilizadas pela aplicação.
C) as conexões utilizadas pela aplicação para controle do firewall.
D) as permissões de acesso dos usuários à aplicação.
E) se a aplicação necessita realizar chamadas de baixo nível para controlar algum
dispositivo de hardware.
Comentários:
O arquivo Manifest é um XML que descreve quais assemblies são necessários para
que uma aplição execute. Veja um exemplo do arquivo Manifest:
xml version encoding UTF standalone yes
assembly xmlns urn schemas microsoft com asm v manifestVersion

compatibility xmlns urn schemas microsoft com compatibility v


application
This Id value indicates the application supports Windows Vista functionality
12542341605

supportedOS Id e c a fe deee d f
This Id value indicates the application supports Windows functionality
supportedOS Id b a d fbd e d a f a
This Id value indicates the application supports Windows functionality
supportedOS Id a f e b ba c d d a a e
This Id value indicates the application supports Windows functionality
supportedOS Id f c e bb d f d da
application
compatibility

assemblyIdentity type win


name myOrganization myDivision mySampleApp
version
processorArchitecture x
publicKeyToken

dependency
dependentAssembly
assemblyIdentity type win

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 33 128


name Proseware Research SampleAssembly
version
processorArchitecture X
publicKeyToken
language

dependentAssembly
dependency
assembly

Resposta: Letra A)

20. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Na plataforma


.NET, a classe base de todas as outras classes é a
A) Base.System.Class
B) Base.Object
C) Net.System.Object
D) System.Base
E) System.Object

Comentários:
A classe base é a System.Object o namespace com as classes base do .Net é o
System. Não existem os namespaces Base e Net.

Resposta: Letra E)

21. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Quando um código


12542341605

é compilado para a plataforma .NET, ele é traduzido para um código em Linguagem.


Intermediária Comum (CIL). Esse código gerado é
A) independente de CPU e plataforma, podendo ser executado por qualquer ambiente
que suporte a CLI.
B) independente de plataforma, no entanto, pode ser executado apenas por um servidor
web.
C) independente de plataforma, porém apenas pode ser executado por processadores de
64 bits.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 34 128


D) dependente de plataforma, podendo ser executado apenas por ambientes Linux.
E) dependente de plataforma, podendo ser executado apenas nos ambientes Windows.

Comentários:
A CIL ‐ Common Intermediate Language gera um código independente de
plataforma e também de CPU pois são instruções baseadas na Common Language
Infrastructure (CLI).

Resposta: Letra A)

22. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ANALISTA DE SISTEMAS) Em C#, os


métodos chamados pelo mecanismo de execução do programa quando o objeto está
prestes a ser removido da memória são denominados de
A) Garbage Collection.
B) Destruidores.
C) Propriedades.
D) Indexadores.
E) Eventos.

Comentários:
As alternativas deixaram a questão fácil, mas vamos aproveitar e falar um
pouquinho dos destrutores ou destruidores. Como o enunciado diz, os
destruidores não podem ser chamados explicitamente, quem os chama é o
12542341605

Garbage Collector (Coletor de Lixo). Abaixo um exemplo de destruidor, ele é


definido pelo sinal ‘~’ seguido pelo nome da classe.

class Exemplo

Exemplo

System Diagnostics Trace WriteLine O destruidor da Classe Exemplo


foi chamado

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 35 128


Resposta: Letra b)

23. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ANALISTA DE SISTEMAS) Analise o


seguinte trecho do código C#:

Sobre a linha 03 do código apresentado, é correto afirmar que


A) a variável y recebe o valor de x se esta última (x) for do tipo int.
B) atribui à variável y o valor da variável x convertido para o tipo int.
C) passa como parâmetro o valor da variável x para y, do tipo double.
D) a variável y recebe por referência o valor da variável x do tipo double.
E) multiplica o valor da variável int por x e atribui o valor calculado para a variável y.

Comentários:
Este é um exemplo do cast que é a conversão pelo compilador de uma variável de
um tipo para outro tipo. Várias linguagens fazem o cast. Não é diferente em C#.

Resposta: Letra b)

24. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ANALISTA DE SISTEMAS) Segundo a


12542341605

Microsoft, um conjunto de recursos introduzidos no Visual Studio 2010 que estende


as capacidades de consultas à sintaxe da linguagem de C# e Visual Basic é conhecido
como
A) LINQ.
B) T‐SQL.
C) OQL.
D) ADO.
E) ASP.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 36 128


Comentários:
Cabe recurso, pois o LINQ foi introduzido no Visual Studio 2008. Mas realmente os
recursos da biblioteca LINQ trazem novas capacidades para que o desenvolvedor
trabalhe com consultas.

Resposta: Letra a)

25. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ADMINISTRADOR DE BANCO DE DADOS)


Sobre a linguagem C# assinale a alternativa correta.
A) É uma linguagem de programação orientada a objetos, desenvolvida pela Microsoft
como parte da plataforma .NET caracterizada por ser fracamente tipada.
B) É a única linguagem de programação que suporta herança múltipla pura, ou seja, cada
classe pode herdar características de uma ou mais classes.
C) A linguagem não suporta ponteiros porque os blocos de códigos requisitariam
permissões mais altas de segurança para serem executados.
D) O garbage collection é um processo usado para a manutenção do processador evitando
erros comuns que podem levar ao encerramento do programa.
E) Há três tipos de passagem de parâmetros, por valor, por referência e por saída.

Comentários:
Vamos comentar os erros de cada alternativa:
A) É uma linguagem fortemente tipada.
B) Não suporta herança múltipla.
12542341605

C) Ponteiros são suportados (int* p ‐ p é um ponteiro para um inteiro).


D) O garbage collection é o processo de “coleta de lixo”, através dele
objetos que não são mais referenciados podem ser liberados da memória,
que fica livre para a utilização por outro objeto.

Resposta: Letra e)

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 37 128


26. (FCC ‐ 2014 ‐ TRF 3ª REGIÃO (SP MS) ‐ ANALISTA JUDICIÁRIO ‐ INFORMÁTICA)

12542341605

O programa C# apresentado é executado apenas uma vez e finaliza. Para que o


programa possa ser executado diversas vezes, até que o usuário digite 0 para

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 38 128


finalizá‐lo é necessário inserir Console.WriteLine("0. Finaliza."); como mais uma opção
do menu e inserir a seguinte instrução de repetição:
A) while (opcao != 0) antes do switch, que está na linha 33, com os delimitadores de
início e fim { } desta instrução envolvendo as linhas 33 a 44.
B) while (opcao != "0") antes do switch, que está na linha 33, com os delimitadores de
início e fim { } da instrução envolvendo as linhas 33 a 44.
C) for (; ;) { após o delimitador de início de bloco { na linha 26 e uma chave } para fechar
o bloco logo após a linha 44. Antes do switch, que está na linha 33, inserir o comando if
(opcao == "0") break;
D) do antes do switch, que está na linha 33, com o delimitador de início { da instrução
envolvendo as linhas 33 a 44, e finalizando com o delimitador de fim } while (opcao !=
"0");
E) for (opcao=0;opcao<3;opcao++) após o delimitador de início de bloco { na linha 26 com
os delimitadores de início e fim { } da instrução envolvendo as linhas 27 a 44.

Comentários:
Mais uma questão de lógica de programação, vamos verificar todas as
alternativas:
A ‐ dentro do while, a condição está errado pois 0 é do tipo int e opção é do tipo
string isso causará um erro de compilação.
B ‐ Caso o while termine na linha 44, o valor da variável opção nunca será
atualizado, então caso o usuário selecione a opção = “1”, o programa entrará em
um loop infinito, sempre executando o trecho dentro do switch case opcao = “1”.
C ‐ Perfeito. Ao colocar o loop for na linha 26, o usuário visualizará novamente o
menu e poderá executar o programa quantas vezes desejar. Já que o for não
12542341605

possui condições. Porém, ao colocar o comando ‘if (opcao == "0") break;’ o loop é
interrompido quando o usuário selecionar a opção “0”.
D ‐ Aqui temos o mesmo problema da letra B.
E ‐ Mesmo erro da letra B. E além disso, nesse caso não adianta trabalharmos com
o valor de opcao no for, pois ele será sobrescrito pelo valor que o usuário digitar.
Então mesmo que o usuário digite a opção 0, não sairá do programa pois a
condição continua sendo válida opção é < 3.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 39 128


Resposta: Letra c)
27. (IDEM) Considerando o programa e a linguagem C#, é correto afirmar:
A) Console é uma classe. As classes Object e System herdam desta classe.
B) Na linha [25]: Quando o aplicativo é iniciado, o método Main é o primeiro método
invocado. Em C#, bibliotecas e serviços não requerem um método Main como um ponto
de entrada.
C) WriteLine é um método da classe Console. Como a classe System herda da classe
Console, então WriteLine também é um método da classe System.
D) Na linha [11]: double celsius = Double.Parse(tempCelsius); significa que double é uma
classe e Parse é um método desta classe.
E) Na linha [42]: default é um atributo exclusivo do comando switch e é usado apenas
quando um valor numérico que não conste dos cases é fornecido pelo usuário.

Comentários:
Comentando cada alternativa:
A ‐ Console é sm uma classe, ela representada a entrada e saída padrão para a
aplicações de console. Porém System é o namespace para as classes bases do
.Net. A classe Console e a classe Object estão dentro deste namespace.
B ‐ Certo.
C ‐ A classe Console não pode sofrer herança. Ela faz parte do namespace System.
D ‐ Double com letra maiúscula é uma classe, que contém métodos como o
Parse(). Já double, com letra minúscula, é um tipo primitivo.
E ‐ Dois erros. Os valores não são numéricos, são strings. E o atributo default
também é utilizado fora do switch para indicar qual é o valor default de um tipo
12542341605

parametrizado (Este é um conceito avançado que não cabe em nossa aula, caso
queira saber mais veja a referência oficial).

Resposta: Letra b)

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 40 128


28. (FCC ‐ 2013 ‐ MPE‐SE ‐ANALISTA DO MINISTÉRIO PÚBLICO ‐ GESTÃO E ANÁLISE DE
PROJETO DE SISTEMA) A Microsoft disponibiliza canais para que desenvolvedores que
utilizam o Visual Studio consigam obter suporte ou relatar problemas. É correto
afirmar que dentre estes canais se encontrem
A) MSDN Forums, Microsoft Connect, Microsoft Support.
B) MS Development Support, Contact Center, Visual Studio Research.
C) MS DevNews, NET Developer Tools, Source Instant Search.
D) Contact Center, MSDN News, Visual Studio Development Center.
E) Visual Studio Research, Contact Center, MSDN Development Center.

Comentários:
Tipo de questão decoreba. A Microsoft gosta de colocar a marca em seus canais.
Então, os canais são os MSDN Forums, Microsoft Connect e Microsoft Support.

Resposta: Letra a)

29. (FCC ‐ 2012 ‐ TRE‐SP ‐ TÉCNICO DO JUDICIÁRIO ‐ PROGRAMADOR DE SISTEMAS) O


Microsoft Visual Studio é um conjunto completo de ferramentas para construir
aplicativos, incluindo aplicações para Web. Nesta ferramenta várias linguagens
compartilham o mesmo ambiente de desenvolvimento integrado (IDE). Este ambiente
possuí um analisador de código que pode oferecer, enquanto o código é digitado,
sugestões ao programador, como por exemplo tipos de dados e membros de classes e
12542341605

estruturas. Esse analisador é chamado


A)TextMate.
B)Lexical Analyzer.
C)IntelliSense.
D)Active Directory.
E)ActiveSync.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 41 128


Comentários:
Este é o famosos recurso de AutoComplete que nós desenvolvedores adoramos
não é? O VisualStudio chamou essa ferramenta de IntelliSense. Veja um exemplo
na figura abaixo.

Resposta: Letra c)

30. (CESPE ‐ 2013 ‐ BACEN ‐ ANALISTA ‐ ANÁLISE E DESENVOLVIMENTO DE SISTEMAS)


Considere a seguinte classe desenvolvida em C#.
class Teste

static void Main

int num
while num

Console WriteLine num é num


12542341605

Nessa situação, essa classe produz o seguinte resultado:


num é = 1
num é = 2
num é = 3
num é = 4
num é = 5

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 42 128


Comentários:
Repare que no while a variável num já é incrementada (num++). Então a
primeira linha a ser escrita é “num é = 2). Outra curiosidade dessa questão é a
utilização de um parâmetro. O valor entre chaves {0} será substituído pelo valor
do argumento que vem logo em seguida.

Resposta: Errado

31. (CESPE ‐ 2013 ‐ BACEN ‐ ANALISTA ‐ ANÁLISE E DESENVOLVIMENTO DE SISTEMAS) Em


C#, o operador ?? é denominado operador de concentração de nulo e é usado para
definir um valor padrão para tipos de valor anulável ou tipos de referência. No
exemplo abaixo, caso a variável num seja nula, o valor de x será igual a 1.
int x num

Comentários:
Exatamente, este operador equivale a if (x == null) return 1;

Resposta: Certo

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 43 128


32. (CESGRANRIO ‐ 2013 ‐ IBGE ‐ ANALISTA DE SISTEMAS ‐ DESENVOLVIMENTO) O que
ocorre com o programa C#, apresentado abaixo, quando é compilado e
posteriormente executado?

A) Compila corretamente, executa e imprime o número 45.


B) Compila corretamente, executa e imprime o número 9.
C) Compila corretamente e executa, mas nunca termina.
D) Compila corretamente, mas apresenta erro de execução.
E) Apresenta erro na compilação.

Comentários:
Esta é uma ótima questão para relembrarmos o funcionamento dos arrays e do
operador condicional ternário.
12542341605

Primeiramente é declarado um array ‘a’ de inteiros, com 10 posições;


Em seguida é declarada a variável auxiliar ‘i’ também inteiro e inicializada com o
valor 0 (Lembre‐se que o primeiro índice dos vetores é 0 e não 1, então o vetor de
tamanho dez irá de a[0] até o a[9]). O loop while irá preencher o vetor ‘a’.

A expressão do ternário é a seguinte: i > 0 ? a[i‐1] : 0.


Então na primeira iteração, o resultado é falso, será retornado o valor da
segunda expressão 0.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 44 128


a[0] = 0 + 0 => 0.

Nas próximas iterações, a condição do ternário será verdadeira (i>0), o vetor


receberá o valor do índice somado ao valor guardado na posição anterior a[i‐1].
a[1] = 1 + a[0] = 1 + 0 => 1.
a[2] = 2 + a[1] = 2 + 1 => 3.
a[3] = 3 + a[2] = 3 + 3 => 6.
a[4] = 4 + a[3] = 4 + 6 => 10.
a[5] = 5 + a[4] = 5 + 10 => 15.
a[6] = 6 + a[5] = 6 + 15 => 21.
a[7] = 7 + a[6] = 7 + 21 => 28.
a[8] = 8 + a[7] = 8 + 28 => 36.
a[9] = 9 + a[8] = 9 + 36 => 45.

O array está completo, e o loop while chega ao fim (i=10). E o valor impresso será
o valor de a[9] = 45.

Resposta: Letra a)

33. (CESPE ‐ 2013 ‐ TCE‐ES ‐ ANALISTA ADMINISTRATIVO ‐ INFORMÁTICA) Assinale a


opção correta acerca do NET Framework.
A) O Garbage Collector atua a cada instanciação de objetos com o objetivo de liberar
espaço de memória referente a objetos que não mais estejam em uso.
12542341605

B) Objetos de uma classe, quando passados como parâmetros, não permitem alterações,
visto que a passagem é sempre feita por valor.
C) Uma enumeração pode ser de qualquer tipo, apesar de, por definição, ter o tipo int.
D) A ocorrência de uma exceção é tratada por meio da instanciação da classe Exception,
ou de uma classe derivada da classe Exception e da captura desse objeto.
E) A classe BitVector32 apresenta melhor desempenho em comparação com a classe
BitArray, embora elas tenham a mesma funcionalidade.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 45 128


Comentários:
Vamos analisar item a item:
A ‐ Errado. O Garbage Collector não atua a cada instaciação. O CLR (Common
Language Runtime) executa a garbage collection conforme a necessidade.
B ‐ Errado. A passagem de objetos é feita por referência, permitindo alterações,
pois ao instaciarmos objetos estamos indicando uma referência a uma área de
memória. A passagem é feita por valor ‐ não sofre alterações ‐ quando os
parâmetros são tipos primitivos (obs: a palavra chave ref permite que o
desenvolvedor defina de forma explícita que o parâmatro será passado por
referência).
C ‐ Errado. As próprias enumerações são consideradas tipos. O item quer
confundir porque os elementos constantes da enum são por padrão int. Mas é
possível declarar uma enum com outros formatos numéricos como byte, sbyte,
short, ushort, int, uint, long, ulong (enum Dias byte Dom Seg Ter Qua
Qui Sex Sab
D ‐ Errado. As exceções não são instanciadas, elas são lançadas (throw) e devem
ser capturadas em um bloco (try … catch) para serem tratadas.
E ‐ Certo. Segundo a documentação, o BitVector32 é mais eficiente que o BitArray
para valores booleanos e pequenos inteiros usados internamente, pois o BitArray
pode crescer indefinidamente conforme necessário, mas para isso há um
overhead de memória e performance que uma classe precisa. Já o BitVector32 só
utiliza 32 bits.

12542341605

Resposta: Letra e)

34. (CESGRANRIO ‐ 2012 ‐ EPE ‐ ANALISTA DE GESTÃO CORPORATIVA ‐ TECNOLOGIA DA


INFORMAÇÃO) Na programação orientada a objeto, na linguagem C# em particular, a
capacidade de construir vários métodos com um mesmo nome, porém com
parâmetros diferentes na mesma classe, é chamada de
A) Polimorfismo universal
B) Polimorfismo paramétrico

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 46 128


C) Polimorfismo de subtipo
D) Sobrecarga de operadores
E) Sobrecarga de métodos

Comentários:
Esta é a descrição da sobrecarga (overload). Lembre‐se: se a assinatura é
diferente é sobrecarga, se a assinatura for igual é sobrescrita (override).

Resposta: Letra e)

35. (CESGRANRIO ‐ 2012 ‐ EPE ‐ ANALISTA DE GESTÃO CORPORATIVA ‐ TECNOLOGIA DA


INFORMAÇÃO) O Microsoft Visual Studio Team Foundation Server 2010 é a nova
plataforma colaborativa da Microsoft. Essa plataforma pode ser utilizada em
substituição ao sistema de controle de versão conhecido como
A) Team Explorer Everywhere
B) Work Item Tracking
C) Application Lifecycle Management
D) Visual SourceSafe
E) Development Platform Support

Comentários:
A antiga plataforma de colaboração era o Visual SourceSafe. Já o Team Explorer
12542341605

Everywhere é a ferramenta que permite a utilização do Team Foundation Server


no Eclipse. Work Item Tracking faz parte do Visual Studio Team Services e
permite que a equipe gerencie informações, bugs e tarefas para determinado
item de trabalho. O Application Lifecycle Management (ALM), o Gerenciamento
do Ciclo de Vida do Software compreende desde a governança, passando pelo
desenvolvimento até a manutenção do produto; o Visual Studio é uma ferramenta
de apoio não só ao desenvolvimento, mas também de todo o ALM. O Visual Studio
também oferece o Development Platform Support, que auxilia o desenvolvedor
com um ambiente preparado para a construção integrada da aplicação para todas

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 47 128


as plataformas Microsoft (Desktop, Windows Store, Windows Phone, Cloud
Services, etc).

Resposta: Letra d)

36. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ ENGENHARIA DE


SOFTWARE)O programador de um sistema Web deseja imprimir, em determinada tela,
a hora atual. Que fragmento de código C# atinge esse objetivo?
A) Now.ToString();
B) DateTime.Now.ToString( HH:mm );
C) DateTime.Actual.ToString( HH:mm );
D) Time.Now.ToString( HH:mm );
E) Now.ToString( HH:mm );

Comentários:
Esse é aquele tipo de questão que a gente tem que ter visto antes para acertar. A
struct que possui as informações de Data é a DateTime e o atributo Now retorna
a hora, dia, mes e ano atuais de acordo com o sistema. O método ToString
formata o resultado para mostrar as horas e minutos (HH:mm). O m minúsculo é
para não confundir com M maísculo do Mês.

12542341605

Resposta: Letra B)

37. (CESGRANRIO ‐ 2010 ‐ EPE ‐ ANALISTA DE GESTÃO CORPORATIVA ‐ TECNOLOGIA DA


INFORMAÇÃO) Determinado órgão público federal deseja implantar um sistema de
consulta na Internet. A plataforma utilizada será ASP.NET e a linguagem de
programação, C#. Na modelagem orientada a objetos desse sistema, é importante
considerar que a linguagem adotada
A) impede, no contexto de instanciação de objetos, o uso de classes abstratas.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 48 128


B) impede somente o uso de polimorfismo a fim de assegurar a legibilidade do código.
C) apresenta o conceito de namespaces para implementar associações entre classes.
D) proíbe o uso de interfaces para garantir a coesão e a modularidade do código.
E) implementa, no âmbito da generalização, somente herança simples.

Comentários:
Apesar de comentar sobre a plataform ASP.NET a questão é sobre C#. Já vimos na
aula que C# possui classes abstratas, polimorfismo (através de sobrecarga e
sobreescrita), interfaces e que os namespaces servem para organizar as classes
de uma biblioteca, e não associá‐las. E também vimos que é implementada a
herança simples.

Resposta: Letra e)

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 49 128


38. (FGV ‐ 2016 ‐ IBGE‐ ANÁLISE DE SISTEMAS ‐ DESENVOLVIMENTO DE SISTEMAS)
Analise o código C# exibido a seguir:

using System;
namespace ENIGMA
{
class Program {
static void Main(string[] args) {
P d = new P();
d.PP();
E s = new E();
s.A();
s.PP();
Console.ReadKey();
}
class P {
public void PP()
{
Console.WriteLine("PP");
}
}
class E : P {
public void A()
{
Console.WriteLine("A");
}
}
}
}
12542341605

O resultado produzido no console é:


A) PP
A
PP
B) PP
PP
C) A
PP
A

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 50 128


D) AA
P
AA
E) A
A
A

Comentários:
Questão de lógica de programação. Nesse programa temos a classe P que tem o
método PP() e a classe E que herda de PP() ‐ lembre‐se que o operador “:” (dois
pontos) significa herança. Então começamos a executar pelo Main.

Primeiro, é criado o objeto d do tipo P, ao chamar o método PP(), já é escrito na


saída “PP”, em seguida é criado o objeto s do tipo E. Ele chama o método A(),
que escreve no console “A” depois ele chama o método PP(), ele pode pois E
herda de P, e escreve no console “PP” novamente. Então a saída fica PP/ A/ PP.
Como writeline pula linha, e readkey mantém o cursos no mesmo ponto, letra a.

Resposta: Letra a)

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 51 128


39.(FGV ‐ 2016 ‐ IBGE‐ ANÁLISE DE SISTEMAS ‐ DESENVOLVIMENTO DE SISTEMAS) Analise
o código C# exibido a seguir:

using System;
namespace TESTE
{
class Program
{
delegate int del(int i);
static void Main(string[] args)
{
del myF = x => x * x;
int j = myF(5); //j = 25
Console.WriteLine(j.ToString());
}
}
}

O resultado produzido no console é:


A) 5
B) 25
C) False
D) True
E) x * x

Comentários:
Vamos analisar o código, tem um elemento diferente os delegates eles são nada
mais que ponteiros para função, porém já tem tipo de retorno e de parâmetro
12542341605

definido. Ou seja, foi declarado um delegado para uma função chamada del que
recebe um parâmetro inteiro e retorna um inteiro. No Main() o método myF foi
atribuído ao del. A sintaxe é (parâmetro) => (corpo do método). Então para myF o
parâmetro é x e no corpo do método acontecerá x*x. Ou seja, o método myF
receberá um número e receberá sua primeira potência. No exemplo ele atribuiu
ao int j, myF(5), ou seja 5*5 = 25. Engraçado que ele até coloca um comentário
com a resposta j = 25. Ao final ele apenas escreve o valor de j, transformado em
string. Ou seja, 25.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 52 128


Resposta: Letra b)

40.(FGV ‐ 2016 ‐ IBGE‐ ANÁLISE DE SISTEMAS ‐ DESENVOLVIMENTO DE SISTEMAS) Com


relação aos arquivos XAML do framework .NET produzidos pela IDE do Visual Studio
durante o processo de desenvolvimento de uma aplicação móvel para o Windows
Phone 8.1, analise as afirmativas a seguir:

I. Um arquivo XAML deve ter mais de um elemento raiz.


II. Window, Page, ResourceDictionary e Application são elementos do tipo raiz.
III. O namespace padrão do WPF é o
http://schemas.microsoft.com/winfx/2006/xaml/presentation.

Está correto somente o que se afirma em:


A) I
B) II
C) I e II
D) I e III
E) II e III

Comentários:
Questão um pouco maldosa por pedir o namespace padrão,, mas como vimos em
12542341605

aula, o XAML é baseado em XML, então deve ter apenas um elemento raiz. Os
exemplos de elemeto raiz estão certo também.

Resposta: Letra e)

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 53 128


ASP.NET

ASP.NET foi um dos primeiros frameworks web, foi lançado junto com a primeira versão
do .NET. A sigla ASP significa Active Server Pages. Em 2008 a Microsoft lançou o ASP.NET
MVC (Model View Controller, o padrão de desenvolvimento que separa o código de
apresentação do código de processamento e do negócio), e o antigo framework ASP.NET
ficou conhecido como Web Forms (nesse caso o desenvolvimento era baseado em
páginas, a separação era apenas de código de marcação e código de processamento,
cada página é responsável por sua renderização e lógica de negócio).

Tipos de Arquivos de uma aplicação ASP.NET MVC


Uma aplicação web não é simplesmente um website, portanto, os arquivos relacionados
ao “trabalho” que será feito do lado do servidor são compilados em um arquivo .dll. E os
arquivos que serão enviados para o cliente, como imagens, JavaScript e CSS, são apenas
copiados para a pasta de output (saída) do servidor. Essa é uma boa estratégia porque
caso você precise fazer alterações de design, não é necessário recompilar arquivos de
negócio e nem fazer o redeploy da aplicação inteira.

Como a aplicação seguirá o padrão MVC, teremos três tipos diferentes de arquivos no
projeto, um para suportar a view, um para o controller, e um para o model. Além disso,
também existem alguns arquivos de suporte para configuração e apoio ao client‐side.
Vejamos na tabela a seguir os tipos de arquivos mais comuns.

Tipo de Extensão Descrição


12542341605

Arquivo

View .vbhtml Cria a saída HTML que será a parte da view na aplicação MVC
.cshtml
JavaScript .js Arquivos JavaScript são utilizados pelo navegador para executar código
do lado do cliente
Código .vb.cs Parte que é compilada, iniciada e executada; tanto os models e os
controllers são guardados nesses arquivos
Folha de .css Contém instruções para o navegador sobre como estilizar a página
estilo
Configuração .config Contém configurações como a string de configuração de banco de dados

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 54 128


Evento da .asax Utilizado pelo servidor web Microsoft IIS para tratar eventos da
Aplicação aplicação e de sessão como a criação de rotas
Web .html Um arquivo estático que não executa processamento, apenas apresenta
o HTML para ser renderizado pelo navegador

View
Uma importante característica do ASP.NET é a possibilidade de se utilizar templates e
layout files para a criação de uma view, ou seja, a parte de apresentação das páginas. A
página de layout é um esqueleto que será sempre apresentado, e o seu conteúdo pode
ser preenchido por outras páginas.

Uma estrutura básica do arquivo de layout é a seguinte:

DOCTYPE html
html 12542341605

head
title ViewBag Title title
head
body
div
RenderBody
div
body
html

Agora quando você criar uma nova página, poderá utilizar um layout. No Visual Studio,
uma nova página é criada através da caixa de diálogo “Add View” (figura abaixo).

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 55 128


Repare que a opção Use a layout page já vem marcada por padrão, você pode então
selecionar um layout específico, ou deixar em branco caso já tenha definido um padrão
no arquivo _viewstart.

O arquivo _viewstart será lido por qualquer view completa.

Por que completa?

Porque também existem views parciais (Partial Views). A diferença é que a view
completa é uma página. As parciais são apenas “pedaços” que contém componentes que
podem ser compartilhados em diversas páginas. Então não faz sentido o uso de um layout
file para componentes.

Voltando ao arquivo _viewstart… Ao criar um projeto um arquivo padrão


_ViewStart.cshtml já é criado e todas as views que forem criadas nesse diretório, e seu
subdiretórios passarão por esse arquivo, que é bem simples. Eles só contem o caminho
12542341605

para o arquivo padrão de layout:

Layout Views Shared SomeLayoutFile cshtml

Controller
As classes controller no .NET provém métodos que responderão aos HTTP Requests feitos
pelo cliente (esses métodos são os chamados Actions, eles devem ser públicos e não
podem ser estáticos). Uma classe controladora deve terminar com a palavra (adivinhe…)
“Controller".

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 56 128


Toda aplicação tem um fluxo navegacional, e as Actions são responsáveis por esse
controle, através de métodos redirecionadores como o Redirect e o RedirectToAction. O
método Redirect(String) redireciona para uma URL específica e o RedirectToAction
possui várias assinaturas mas como o nome diz ele redireciona o fluxo para uma outra
action. Vamos ver um pequeno trecho de código para um controller de um carrinho de
compras.

Authorize
HttpPost
public ActionResult Checkout Pedido pedido

Pedido context Pedidos Add pedido


context SaveChanges
return RedirectToAction Detalhes Pedido new id pedido Id

A Action acima adiciona um novo pedido ao contexto e após salvar as mudanças,


redireciona para a action Detalhes do controller Pedido e com o id do pedido como
parâmetro da rota.

Sessão
O ASP.NET é uma ambiente stateless (sem estado), ou seja, a cada nova solicitação de
página pelo usuário, o ASP.NET renderiza o conteúdo sem nenhum conhecimento do
estado anterior. Porém, existem alguns mecanismos que permitem que você guarde o
estado das aplicações. Um deles é o objeto ViewState, este objeto permite que uma
página guarde seu estado, mas não propaga o estado quando o usuário sair dessa página
e ir para outra.
12542341605

Para salvar valores de uma página para outra devemos utilizar o objeto Session. No
ASP.Net esse objeto é uma instância do objeto HTTPSessionState que possui diversas
propriedades para facilitar a propagação do estado da aplicação.

Suponha que você deseje guardar uma variável na sessão, basta fazer o seguinte:
Session NomeVariavel Valor

Algumas das principais propriedades do HTTPSessionState são:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 57 128


IsCookieless Retora True se o SessionID está na URL e False, caso contrário
IsNewSession Retorna True se a sessão foi criada no Request atual
IsReadOnly Indica se a sessão atual é ReadOnly
SessionID Recupera o ID da sessão atual. Através dele pode‐se buscar os valores das
variáveis vinculadas a sessão.
TimeOut Seta ou recupera o timeout da sessão em minutos. O valor default é 20.

Identity Framework
O Identity Framework trata do login de usuários na sua aplicação. No princípio, sempre
tínhamos guardados em nossos bancos de dados o login e senha de nossos usuários. Hoje
em dia, autenticar os usuários por meio de contas de redes socias é essencial. Essa é uma
das diversas funções do Identity Framework. Vejamos algumas:

Sistema único de autenticação ASP.NET: ASP.NET Identity pode ser usado com
todos os ASP.NET frameworks, como o ASP.NET MVC, Web Forms, Web Pages, Web
API, and SignalR. E também para todos os dispositivos.
Criação de perfis do usuário: Você pode aumentar a quantidade de informações
guardadas do usuário, como data de aniversário.
Controle de persistência: Por padrão as informações são guardadas em um banco
de dados, o qual você tem total acesso, e caso deseje pode utilizar diversos
mecanismos como SharePoint, bancos NoSQ entre outros.
Papéis (roles): É possível criar e gerenciar papéis na aplicação. Como por
exemplo, Administrador. Essas roles são propagadas, permitindo um único login
para diversas aplicações.

12542341605

ASP Clássico ­ O objeto Request

Como no edital também fala de ASP. Vamos conhecer


o objeto Request que é objeto de algumas questões.

Quando o navegador solicita uma página do servidor, chamamos de Request. É através do


objeto Request que recuperamos informações do visitante, ou melhor, do cliente. Abaixo
segue uma rápida descrição das Coleções, Propriedades e Métodos que componhem esse
objeto.
Coleções

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 58 128


Client Certificate ‐ Guarda os valores do certificado do cliente
Cookies ‐ Guarda os valores dos cookies enviados no HTTP Request
Form ‐ Guarda os valores de um formúlario que utiliza o método POST
Query String ‐ Guarda os valores da Query String HTTP
Server Variables ‐ Guarda os valores das variáveis do servidor

Propriedade

TotalBytes ‐ Retorna a quantidade de bytes enviados pelo cliente no Request

Método

BinaryRead ‐ Recupera os dados enviados ao servidor pelo cliente em um


método post, e os guarda em um array seguro.

VISUAL BASIC
12542341605

Assim como C#, Visual Basic também é uma linguagem de programação fortemente
tipada, desenvolvida para o uso orientado a objetos. Vamos conhecer um pouco da
sintaxe.

Bem diferente não é?

Outra peculiaridade do VB são os arrays, ao declará‐los deve‐se indicar o valor do maior


índice e não o tamanho do vetor. Como o primeiro índice é 0 (zero), o valor indicado
para um array de tamanho 4, será 3. Veja no exemplo abaixo.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 59 128


Dim nomesItens As String
nomesItens Caderno matérias
nomesItens Borracha cores
Dim segundoNome As String itemNames

Qual é o valor armazenado na variável segundoNome?


Se você respondeu “Borracha 2 cores” acertou :)

Agora que você já sabe declarar variáveis, o próximo passo é criar métodos. No VB
existem dois tipos: Funções (function) e Subrotinas (sub). Uma função retorna um tipo,
uma subrotina não. Vamos ver exemplos das duas sintaxes.

Public Function FazerAlgo coisaParafazerAlgo As String As Boolean


código fazendo algo e com retorno
Return True
End Function

Public Sub FazerAlgo


código fazendo algum trabalho e sem retorno
End Sub

As funções retornam tipos, o VB possui os tipos padrão, String, Boolean, Byte, Integer,
etc. A única peculiaridade é o Single (ponto flutuante de precisão simples), ele é o
equivalente ao Float do C#.

property
O Visual Basic possui um tipo especial de procedure que é o Property Acessor. Ele permite
que uma propriedade customizada seja manipulada em uma classe, módulo ou structure.

As properties procedures são:


12542341605

Get: retorna o valor da propriedade, é chamada automaticamente quando você


acessa a propriedade em uma expressão.
Set: define um valor para a propriedade, é chamada automaticamente quando
você seta um valor para a propriedade.

Veja um exemplo abaixo, onde definimos a propriedade Number em uma classe e depois a
acessamos em um Módulo.

Class Example

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 60 128


Private count As Integer

Public Property Number As Integer


Get
Return count
End Get
Set ByVal value As Integer
count value
End Set
End Property
End Class

Module Module
Sub Main
Dim e As Example New Example
Set property
e Number
Get property
Console WriteLine e Number
End Sub
End Module

eventos
Um tipo de função muito utilizada no ASP.NET são os manipuladores de eventos,
chamados handlers. Na sintaxe do Visual Basic um exemplo de handler está no código
abaixo:

asp Button runat server OnClick Button Click


Protected Sub Button Click ByVal sender As Object
ByVal e As EventArgs Handles Me Load
End Sub 12542341605

Nesse caso estamos indicando que o evento OnClick será tratado pela subrotina
“Button_Click” e o objeto “sender” que emitirá o evento é o Button. O EventArgs traz
informações úteis sobre sobre o evento.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 61 128


ENTITY x NHIBERNATE
O NHibernate e o Entity são os mais populares frameworks para ORM para o .NET. Eles
possuem várias funcionalidades parecidas, mas existem algumas diferenças importantes.

Senta que lá vem história…

O NHibernate é um projeto open‐source, e como o próprio nome já diz, foi criado a partir
do Hibernate do Java, mas atualmente o framework possui suas próprias funcionalidades
específicas ao .NET.

Já o Entity é o framework foi criado dentro da Microsoft Developer Network (MSDN) e é


recomendado pela Microsoft como tecnologia de acesso a dados para novas aplicações.
Sua primeira versão foi lançada para o .NET 3.5 e não foi muito bem aceita, mas a
segunda versão o Entity 4, foi lançada junto com o .NET 4.0 e a partir daí as novas
versões foram lançadas junto com as atualizações do .NET. O Entity Framework pode ser
considerado uma camada de abstração sobre o ADO.NET. ADO.NET is a set of classes that
expose data access services for .NET developers.

As questões de ASP.NET e Visual Basic são um pouco de decoreba, então o


que não tiver sido explicado na teoria, darei uma rápida explicação nos
comentários.
12542341605

(ASP.Net ‐ DIVERSAS BANCAS)

1. (FCC - 2012 - TRF 2ª REGIÃO (RJ ES) - TÉCNICO DO JUDICIÁRIO - INFORMÁTICA)


No ASP .NET um formulário Web não deve usar variáveis de instância para guardar

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 62 128


informações de estado do cliente, pois os clientes que acessam esse formulário Web
em paralelo poderão sobrescrever as variáveis de instância compartilhadas. Para
resolver esse problema, os formulários Web devem guardar as informações de
estado do cliente em objetos
A) HttpResponse.
B) HttpSessionState.
C) HttpRequestState.
D) HttpCookie.
E) HttpSessionStore.

Comentários:
Vimos na aula que as páginas ASP.NET são stateless, porém é possível guardar
informações de sessão através do objeto HttpSessionState.

Resposta: Letra b)

2. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) Um modelo de objetos presente no ambiente ASP facilita a tarefa de
construção de páginas dinâmicas nesse ambiente de programação. O objeto Request
A) armazena as informações essenciais à sessão do usuário.
B) fornece acesso aos recursos do servidor que são úteis à aplicação.
C) permite obter referências sobre outros objetos.
D) garante o acesso às informações enviadas pelo cliente.
12542341605

E) armazena e compartilha informações entre clientes que utilizam uma mesma


aplicação.

Comentários:
Conforme visto na aula o objeto Request possui Coleções, Métodos e Propriedades
que guardam as informações enviadas pelo cliente, seja através de um formulário
(método POST) ou através de uma query string (método GET).

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 63 128


Resposta: Letra d)

3. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) No ASP, um procedimento que executa determinada rotina sem retornar um
valor, sendo possível passar parâmetros para este, é do tipo
A) Function.
B) Continue.
C) Return.
D) Loop.
E) Sub.

Comentários:
A página ASP pode chamar código VB, e o enunciado descreve uma subrotina,
declarada com a palavra chave Sub.

Resposta: Letra e)

4. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) No ASP, o comando CStr(expressão) realiza a conversão de uma expressão
numérica ou string em um valor
A) string.
B) single. 12542341605

C) byte.
D) booleano.
E) inteiro.

Comentários:
O ‘Str’ dá a dica. Este método realiza a conversão para o tipo string. O ‘CStr’
permite que as conversões de valores decimais aceitem ‘,’ ou ‘.’ dependendo do
Locale definido no sistema.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 64 128


Resposta: Letra a)

5. (FGV - 2015 - TCM-SP - AGENTE DE FISCALIZAÇÃO - TECNOLOGIA DA


INFORMAÇÃO) Augusto, funcionário do Tribunal de Contas do Município de São
Paulo, recebeu a incumbência de desenvolver o Sistema de Gestão Integrada de
Usuários, chamado SIGUser. O SIGUser deve realizar a tarefa de autenticar e
autorizar os servidores nos sistemas do tribunal. O tribunal possui uma base de
dados SQLServer, in loco, com informações de login e senha de usuários. Muitas
vezes, faz-se necessário acessar sistemas do tribunal durante a realização de
inspeções externas nas jurisdicionadas. Augusto, então, decide pelo uso do ASP.NET
Identity para realização da tarefa de autenticação e autorização do SIGUser. Sobre a
tecnologia ASP.NET Identity e as razões que levaram Augusto a escolhê-la, é correto
aᢴrmar que:
A) a tecnologia ASP.NET Identity permite que os servidores do tribunal se
autentiquem nos sistemas internos utilizando providers externos, como: Twitter,
Facebook ou Google;
B) os sistemas internos do tribunal somente serão acessados se utilizadas
informações da base de dados SQLServer, in loco, com informações de login e senha
de usuários do tribunal;
C) apenas os sistemas ASP.NET MVC do tribunal poderão ser acessados utilizando o
ASP.NET Identity;
D) a escolha do ASP.NET Identity por Augusto foi acertada e para cada sistema o
12542341605

usuário deverá ter sua própria senha na base SQLServer do tribunal;


E) os sistemas do tribunal poderão ser acessados utilizando ASP.NET Identity e o
acesso dos perᢴs de administração, auditoria e TI deverá ser conᢴgurado no
SQLServer.

Comentários:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 65 128


Vimos na aula as principais características do ASP.NET Identity Framework, entre
elas está a autenticaçã por redes sociais. Vamos ver o erro das demais
alternativas:
b) é possível utilizar diversos banco de dados para autenticação.
c) todas as aplicações da família ASP.NET podem ser autenticadas.
d) a autenticação é centralizada, e propagada para diferentes aplicações.
e) perfis são configurados no próprio Framework.

Resposta: Letra a)

6. (FGV - 2015 - TCM-SP - AGENTE DE FISCALIZAÇÃO - TECNOLOGIA DA


INFORMAÇÃO) Ao criar um projeto ASP.NET MVC, por padrão, um arquivo chamado
_ViewStart.cshtml é gerado na pasta Views. Sobre o uso de ViewStart no ASP.NET
MVC, é correto aᢴrmar que:
A) o código do arquivo _Viewstart.cshtml sempre é executado, independentemente
da ação do programador;
B) o código do arquivo _ViewStart.cshtml é aplicado a todas as views da pasta
corrente, mas não das subpastas;
C) o código do arquivo _ViewStart.cshtml não será executado se, em um método do
controlador de uma página ASP.NET MVC, o programador retornar uma
PartialView() ao invés de View();
D) o código do arquivo _ViewStart.cshtml não será executado se em um método
controlador for chamada a diretiva RedirectToRoute sem fazer referência a
nenhuma ViewStart; 12542341605

E) não é possível evitar a execução de uma ViewStart em um projeto ASP.NET MVC.

Comentários:
Vamos comentar cada alternativa:
a) Não é executado nas Partial Views.
b) É aplicado nos subdiretórios.
c) Certo.
d) Quando não há referência, o arquivo é o padrão.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 66 128


e) Já vimos que podemos evitar, como por exemplo, indicando um layout
específico.

Resposta: Letra c
7. (FGV - 2015 - TCM-SP - AGENTE DE FISCALIZAÇÃO - TECNOLOGIA DA
INFORMAÇÃO) Analise o trecho de código ASP.NET MVC a seguir.

Sobre o retorno da instrução


return RedirectToAction("Index","Servidores");
é correto aᢴrmar que:
A) transfere o ᢴuxo navegacional do usuário para a página deᢴnida na aplicação
MVC como Default Web Site, ou seja, Index;
B) transfere o ᢴuxo navegacional do usuário para a Action Index do Controller
Servidores;
C) transfere o ᢴuxo navegacional do usuário para a página Servidores abaixo do
diretório Index;
D) a substituição da instrução RedirectToAction("Index","Servidores"); por
12542341605

Redirect("Index","Servidores"); não traria alteração de resultado para a aplicação;


E) a instrução RedirectToAction("Index",”Servidores”) retorna um ActionResult, que
é subtipo de ViewResult.

Comentários:
Você já sabe o funcionamento do método RedirectToAction, lembre‐se o primeiro
parâmetro é a action, o segundo (opcional), é a classe controller. Então ficou
fácil:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 67 128


a) index não é página, é action.
b) certo.
c) servidores também não é página, é controller, e index não é diretório.
d) daria erro de compilação o método Redirect recebe uma string apenas
de parâmetro, que deve ser uma URI.
e) dois erros, o retorno é RedirectToRouteResult (resultado do
redirecionamento) e o ActionResult não é subtipo de ViewResult é o contrário.

Resposta: Letra b)

8. (FGV - 2015 - TCM-SP - AGENTE DE FISCALIZAÇÃO - TECNOLOGIA DA


INFORMAÇÃO) Analise o trecho de código ASP.NET MVC a seguir.

Sobre o uso da instrução [ValidateAntiForgeryToken], é correto aᢴrmar que:


A) evita ataques do tipo cross-site scripting (XSS);
12542341605

B) evita ataques de falsiᢴcação de dados e ataques baseados em tampering;


C) representa um atributo que é usado para detectar se um pedido SMTP do
servidor foi violado;
D) funciona com base em cookies;
E) está implementado em uma View cshtml.

Comentários:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 68 128


O atributo ValidateAntiForgeryToken é utilizado para prevenir que requests sejam
forjados. A validação do Request é necessária para a segurança da aplicação MVC.
Este atributo funciona adicionando um novo campo oculto ‘Ant Forgery Token’ no
formulário e no cookie; e depois os dois são validados/comparados no request
POST.

Resposta: Letra d)

9. (VUNESP - 2014 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA) Quando a


propriedade AutoEventWireup do ASP.NET está ativa, os eventos da página passam
a ser, automaticamente, associados aos métodos que
A) tenham sido declarados na classe associada à página.
B) foram herdados da classe System.EventHandler.
C) recebam parâmetros do tipo System.EventArgs.
D) retornam um dado do tipo System.Event.
E) respeitam um padrão de nomenclatura predeᢴnido.

Comentários:
O valor da propriedade AutoEventWireup indica se os eventos das páginas ASP.NET
será conectado automaticamente as funções padrão do framework para
tratamento de eventos. Quando seu valor é true, os eventos são associados
dependendo de seu nome e assinatura. Para cada evento, o ASP.NET procura por
um método que é nomeado com o seguinto padrão: Page_eventname. Como por
12542341605

exemplo, Page_Load ou Page_Init.

Resposta: Letra e)

10. (VUNESP - 2013 - MPE-ES - AGENTE TÉCNICO - DESENVOLVEDOR) Como os


servidores web tratam cada requisição de forma independente, o ASP.NET oferece
diversas opções de gerenciamento de estado para persistir os dados entre as

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 69 128


requisições dos usuários. Sobre a persistência de dados, a diferença entre o estado
de sessão (Session state) e o estado de visualização (View state) é que
A) o estado de sessão fornece persistência dos dados entre múltiplas páginas de
uma aplicação web, enquanto o estado de visualização fornece persistência dos
dados para uma única página da aplicação.
B) apesar de ambos terem a mesma função, o estado de sessão ᢴca armazenado na
máquina do cliente, enuanto o estado de visualização ᢴca armazenado no servidor.
C) o estado de sessão fornece persistência dos dados entre usuários de uma mesma
aplicação, enquanto o estado de visualização fornece persistência para um único
usuário.
D) o estado de visualização fornece persistência dos dados entre múltiplas páginas
de uma aplicação web, enquanto o estado de sessão fornece persistência dos dados
para uma única página da aplicação.
E) ambos são armazenados na máquina do cliente, no entanto, o estado de sessão
utiliza uma criptograᢴa de chave simétrica para proteger os dados.

Comentários:
Como vimos na aula a sessão pode ser salva a nível de página (view state) ou a
nível de aplicação (session state). Ambos são armazenados no cliente através de
cookies e podem ser criptografados ou não.

Resposta: Letra a)

12542341605

11. (CESPE - 2013 - TCE-ES - ANALISTA ADMINISTRATIVO - INFORMÁTICA) Com base


em aplicações web, assinale a opção correta.
A) Para validar usuários, o Form Authentication utiliza credenciais que devem ser
armazenadas no arquivo de conᢴguração da aplicação.
B) Utilizando-se ASP, é impossível, nos casos em que o browser não suporta o uso de
cookies, passar informações de uma página para outra em uma aplicação.
C) No LINQ, os métodos que implementam operadores de consulta padrão devem
ser chamados com o uso da sintaxe de métodos estáticos.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 70 128


D) Usando-se ADO.NET, a conexão com um data source fornece as informações de
autenticação necessárias e deve ser feita com a utilização de um objeto Connection,
que depende do tipo de data source adotado.
E) No Padrão MVC, as regras do negócio que deᢴnem a forma de acesso e
modiᢴcação dos dados são geridas pelo controlador.

Comentários:
Esta questão aborda vários assuntos, vamos analisar item a item:
a) as credenciais de autenticação podem ser armazenadas em banco de
dados.
b) é possível utilizando‐se paraâmetros passados pelos requests GET e
POST.
c) essa é cruel, o correto seria os métodos que extendem operadores de
consulta padrão.
d) certo.
e) as regras de negócio vêm do modelo.

Resposta: Letra d)

12. (AOCP - 2012 - TCE-PA - ASSESSOR TÉCNICO - ANALISTA DE SISTEMAS) Segundo


a Microsoft, a plataforma de aplicativos da web, uniᢴcada, que oferece os serviços
necessários para a criação e a implantação de aplicativos corporativos da web, é
12542341605

conhecida como
A) XML.
B) C#.NET.
C) ASP.NET.
D) Web Server.
E) ADO.NET.

Comentários:
Uma questãozinha de graça para relaxar rs. A plataforma é o ASP.NET.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 71 128


Resposta: Letra c)

13. (FUNCAB - 2012 - MPE-RO - ANALISTA JUDICIÁRIO - PROGRAMADOR DE


COMPUTADORES) O texto abaixo foi extraído da biblioteca MSDN, disponível no
site Microsoft. Sobre o mesmo, é INCORRETO aᢴrmar que:

A) o tema abordado refere-se à critpograᢴa de informações disponíveis em arquivos


de conᢴguração.
B) as seções appSettings, connectionStrings, identify e sessionState são sessões
12542341605

que normalmente contêm informações que merecem mecanismos de segurança.


C) Web.conᢴg é um exemplo de arquivo de conᢴguração.
D) os mecanismos de criptograᢴa e descriptograᢴa não comprometem a
performance; portanto, a recomendação é, por segurança, criptografar todas as
seções dos arquivos de conᢴguração.
E) a seção identify pode conter credenciais de apresentação.

Comentários:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 72 128


Essa questão é pura interpretação de inglês. Mas é interessante perseber algumas
seções de um arquivo de configuração ASP.NET. Como o texto diz é recomendado
que apenas algumas seções sejam criptografadas, aquelas com dados sensíveis.

Resposta: Letra d)

14. (FUNCAB - 2012 - MPE-RO - ANALISTA JUDICIÁRIO - PROGRAMADOR DE


COMPUTADORES) Suponha que você queira desenvolver uma página web, conforme
imagem abaixo, onde:
a lista CIDADE será carregada com as cidades da UF selecionada na lista UF.
a lista BAIRRO será carregada com os bairros da cidade selecionada na lista
CIDADE.
sempre que um novo item for selecionado na lista UF ou na lista CIDADE, as
demais listas deverão ser recarregadas de acordo com os novos itens
selecionados.

12542341605

O ASP.NET AJAX extender que deve ser utilizado para reproduzir este tipo de
comportamento é:
A) ListSearch.
B) AutoComplete.
C) DropDown.
D) ComboBox.
E) CascadingDropDown.

Comentários:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 73 128


O ASP.NET suporta AJAX, o componente que permite que os DropDowns sejam
atualizados de forma encadeada é o CascadingDropDown. Vejamos os outros:
a) ListSearch permite que conteúdos de um dropdown sejam pesquisados
conforme a entrada do usuário, o foco vai para o item pesquisado, mas a
lista não é filtrada.
b) AutoComplete permite que os itens sejam filtrados conforme a entrada do
usuário.
c) O Dropdown é mais completo que um select normal pois permite marcação
e links, é muito usádo para submenus.
d) O ComboBox é parecido com o AutoComplete, porém é mais recomendado
quando se tem poucas opções.

Resposta: Letra e)

15. (CESGRANRIO - 2014 - BANCO DA AMAZÔNIA - TÉCNICO CIENTÍFICO - SUPORTE


E INFRAESTRUTURA) Quais são os três modelos de desenvolvimento diferentes
suportados por ASP.Net?
A) Web Apps, Web Forms e Web Grid
B) Web Forms, MVC e Web Grid
C) Web Pages, MVC e Web Apps
D) Web Pages, MVC e Web Forms
E) Web Pages, Web Grid e Web Forms

12542341605

Comentários:
Vimos na aula que os principais modelos de desenvolvimento de aplicações do
ASP.Net são MVC e Web Forms. Além disso também existe o modelo mais simple de
Web Pages.

Resposta: Letra d)

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 74 128


16. (CESGRANRIO - 2012 - EPE - ANALISTA DE GESTÃO CORPORATIVA -
TECNOLOGIA DA INFORMAÇÃO) Considere que uma aplicação WEB em ASP.NET na
linguagem C# contém classes X e Y, cujos trechos relevantes estão apresentados a
seguir.

public class X {
public int Foo() { return 2; }
public virtual int Bar() { return 1; }
}

public class Y: X {
public new int Foo() { return 0; }
public override int Bar() { return 5; }
}

Seja o conteúdo do corpo do método manipulador do evento Load da página


principal dessa aplicação o trecho de código a seguir.

X x = new X();
Y y = new Y();

int v1 = x.Foo();
int v2 = x.Bar();
int v3 = y.Foo();
int v4 = y.Bar();
int v5 = ((X)y).Foo();
int v6 = ((X)y).Bar();

Response.Write(v1+” “+v2+” “+v3+” “+v4+” “+ v5+” “+v6);

Quando a aplicação exibir com sucesso, em um navegador, a página WEB resultante


12542341605

de sua execução, qual será a sequência de números apresentada nessa página


principal?
A) 0 5 0 5 0 5
B) 2 1 0 5 0 5
C) 2 1 0 5 2 1
D) 2 1 0 5 2 5
E) 2 1 2 1 2 1

Comentários:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 75 128


O método manipulador do evento load executa no carregamento da página. A
classe Y está extendendo a classe X e sobreescrevendo o método Bar().

Vamos executar instrução por instrução:


int v1 = x.Foo(); // v1 = 2
int v2 = x.Bar(); // v2 = 1
int v3 = y.Foo(); // v3 = 0
int v4 = y.Bar(); // v4 = 5
int v5 = ((X)y).Foo(); // v5 = 2, foi feito o cast, então é buscado o método foo da
classe X.
int v6 = ((X)y).Bar(); // v6 = 5, apesar do cast, y continua sendo uma subclasse de
x e como o método Bar() foi sobrescrito, o valor do método de y (5) é retornado.

Resposta: Letra d)

17. (CESGRANRIO - 2010 - EPE - ANALISTA DE GESTÃO CORPORATIVA -


TECNOLOGIA DA INFORMAÇÃO) Um órgão federal disponibiliza serviços na
Internet utilizando a plataforma ASP.NET, versão 3.5. Um dos objetivos da
tecnologia LINQ dessa plataforma é
A) substituir, gradativamente, o AJAX.
B) simpliᢴcar o acesso a dados.
C) permitir tipagem dinâmica de variáveis.
D) realizar testes automatizados. 12542341605

E) consumir web service genéricos.

Comentários:
Já sabemos que o LINQ (Language Integrated Query (Linguagem de Consultas
Integrada) é uma biblioteca que facilita o acesso a dados, simplificando a criação
de consultas.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 76 128


Resposta: Letra b)

18. (CESGRANRIO - 2010 - EPE - ANALISTA DE GESTÃO CORPORATIVA -


TECNOLOGIA DA INFORMAÇÃO) Determinado órgão público federal deseja
implantar um sistema de consulta na Internet. A plataforma utilizada será ASP.NET
e a linguagem de programação, C#. Na modelagem orientada a objetos desse
sistema, é importante considerar que a linguagem adotada
A) impede, no contexto de instanciação de objetos, o uso de classes abstratas.
B) impede somente o uso de polimorᢴsmo a ᢴm de assegurar a legibilidade do
código.
C) apresenta o conceito de namespaces para implementar associações entre classes.
D) proíbe o uso de interfaces para garantir a coesão e a modularidade do código.
E) implementa, no âmbito da generalização, somente herança simples.

Comentários:
O C# possui classes abstratas, polimorfismo, namespaces, interfaces e herança
simples.

Resposta: Letra e)

19. (CESGRANRIO - 2010 - ELETROBRAS - ANALISTA DE SISTEMAS - SUPORTE BASIS


12542341605

SAP R/3) Analise o fragmento de código a seguir.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 77 128


Qual o objetivo desse código?
A) Alterar dados da tabela “Customers” de um banco de dados.
B) Apresentar o resultado de uma consulta em um banco de dados em um navegador.
12542341605

C) Enviar um e-mail para todos os clientes de uma empresa.


D) Criar um arquivo .mdb com o dump com alguns dados da tabela “Customers”.
E) Escrever, em um banco relacional, as entradas de dados do usuário.

Comentários:
Este trecho é do ASP clássico. Veja, primeiro uma conexão com o banco é criada,
depois o sql com apenas um select é executado. Na segunda parte, uma tabela é
renderizada com os valores retornados. Os dados não são alterados, não aparece

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 78 128


nenhum e‐mail, não é criado arquivo .mdb, e não há inserts no banco. Dessa
forma, só sobra a letra B.

Resposta: Letra b)

20. (CESGRANRIO - 2010 - ELETROBRAS - ANALISTA DE SISTEMAS - ENGENHARIA


DE SOFTWARE) Os usuários internos de um órgão público reclamam que, ao utilizar
o sistema de atendimento Web, recebem, com frequência, a mensagem que a sessão
expirou, exigindo novo login no sistema. O gestor desse sistema, ao consultar os
desenvolvedores, percebeu que o tempo de sessão está conᢴgurado para 10
minutos, e, para resolver o incômodo de seus usuários, solicitou que a sessão fosse
conᢴgurada para 30 minutos. O administrador do servidor de aplicação conᢴrmou
que a conᢴguração default é de 10 minutos, mas não está seguro para alterá-la
porque o impacto em outras aplicações não foi mensurado. Considerando-se que o
sistema foi desenvolvido em ASP, que fragmento de código deve ser incluído no
sistema para atender ao gestor?
A) SessionExpireOn=30
B) Session.Timeout=30
C) SessionExpireOn=1800
D) Session.Timeout=1800
E) TimeoutConnectionsInSession=1800000

12542341605

Comentários:
A propriedade Timeout do objeto Session é definida em minutos, conforme vimos
na aula.

Resposta: Letra b)

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 79 128


21. (FCC - 2016 - TRF 3ª REGIÃO (SP MS) - TÉCNICO JUDICIÁRIO - INFORMÁTICA)
Uma das classes do ASP.NET MVC 5 responsáveis por converter os dados
provenientes de requisições HTTP em objetos .Net requeridos como parâmetros de
Actions Methods é a classe
A) HttpRequestAttribute
B) HttpRequest
C) ModelGetConverter
D) DefaultModelBinder
E) HttpRequestValue

Comentários:
As propriedades HttpRequestAttribute e HttpRequestValue não existem, a que
existe é apenas HttpRequest que permite que os valores enviados no request
sejam lidos. ModelGetConverter também é inventado. O certo é
DefaultModelBinder que faz o mapeamento do request em um objeto.

Resposta: Letra d)

(VISUAL BASIC ‐ DIVERSAS BANCAS)

1. (IDECAN ‐ 2012 ‐ BANESTES ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO ‐


DESENVOLVIMENTO DE SISTEMAS) Variáveis são mecanismos utilizados para armazenar
12542341605

uma determinada informação por um período de tempo, até que o seu valor seja
substituído ou perdido ao sair do sistema. Assinale a alternativa que retorna o maior
valor numérico em Visual Basic.
A) Byte.
B) Currency.
C) Long.
D) Single.
E) Integer.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 80 128


Comentários:
Single é o maior valor númerico. Equivale ao Float de outras linguagens. E utiliza
4bytes ou 32bits.

Resposta: Letra d)

2. (VUNESP ‐ 2013 ‐ CETESB ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO ‐ ANALISTA


DE SISTEMAS) No Visual Basic 6.0, para fazer a conversão de um texto para a forma
numérica, incluindo as casas decimais, deve‐se utilizar a função:
A) Atoi
B) Int
C) Val
D) Str
E) StrToInt

Comentários:
As funções de conversão do Visual Basic são Int, Val e Str. Fazem a conversão para
Inteiro, Decimais e String respectivamente.

Resposta: Letra c)

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 81 128


3. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ SUPORTE BASIS SAP
R/3) Um órgão público deseja desenvolver um sistema financeiro utilizando o VB 6. O
programador, ao se deparar com a especificação de um caso de uso, observou que
será necessário calcular a raiz quadrada de números. Que função, no VB 6, atinge
esse objetivo?
A) Log
B) Int
C) Fix
D) Sqr
E) Med

Comentários:
Essa é tranquila, Sqr é a função de raiz quadrada (square root).

Resposta: Letra d)

4. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ SUPORTE BASIS SAP


R/3)

Left$(“Só se vê bem com o coração.”,7)

Qual o resultado da linha de código VB 6 acima?


A) 7
B) “so se ve bem com o coracao.”
C) “oração.” 12542341605

D) “Só se v”
E) “Só se vê”

Comentários:
Essa função retorna os 7 primeiros caracteres da string, começando pela
esquerda, os espaços em branco também contam. Ou seja, o trecho será “Só se
v”. A função Left$ do VB6 foi substituída pela função Left no VB.Net.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 82 128


Resposta: Letra d)

5. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ SUPORTE BASIS SAP


R/3) No Visual Basic 6, que classe MSXML (Microsoft XML Core Services) pode ser
instanciada para carregar arquivos XML?
A) XMLoadr
B) MSDXML
C) DOMDocument
D) DOMXMLdr
E) XDocumentLoader

Comentários:
Questão de decoreba, no VB6, DOMDocument era uma classe utilizada para
carregar arquivos XML. No .NET temos um wrapper para o Document Object Model
(DOM) que é o HtmlDocument. E o DOMDocument é uma propriedade desse
objeto.

Resposta: Letra c)

6. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ ENGENHARIA DE


SOFTWARE) Analise a linha de código VB‐6 a seguir.

Qual o valor da variável tmp? 12542341605

A) "ssencial é"
B) "sencial é"
C) "sencial"
D) "ssencia"
E) "l é "

Comentários:
É facil deduzir esse tipo de função de manipulação de strings, mas você tem que
estar atento, pois diferente de arrays a posição inicial é 1. Ou seja, nesse trecho

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 83 128


ele quer a substring que inicia na posição 4 e de tamanho 10: “ssencial é” No
VB.Net a função passou a ser apenas Mid.

Resposta: Letra a)

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 84 128


7. (FGV ‐ 2015 ‐ TCM‐SP ‐ AGENTE DE FISCALIZAÇÃO ‐ TECNOLOGIA DA INFORMAÇÃO)
Observe o código VB .NET a seguir.

Dado que as funções ListaDeAlunos e ListaDeDisciplinas retornam, respectivamente,


listas dos tipos List(Of csAluno) e List(Of csDisciplina), a definição para a consulta LINQ
QR, compatível com o restante do código, é:
A) Dim QR = From al In alunos
Group Join disc In disciplinas On al.Matricula Equals disc.Matricula,
12542341605

TotCred = Sum(disc.Creditos)
Select al.Nome, al.Matricula, AlunoDisciplinas, TotCred
B) Dim QR = From al In alunos
Into(AlunoDisciplinas = Group, TotCred = Sum(disc.Creditos))
Select al.Nome, al.Matricula, AlunoDisciplinas, TotCred
C) Dim QR = From al In alunos
Group Join disc In disciplinas On al.Matricula Equals disc.Matricula
Into AlunoDisciplinas = Group
Select al.Nome, al.Matricula, AlunoDisciplinas, _

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 85 128


TotCred = Sum(disc.Creditos)
D) Dim QR = From al In alunos
Join disc In disciplinas On al.Matricula Equals disc.Matricula
Into(AlunoDisciplinas = Group, TotCred = Sum(disc.Creditos))
Select *
E) Dim QR = From al In alunos
Group Join disc In disciplinas On al.Matricula Equals
disc.Matricula
Into AlunoDisciplinas = Group, TotCred = Sum(disc.Creditos)
Select al.Nome, al.Matricula, AlunoDisciplinas, TotCred

Comentários:
Está é uma questão de análise. Você já sabe que o LINQ é uma linguagem
simplificada de consultas, então não se preocupe com a sintaxe, apenas entenda
o que a classe quer realizar. Vejamos, temos para trabalhar as listas de alunos e
disciplinas e uma query QR.

Repare que ele faz um for each nos registros que QR retorna e chama cada um de
L. Na saída vemos que L possui Matrícula, Nome e TotCred (total de créditos).
Podemos entender então que L é um Aluno e foi realizada uma contagem de
créditos baseada em todas as disciplinas cursadas por ele. Essas disciplinas estão
guardadas em AlunoDisciplinas que é a lista iterado no segundo for each sobre LL.

Ok, já entendemos a variável, para conseguir descobrir todas as disciplinas que


um aluno cursa, basta verificarmos quais disciplinas possuem a matrícula dele
12542341605

cadastrada.

Agora sim, podemos analisar as alternativas e ver qual está comparando as


matrículas e está somando os créditos. Você vai perceber que a letra e) faz isso.
É realizado um join sobre o campo matrícula entre alunos e disciplinas. Esse
resultado é armazenado na variável AlunoDisciplinas e a soma dos créditos na
variável TotCred.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 86 128


Perfeito. :) Acho que com essa explicação você consegue descobrir os erros das
outras alternativas não é?

Resposta: Letra e)

8. (FGV ‐ 2015 ‐ TCM‐SP ‐ AGENTE DE FISCALIZAÇÃO ‐ TECNOLOGIA DA INFORMAÇÃO)


Com relação ao ambiente VB .NET, considere o trecho de código a seguir:

Dim L As Button = New Button



AddHandler L.Click, AddressOf OnControlesClic

Uma assinatura adequada para OnControlesClic é:


A) (sender As Object, e As System.EventArgs)
B) (sender As Form, e As System.EventArgs, x as cursor.Position, y as cursor.position)
C) (sender As Object, e As Form)
D) (sender As Button)
E) (sender As System.EventArgs)

Comentários:
Estamos incluindo um manipulador (handler) do evento de clique ao button. Os
handlers possuem uma assinatura padrão que é (objeto, eventArgs). Isso significa
que estamos indicando o objeto que será observado e os eventos esperados.

12542341605

Resposta: Letra a)

9. (FGV ‐ 2015 ‐ TCM‐SP ‐ AGENTE DE FISCALIZAÇÃO ‐ TECNOLOGIA DA INFORMAÇÃO)


Analise o código VB NET mostrado a seguir.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 87 128


O resultado exibido no console é:
A) 0
1
B) 0
0,1
C) 1
0
D) 0
0,01
E) 1
0,01

Comentários:
Neste código temos um módulo com 2 subrotinas. Começamos a execução pela
Main(), que apenas está chamando a subrotina X. Este exemplo é interessante,
12542341605

pois mostra a passagem de funções como parâmetro e o atributo ByVal (que indica
que a passagem será apenas pela cópia do valor e não por referência).

Por sua vez, a subrotina X espera um parâmetro Int16 e uma função que tenha
uma assinatura que receba um parâmetro Integer e que retornará um tipo Single.

Na primeira chamada na Main(), o parâmetro enviado é o inteiro 1, ou seja, p1


=1. E a função executará a seguinte instrução IIf p p O

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 88 128


operador IIf é novo para nós, ele equivale ao ternário do C#. Ou seja vamos
traduzir:

If p
Return p
Else
Return

Substituindo p1 por 1, retornamos 1 ‐ 1 = 0.

Na segunda chamada, enviamos p1 = 10. E a função executará a instrução


p p Substituando temos 1/10/10 = 0,01.
Resposta: Letra d)

10. (FGV ‐ 2015 ‐ CM CARUARU ‐ ANALISTA LEGISLATIVO) Assinale a opção que


apresenta um operador de concatenação de strings do Visual Basic.NET.
A) ||
B) |
C) &&
D) &
E) ++

Comentários:
Para concatenar strings em VB utilizamos o ‘ ’, diferente do C# que utilizamos o
‘ ’. As letras a), b) e c) trazem operadores de comparação do C#. E o ++ é o
incremento. 12542341605

Dim sampleStr As String


sampleStr Hello World
sampleStr recebe o valor Hello World

Resposta: Letra d)

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 89 128


11. (FGV ‐ 2015 ‐ TJ‐BA ‐ ANALISTA JUDICIÁRIO) Na linguagem Visual Basic .NET, a
construção

pode ser aplicada para manipular propriedades apenas para:


A) structures;
B) classes;
C) modules, classes, structures;
D) modules;
E) classes, modules.

Comentários:
Uma propriedade pode ser criada em módulos, classes e structures.

Resposta: Letra c)

12. (FGV ‐ 2015 ‐ TJ‐BA ‐ ANALISTA JUDICIÁRIO) O comando switch da linguagem de


programação C é, na linguagem Visual Basic .NET, semelhante ao comando:
A) Select Case;
B) Exit;
12542341605

C) For Each;
D) Goto;
E) Continue.

Comentários:
Mesmo que você não conhecesse o nome certo do Select Case, ficou fácil pois as
outras alternativas não tem nada a ver com comando de seleção de cenários.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 90 128


Resposta: Letra a)

13. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE


DESENVOLVIMENTO DE SISTEMAS) Observe o código Visual Basic a seguir.

Ao ser executado no ambiente do Visual Studio 2008, a partir do procedimento


main(), a mensagem exibida por esse código é
A) JKLRST
B) JKL
C) 123RST
D) GHIRST
E) JKL123

Comentários: 12542341605

Mais uma de análise, primeiro repare que temos duas variáveis no escopo do
módulo X e Y. Vamos começar pelo Main(). Temos uma chamada ao procedure A().
Que seta o valor de X para JKL. Depois o valor de Y é setado para GHI. E a função
B é chamada para que seu resultado seja mostrada dentro de um MsgBox. Repare
que uma nova variável local Y é declarada e é ela que recebe o valor 123. Já
sabemos o funcionamento do IIf. Ele quer saber se o tamanho (length) de X é
diferente de 3, isso é falso, então é retornado o valor de X (JKL), esse valor é
concatenado (&) com a string “RST”. Ou seja, o resultado é “JKLRST”.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 91 128


Repare que a variavél local Y (123) e a global (GHI) não foram utilizadas em
nenhum momento, só para confundir claro, mas você não.

Resposta: Letra a)

1. (CESPE ‐ 2013 ‐ BACEN ‐ ANALISTA ‐ ANÁLISE E DESENVOLVIMENTO DE SISTEMAS) No


sistema de buscas do Google, pode‐se restringir a busca de documentos pertinentes a
um domínio DNS específico, como, por exemplo, a busca do sítio: www.brasil.gov.br
presidente.

2. (CESPE ‐ 2013 ‐ BACEN ‐ ANALISTA ‐ ANÁLISE E DESENVOLVIMENTO DE SISTEMAS) A


indexação do conteúdo de uma página recém‐publicada na Internet ocorre de modo
imediato nos sistemas de busca, como Google, Bing e semelhantes.

(C#, .NET, VISUAL STUDIO ‐ DIVERSAS BANCAS)

1. (FGV ‐ 2015 ‐ CM CARUARU ‐ ANALISTA LEGISLATIVO) Analise o código C# .NET a


seguir.

Assinale a opção que apresenta corretamente o resultado produzido pela execução


12542341605

do trecho acima.
A) 2, 1, 4, 7, 10
B) 5, –2, 1, 4, 10
C) 2, 1, 4, 7
D) 5, –2, 1, 4
E) 5, –2, 1, 4, 7

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 92 128


2. (FGV ‐ 2015 ‐ TCE‐SE ‐ ANALISTA) Analise o código C# mostrado abaixo.

O resultado exibido pelo programa é:


A) ‐10
B) ‐10, ‐7, ‐4, ‐1, 2, 5, 8 <‐
C) ‐7, ‐4, ‐1, 2, 5, 8
D) ‐7, ‐4, ‐1, 2, 5, 8, 11
E) 0

3. (FGV ‐ 2015 ‐ TJ‐BA ‐ ANALISTA JUDICIÁRIO) Observe o trecho inicial, criado no


Visual Studio 2010 Ultimate, para uma aplicação de console escrita em C#.
using System
using System Collections Generic
using System Linq
12542341605

using System Text

namespace ConsoleApplication
class Program

static void Main string args

A diretiva using System Linq refere‐se a um conjunto de padrões e artefatos


destinados à:
A) criação e utilização de relatórios;

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 93 128


B) realização de consultas e atualizações de dados;
C) criação e utilização de expressões regulares;
D) comunicação remota direta com outras aplicações C#;
E) identificação e utilização de Web Services.

4. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE


DESENVOLVIMENTO DE SISTEMAS) Considere o código escrito na linguagem C# mostrado
a seguir.

O resultado produzido pela execução desse código é


A) Acelerando.
B) Passeando.
C) Movendo. 12542341605

D) MovendoAcelerandoPasseando.
E) AcelerandoPasseando.

5. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE


DESENVOLVIMENTO DE SISTEMAS) Na linguagem C#, a forma correta para inicializar um
array de inteiros de cinco posições, com os números de 1 até 5 é
A) int[] Inteiros={1,2,3,4,5};
B) int[] Inteiros=[1,2,3,4,5];
C) int[5] Inteiros={1,2,3,4,5};

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 94 128


D) int Inteiros[]={1,2,3,4,5};
E) int Inteiros[]=new int[5]{1,2,3,4,5};

6. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE


DESENVOLVIMENTO DE SISTEMAS) Uma empresa que desenvolve projetos no Visual
Studio decidiu utilizar o Team Foundation Service. Uma característica relacionada ao
desenvolvimento em equipe e outra, relacionada ao controle de código do Team
Foundation, são respectivamente
A) quadro de tarefas e gerenciamento de conflitos.
B) funcionar com Eclipse e permitir chamadas de função.
C) integrar com Microsoft Visual Studio e usar a plataforma .NET.
D) testes de unidade e função de auto completar código.
E) definição de testes e definição de complexidade.

7. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE


DESENVOLVIMENTO DE SISTEMAS) Uma empresa possui um conjunto de sistemas
desenvolvidos com plataformas/tecnologias diferentes. Como parte da estratégia
dessa empresa, decidiu‐se que os sistemas precisam estar interoperáveis ou
integrados. Foi proposto o uso de serviços Web baseados em SOAP. Considerando‐se a
plataforma .NET, essa proposta
A) não deve ser aceita, pois a plataforma .NET não possui suporte para criação de
serviços Web baseados em SOAP.
B) não deve ser aceita, pois a integração de sistemas utilizando SOAP é pouco empregado
na indústria, não existindo padrões para a operação de sistemas heterogêneos.
C) deve ser aceita, pois serviços web baseados em SOAP têm como característica
12542341605

principal serem restritos à plataforma .NET.


D) deve ser aceita, entretanto, com a ressalva que serviços Web baseados em SOAP não
possuem descritores para os serviços desenvolvidos.
E) deve ser aceita, pois serviços web baseados em SOAP têm suporte na plataforma .NET
além de serem amplamente adotados por empresas para integração de sistemas
heterogêneos.

8. (VUNESP ‐ 2014 ‐ TCE‐SP ‐ AGENTE DA FISCALIZAÇÃO FINANCEIRA) Observe a


declaração de um vetor em C#:

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 95 128


int vetor new int
Sem alterar o resultado, essa mesma declaração poderia ser escrita como:
A) int[] vetor = { 1, 2, 3 };
B) int[] vetor = int { 1, 2, 3 };
C) int[] vetor = new { 1, 2, 3 };
D) int[] vetor = new int[];
E) int[] vetor = new int[] = { 1, 2, 3 };

9. (VUNESP ‐ 2014 ‐ TCE‐SP ‐ AGENTE DA FISCALIZAÇÃO FINANCEIRA) Na plataforma


.NET, o componente responsável pela execução do código é chamado de
A) Common Execution Architecture – CEA.
B) Common Intermediate Language – CIL.
C) Common Language Runtime – CLR.
D) Common Type System – CTS.
E) Common Virtual Machine – CVM.

10. (VUNESP ‐ 2014 ‐ PRODEST‐ES ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO) Na


linguagem de programação C#, a sintaxe correta para declarar um objeto do tipo
Carro e produzir uma nova instância desse objeto é:
A) Carro obj = new Carro();
B) Carro obj = Carro.new;
C) Carro obj = Carro();
D) Carro = new Carro();
E) obj = Carro();

12542341605

11. (VUNESP ‐ 2014 ‐ PRODEST‐ES ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO) Na


linguagem de programação C#, a declaração dos tipos e de seus membros permite que
seja determinada a sua visibilidade por meio de modificadores de acesso. Os
modificadores disponíveis para esse fim são:
A) default, open, closed, partial e full.
B) full‐access, write, write‐only, read e read‐only.
C) global, local, nested e virtual.
D) public, private, published e protected.
E) public, private, protected, internal e protected internal.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 96 128


12. (VUNESP ‐ 2013 ‐ IMESC ‐ ANALISTA DE TECNOLOGIA) Na linguagem C#, para inserir
um elemento no final de um ArrayList, deve ser utilizado o método:
A) Add.
B) AddToEnd.
C) Append.
D) Insert.
E) Put.

13. (VUNESP ‐ 2013 ‐ IMESC ‐ ANALISTA DE TECNOLOGIA) Analise o seguinte trecho de


código em linguagem C#:

Após a execução desse trecho de código, o valor das variáveis “x” e “y” serão,
respectivamente,
A) 2 e 0.
B) 10 e 18.
C) 10 e 20.
D) 12 e 19.
E) 12 e 20.

14. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Na linguagem C#,


é possível dividir a definição de uma classe em diversos arquivos. Para tanto, é
necessário que a declaração da classe contenha a palavra chave:
A) split 12542341605

B) partial
C) extern
D) continue
E) abstract

15. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Na linguagem C#,


a forma correta de declarar a classe B, derivada da classe A, é:
A) public class B inherits A { }
B) public class B => A { }

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 97 128


C) public class A extends B { }
D) public class B : A { }
E) public class B implements A { }

16. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Na linguagem C#,


a palavra reservada “sealed” pode ser utilizada na declaração de classes. Ela tem a
função de
A) indicar que a classe possui métodos que precisam ser sobrescritos.
B) impedir que a classe seja instanciada mais de uma vez.
C) impedir que a classe seja derivada por outras classes.
D) garantir que a classe não seja instanciada por classes que não estejam no mesmo
namespace.
E) indicar que o conteúdo da classe é imutável, isto é, uma vez instanciada, seu conteúdo
não é mais alterado.

17. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) A plataforma .NET


possui as classes System.String e System.Text.StringBuilder para a representação de
cadeias de caracteres. Apesar de ambas terem funcionalidades semelhantes, a
utilização do System.Text.StringBuilder é indicada quando houver necessidade de
A) armazenar grandes quantidades de caracteres.
B) transferir os dados armazenados para uma base de dados.
C) armazenar caracteres alfanuméricos.
D) manipular a cadeia de caracteres.
E) proteger os dados armazenados contra acesso indevido.

12542341605

18. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) O Global Assembly


Cache (GAC) é um componente da plataforma .NET cuja função é
A) armazenar os dados transmitidos pela rede com o intuito de agilizar futuras
requisições.
B) permitir que seja utilizada linguagem Assembly no código .NET.
C) manter os objetos eliminados pelo Garbage Collector.
D) garantir acesso às variáveis globais por todos os módulos de uma aplicação.
E) centralizar o armazenamento de código .NET compartilhado entre aplicações.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 98 128


19. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Todo código .NET
possui um conjunto de metadados chamados “Manifest”. Esses metadados descrevem
A) como os elementos do código se relacionam uns com os outros e suas dependências.
B) as bases de dados utilizadas pela aplicação.
C) as conexões utilizadas pela aplicação para controle do firewall.
D) as permissões de acesso dos usuários à aplicação.
E) se a aplicação necessita realizar chamadas de baixo nível para controlar algum
dispositivo de hardware.

20. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Na plataforma


.NET, a classe base de todas as outras classes é a
A) Base.System.Class
B) Base.Object
C) Net.System.Object
D) System.Base
E) System.Object

21. (VUNESP ‐ 2013 ‐ MPE‐ES ‐ AGENTE TÉCNICO ‐ DESENVOLVEDOR) Quando um código


é compilado para a plataforma .NET, ele é traduzido para um código em Linguagem.
Intermediária Comum (CIL). Esse código gerado é
A) independente de CPU e plataforma, podendo ser executado por qualquer ambiente
que suporte a CLI.
B) independente de plataforma, no entanto, pode ser executado apenas por um servidor
web.
C) independente de plataforma, porém apenas pode ser executado por processadores de
64 bits.
D) dependente de plataforma, podendo ser executado apenas por ambientes Linux.
12542341605

E) dependente de plataforma, podendo ser executado apenas nos ambientes Windows.

22. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ANALISTA DE SISTEMAS) Em C#, os


métodos chamados pelo mecanismo de execução do programa quando o objeto está
prestes a ser removido da memória são denominados de
A) Garbage Collection.
B) Destruidores.
C) Propriedades.
D) Indexadores.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 99 128


E) Eventos.

23. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ANALISTA DE SISTEMAS) Analise o


seguinte trecho do código C#:

Sobre a linha 03 do código apresentado, é correto afirmar que


A) a variável y recebe o valor de x se esta última (x) for do tipo int.
B) atribui à variável y o valor da variável x convertido para o tipo int.
C) passa como parâmetro o valor da variável x para y, do tipo double.
D) a variável y recebe por referência o valor da variável x do tipo double.
E) multiplica o valor da variável int por x e atribui o valor calculado para a variável y.

24. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ANALISTA DE SISTEMAS) Segundo a


Microsoft, um conjunto de recursos introduzidos no Visual Studio 2010 que estende
as capacidades de consultas à sintaxe da linguagem de C# e Visual Basic é conhecido
como
A) LINQ.
B) T‐SQL.
C) OQL.
D) ADO.
E) ASP.

12542341605

25. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ADMINISTRADOR DE BANCO DE DADOS)


Sobre a linguagem C# assinale a alternativa correta.
A) É uma linguagem de programação orientada a objetos, desenvolvida pela Microsoft
como parte da plataforma .NET caracterizada por ser fracamente tipada.
B) É a única linguagem de programação que suporta herança múltipla pura, ou seja, cada
classe pode herdar características de uma ou mais classes.
C) A linguagem não suporta ponteiros porque os blocos de códigos requisitariam
permissões mais altas de segurança para serem executados.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 100 128


D) O garbage collection é um processo usado para a manutenção do processador evitando
erros comuns que podem levar ao encerramento do programa.
E) Há três tipos de passagem de parâmetros, por valor, por referência e por saída.
26. (FCC ‐ 2014 ‐ TRF 3ª REGIÃO (SP MS) ‐ ANALISTA JUDICIÁRIO ‐ INFORMÁTICA)

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 101 128


O programa C# apresentado é executado apenas uma vez e finaliza. Para que o
programa possa ser executado diversas vezes, até que o usuário digite 0 para
finalizá‐lo é necessário inserir Console.WriteLine("0. Finaliza."); como mais uma opção
do menu e inserir a seguinte instrução de repetição:
A) while (opcao != 0) antes do switch, que está na linha 33, com os delimitadores de
início e fim { } desta instrução envolvendo as linhas 33 a 44.
B) while (opcao != "0") antes do switch, que está na linha 33, com os delimitadores de
início e fim { } da instrução envolvendo as linhas 33 a 44.
C) for (; ;) { após o delimitador de início de bloco { na linha 26 e uma chave } para fechar
o bloco logo após a linha 44. Antes do switch, que está na linha 33, inserir o comando if
(opcao == "0") break;
D) do antes do switch, que está na linha 33, com o delimitador de início { da instrução
envolvendo as linhas 33 a 44, e finalizando com o delimitador de fim } while (opcao !=
"0");
E) for (opcao=0;opcao<3;opcao++) após o delimitador de início de bloco { na linha 26 com
os delimitadores de início e fim { } da instrução envolvendo as linhas 27 a 44.

27. (IDEM) Considerando o programa e a linguagem C#, é correto afirmar:


A) Console é uma classe. As classes Object e System herdam desta classe.
B) Na linha [25]: Quando o aplicativo é iniciado, o método Main é o primeiro método
invocado. Em C#, bibliotecas e serviços não requerem um método Main como um ponto
de entrada.
C) WriteLine é um método da classe Console. Como a classe System herda da classe
Console, então WriteLine também é um método da classe System.
D) Na linha [11]: double celsius = Double.Parse(tempCelsius); significa que double é uma
12542341605

classe e Parse é um método desta classe.


E) Na linha [42]: default é um atributo exclusivo do comando switch e é usado apenas
quando um valor numérico que não conste dos cases é fornecido pelo usuário.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 102 128


28. (FCC ‐ 2013 ‐ MPE‐SE ‐ANALISTA DO MINISTÉRIO PÚBLICO ‐ GESTÃO E ANÁLISE DE
PROJETO DE SISTEMA) A Microsoft disponibiliza canais para que desenvolvedores que
utilizam o Visual Studio consigam obter suporte ou relatar problemas. É correto
afirmar que dentre estes canais se encontrem
A) MSDN Forums, Microsoft Connect, Microsoft Support.
B) MS Development Support, Contact Center, Visual Studio Research.
C) MS DevNews, NET Developer Tools, Source Instant Search.
D) Contact Center, MSDN News, Visual Studio Development Center.
E) Visual Studio Research, Contact Center, MSDN Development Center.

29. (FCC ‐ 2012 ‐ TRE‐SP ‐ TÉCNICO DO JUDICIÁRIO ‐ PROGRAMADOR DE SISTEMAS) O


Microsoft Visual Studio é um conjunto completo de ferramentas para construir
aplicativos, incluindo aplicações para Web. Nesta ferramenta várias linguagens
compartilham o mesmo ambiente de desenvolvimento integrado (IDE). Este ambiente
possuí um analisador de código que pode oferecer, enquanto o código é digitado,
sugestões ao programador, como por exemplo tipos de dados e membros de classes e
estruturas. Esse analisador é chamado
A)TextMate.
B)Lexical Analyzer.
C)IntelliSense.
D)Active Directory.
E)ActiveSync.

30. (CESPE ‐ 2013 ‐ BACEN ‐ ANALISTA ‐ ANÁLISE E DESENVOLVIMENTO DE SISTEMAS)


Considere a seguinte classe desenvolvida em C#.
12542341605

class Teste

static void Main

int num
while num

Console WriteLine num é num

Nessa situação, essa classe produz o seguinte resultado:


num é = 1

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 103 128


num é = 2
num é = 3
num é = 4
num é = 5

31. (CESPE ‐ 2013 ‐ BACEN ‐ ANALISTA ‐ ANÁLISE E DESENVOLVIMENTO DE SISTEMAS) Em


C#, o operador ?? é denominado operador de concentração de nulo e é usado para
definir um valor padrão para tipos de valor anulável ou tipos de referência. No
exemplo abaixo, caso a variável num seja nula, o valor de x será igual a 1.
int x num

32. (CESGRANRIO ‐ 2013 ‐ IBGE ‐ ANALISTA DE SISTEMAS ‐ DESENVOLVIMENTO) O que


ocorre com o programa C#, apresentado abaixo, quando é compilado e
posteriormente executado?

12542341605

A) Compila corretamente, executa e imprime o número 45.


B) Compila corretamente, executa e imprime o número 9.
C) Compila corretamente e executa, mas nunca termina.
D) Compila corretamente, mas apresenta erro de execução.
E) Apresenta erro na compilação.

33. (CESPE ‐ 2013 ‐ TCE‐ES ‐ ANALISTA ADMINISTRATIVO ‐ INFORMÁTICA) Assinale a


opção correta acerca do NET Framework.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 104 128


A) O Garbage Collector atua a cada instanciação de objetos com o objetivo de liberar
espaço de memória referente a objetos que não mais estejam em uso.
B) Objetos de uma classe, quando passados como parâmetros, não permitem alterações,
visto que a passagem é sempre feita por valor.
C) Uma enumeração pode ser de qualquer tipo, apesar de, por definição, ter o tipo int.
D) A ocorrência de uma exceção é tratada por meio da instanciação da classe Exception,
ou de uma classe derivada da classe Exception e da captura desse objeto.
E) A classe BitVector32 apresenta melhor desempenho em comparação com a classe
BitArray, embora elas tenham a mesma funcionalidade.

34. (CESGRANRIO ‐ 2012 ‐ EPE ‐ ANALISTA DE GESTÃO CORPORATIVA ‐ TECNOLOGIA DA


INFORMAÇÃO) Na programação orientada a objeto, na linguagem C# em particular, a
capacidade de construir vários métodos com um mesmo nome, porém com
parâmetros diferentes na mesma classe, é chamada de
A) Polimorfismo universal
B) Polimorfismo paramétrico
C) Polimorfismo de subtipo
D) Sobrecarga de operadores
E) Sobrecarga de métodos

35. (CESGRANRIO ‐ 2012 ‐ EPE ‐ ANALISTA DE GESTÃO CORPORATIVA ‐ TECNOLOGIA DA


INFORMAÇÃO) O Microsoft Visual Studio Team Foundation Server 2010 é a nova
plataforma colaborativa da Microsoft. Essa plataforma pode ser utilizada em
substituição ao sistema de controle de versão conhecido como
A) Team Explorer Everywhere
12542341605

B) Work Item Tracking


C) Application Lifecycle Management
D) Visual SourceSafe
E) Development Platform Support

36. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ ENGENHARIA DE


SOFTWARE)O programador de um sistema Web deseja imprimir, em determinada tela,
a hora atual. Que fragmento de código C# atinge esse objetivo?
A) Now.ToString();

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 105 128


B) DateTime.Now.ToString( HH:mm );
C) DateTime.Actual.ToString( HH:mm );
D) Time.Now.ToString( HH:mm );
E) Now.ToString( HH:mm );

37. (CESGRANRIO ‐ 2010 ‐ EPE ‐ ANALISTA DE GESTÃO CORPORATIVA ‐ TECNOLOGIA DA


INFORMAÇÃO) Determinado órgão público federal deseja implantar um sistema de
consulta na Internet. A plataforma utilizada será ASP.NET e a linguagem de
programação, C#. Na modelagem orientada a objetos desse sistema, é importante
considerar que a linguagem adotada
A) impede, no contexto de instanciação de objetos, o uso de classes abstratas.
B) impede somente o uso de polimorfismo a fim de assegurar a legibilidade do código.
C) apresenta o conceito de namespaces para implementar associações entre classes.
D) proíbe o uso de interfaces para garantir a coesão e a modularidade do código.
E) implementa, no âmbito da generalização, somente herança simples.

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 106 128


38. (FGV ‐ 2016 ‐ IBGE‐ ANÁLISE DE SISTEMAS ‐ DESENVOLVIMENTO DE SISTEMAS)
Analise o código C# exibido a seguir:

using System;
namespace ENIGMA
{
class Program {
static void Main(string[] args) {
P d = new P();
d.PP();
E s = new E();
s.A();
s.PP();
Console.ReadKey();
}
class P {
public void PP()
{
Console.WriteLine("PP");
}
}
class E : P {
public void A()
{
Console.WriteLine("A");
}
}
}
}
12542341605

O resultado produzido no console é:


A) PP
A
PP
B) PP
PP
C) A
PP
A

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 107 128


D) AA
P
AA
E) A
A
A

39.(FGV ‐ 2016 ‐ IBGE‐ ANÁLISE DE SISTEMAS ‐ DESENVOLVIMENTO DE SISTEMAS) Analise


o código C# exibido a seguir:

using System;
namespace TESTE
{
class Program
{
delegate int del(int i);
static void Main(string[] args)
{
del myF = x => x * x;
int j = myF(5); //j = 25
Console.WriteLine(j.ToString());
}
}
}

O resultado produzido no console é:


A) 5
B) 25
C) False
D) True
12542341605

E) x * x

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 108 128


40.(FGV ‐ 2016 ‐ IBGE‐ ANÁLISE DE SISTEMAS ‐ DESENVOLVIMENTO DE SISTEMAS) Com
relação aos arquivos XAML do framework .NET produzidos pela IDE do Visual Studio
durante o processo de desenvolvimento de uma aplicação móvel para o Windows
Phone 8.1, analise as afirmativas a seguir:

I. Um arquivo XAML deve ter mais de um elemento raiz.


II. Window, Page, ResourceDictionary e Application são elementos do tipo raiz.
III. O namespace padrão do WPF é o
http://schemas.microsoft.com/winfx/2006/xaml/presentation.

Está correto somente o que se afirma em:


A) I
B) II
C) I e II
D) I e III
E) II e III

(ASP.Net ‐ DIVERSAS BANCAS)

1. (FCC - 2012 - TRF 2ª REGIÃO (RJ ES) - TÉCNICO DO JUDICIÁRIO - INFORMÁTICA)


No ASP .NET um formulário Web não deve usar variáveis de instância para guardar
informações de estado do cliente, pois os clientes que acessam esse formulário Web
em paralelo poderão sobrescrever as variáveis de instância compartilhadas. Para
resolver esse problema, os formulários Web devem guardar as informações de
12542341605

estado do cliente em objetos


A) HttpResponse.
B) HttpSessionState.
C) HttpRequestState.
D) HttpCookie.
E) HttpSessionStore.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 109 128


2. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE
WEB) Um modelo de objetos presente no ambiente ASP facilita a tarefa de
construção de páginas dinâmicas nesse ambiente de programação. O objeto Request
A) armazena as informações essenciais à sessão do usuário.
B) fornece acesso aos recursos do servidor que são úteis à aplicação.
C) permite obter referências sobre outros objetos.
D) garante o acesso às informações enviadas pelo cliente.
E) armazena e compartilha informações entre clientes que utilizam uma mesma
aplicação.

3. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) No ASP, um procedimento que executa determinada rotina sem retornar um
valor, sendo possível passar parâmetros para este, é do tipo
A) Function.
B) Continue.
C) Return.
D) Loop.
E) Sub.

4. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) No ASP, o comando CStr(expressão) realiza a conversão de uma expressão
numérica ou string em um valor
A) string.
B) single.
C) byte.
12542341605

D) booleano.
E) inteiro.

5. (FGV - 2015 - TCM-SP - AGENTE DE FISCALIZAÇÃO - TECNOLOGIA DA


INFORMAÇÃO) Augusto, funcionário do Tribunal de Contas do Município de São
Paulo, recebeu a incumbência de desenvolver o Sistema de Gestão Integrada de
Usuários, chamado SIGUser. O SIGUser deve realizar a tarefa de autenticar e
autorizar os servidores nos sistemas do tribunal. O tribunal possui uma base de
dados SQLServer, in loco, com informações de login e senha de usuários. Muitas

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 110 128


vezes, faz-se necessário acessar sistemas do tribunal durante a realização de
inspeções externas nas jurisdicionadas. Augusto, então, decide pelo uso do ASP.NET
Identity para realização da tarefa de autenticação e autorização do SIGUser. Sobre a
tecnologia ASP.NET Identity e as razões que levaram Augusto a escolhê-la, é correto
aᢴrmar que:
A) a tecnologia ASP.NET Identity permite que os servidores do tribunal se autentiquem
nos sistemas internos utilizando providers externos, como: Twitter, Facebook ou Google;
B) os sistemas internos do tribunal somente serão acessados se utilizadas informações
da base de dados SQLServer, in loco, com informações de login e senha de usuários do
tribunal;
C) apenas os sistemas ASP.NET MVC do tribunal poderão ser acessados utilizando o
ASP.NET Identity;
D) a escolha do ASP.NET Identity por Augusto foi acertada e para cada sistema o usuário
deverá ter sua própria senha na base SQLServer do tribunal;
E) os sistemas do tribunal poderão ser acessados utilizando ASP.NET Identity e o acesso
dos perᢴs de administração, auditoria e TI deverá ser conᢴgurado no SQLServer.

6. (FGV - 2015 - TCM-SP - AGENTE DE FISCALIZAÇÃO - TECNOLOGIA DA


INFORMAÇÃO) Ao criar um projeto ASP.NET MVC, por padrão, um arquivo chamado
_ViewStart.cshtml é gerado na pasta Views. Sobre o uso de ViewStart no ASP.NET
MVC, é correto aᢴrmar que:
A) o código do arquivo _Viewstart.cshtml sempre é executado, independentemente da
ação do programador;
B) o código do arquivo _ViewStart.cshtml é aplicado a todas as views da pasta corrente,
mas não das subpastas;
12542341605

C) o código do arquivo _ViewStart.cshtml não será executado se, em um método do


controlador de uma página ASP.NET MVC, o programador retornar uma PartialView() ao
invés de View();
D) o código do arquivo _ViewStart.cshtml não será executado se em um método
controlador for chamada a diretiva RedirectToRoute sem fazer referência a nenhuma
ViewStart;
E) não é possível evitar a execução de uma ViewStart em um projeto ASP.NET MVC.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 111 128


7. (FGV - 2015 - TCM-SP - AGENTE DE FISCALIZAÇÃO - TECNOLOGIA DA
INFORMAÇÃO) Analise o trecho de código ASP.NET MVC a seguir.

Sobre o retorno da instrução


return RedirectToAction("Index","Servidores");
é correto aᢴrmar que:

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 112 128


A) transfere o ᢴuxo navegacional do usuário para a página deᢴnida na aplicação MVC
como Default Web Site, ou seja, Index;
B) transfere o ᢴuxo navegacional do usuário para a Action Index do Controller
Servidores;
C) transfere o ᢴuxo navegacional do usuário para a página Servidores abaixo do diretório
Index;
D) a substituição da instrução RedirectToAction("Index","Servidores"); por
Redirect("Index","Servidores"); não traria alteração de resultado para a aplicação;
E) a instrução RedirectToAction("Index",”Servidores”) retorna um ActionResult, que é
subtipo de ViewResult.

8. (FGV - 2015 - TCM-SP - AGENTE DE FISCALIZAÇÃO - TECNOLOGIA DA


INFORMAÇÃO) Analise o trecho de código ASP.NET MVC a seguir.

Sobre o uso da instrução [ValidateAntiForgeryToken], é correto aᢴrmar que:


A) evita ataques do tipo cross-site scripting (XSS);
B) evita ataques de falsiᢴcação de dados e ataques baseados em tampering;
C) representa um atributo que é usado para detectar se um pedido SMTP do servidor foi
12542341605

violado;
D) funciona com base em cookies;
E) está implementado em uma View cshtml.

9. (VUNESP - 2014 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA) Quando a


propriedade AutoEventWireup do ASP.NET está ativa, os eventos da página passam
a ser, automaticamente, associados aos métodos que
A) tenham sido declarados na classe associada à página.
B) foram herdados da classe System.EventHandler.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 113 128


C) recebam parâmetros do tipo System.EventArgs.
D) retornam um dado do tipo System.Event.
E) respeitam um padrão de nomenclatura predeᢴnido.

10. (VUNESP - 2013 - MPE-ES - AGENTE TÉCNICO - DESENVOLVEDOR) Como os


servidores web tratam cada requisição de forma independente, o ASP.NET oferece
diversas opções de gerenciamento de estado para persistir os dados entre as
requisições dos usuários. Sobre a persistência de dados, a diferença entre o estado
de sessão (Session state) e o estado de visualização (View state) é que
A) o estado de sessão fornece persistência dos dados entre múltiplas páginas de uma
aplicação web, enquanto o estado de visualização fornece persistência dos dados para
uma única página da aplicação.
B) apesar de ambos terem a mesma função, o estado de sessão ᢴca armazenado na
máquina do cliente, enquanto o estado de visualização ᢴca armazenado no servidor.
C) o estado de sessão fornece persistência dos dados entre usuários de uma mesma
aplicação, enquanto o estado de visualização fornece persistência para um único usuário.
D) o estado de visualização fornece persistência dos dados entre múltiplas páginas de
uma aplicação web, enquanto o estado de sessão fornece persistência dos dados para
uma única página da aplicação.
E) ambos são armazenados na máquina do cliente, no entanto, o estado de sessão utiliza
uma criptograᢴa de chave simétrica para proteger os dados.

11. (CESPE - 2013 - TCE-ES - ANALISTA ADMINISTRATIVO - INFORMÁTICA) Com base


em aplicações web, assinale a opção correta.
A) Para validar usuários, o Form Authentication utiliza credenciais que devem ser
12542341605

armazenadas no arquivo de conᢴguração da aplicação.


B) Utilizando-se ASP, é impossível, nos casos em que o browser não suporta o uso de
cookies, passar informações de uma página para outra em uma aplicação.
C) No LINQ, os métodos que implementam operadores de consulta padrão devem ser
chamados com o uso da sintaxe de métodos estáticos.
D) Usando-se ADO.NET, a conexão com um data source fornece as informações de
autenticação necessárias e deve ser feita com a utilização de um objeto Connection, que
depende do tipo de data source adotado.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 114 128


E) No Padrão MVC, as regras do negócio que deᢴnem a forma de acesso e modiᢴcação
dos dados são geridas pelo controlador.

12. (AOCP - 2012 - TCE-PA - ASSESSOR TÉCNICO - ANALISTA DE SISTEMAS) Segundo


a Microsoft, a plataforma de aplicativos da web, uniᢴcada, que oferece os serviços
necessários para a criação e a implantação de aplicativos corporativos da web, é
conhecida como
A) XML.
B) C#.NET.
C) ASP.NET.
D) Web Server.
E) ADO.NET.

13. (FUNCAB - 2012 - MPE-RO - ANALISTA JUDICIÁRIO - PROGRAMADOR DE


COMPUTADORES) O texto abaixo foi extraído da biblioteca MSDN, disponível no
site Microsoft. Sobre o mesmo, é INCORRETO aᢴrmar que:

12542341605

A) o tema abordado refere-se à critpograᢴa de informações disponíveis em arquivos de


conᢴguração.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 115 128


B) as seções appSettings, connectionStrings, identify e sessionState são sessões que
normalmente contêm informações que merecem mecanismos de segurança.
C) Web.conᢴg é um exemplo de arquivo de conᢴguração.
D) os mecanismos de criptograᢴa e descriptograᢴa não comprometem a performance;
portanto, a recomendação é, por segurança, criptografar todas as seções dos arquivos
de conᢴguração.
E) a seção identify pode conter credenciais de apresentação.

14. (FUNCAB - 2012 - MPE-RO - ANALISTA JUDICIÁRIO - PROGRAMADOR DE


COMPUTADORES) Suponha que você queira desenvolver uma página web, conforme
imagem abaixo, onde:
a lista CIDADE será carregada com as cidades da UF selecionada na lista UF.
a lista BAIRRO será carregada com os bairros da cidade selecionada na lista
CIDADE.
sempre que um novo item for selecionado na lista UF ou na lista CIDADE, as
demais listas deverão ser recarregadas de acordo com os novos itens
selecionados.

12542341605

O ASP.NET AJAX extender que deve ser utilizado para reproduzir este tipo de
comportamento é:
A) ListSearch.
B) AutoComplete.
C) DropDown.
D) ComboBox.
E) CascadingDropDown.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 116 128


15. (CESGRANRIO - 2014 - BANCO DA AMAZÔNIA - TÉCNICO CIENTÍFICO - SUPORTE
E INFRAESTRUTURA) Quais são os três modelos de desenvolvimento diferentes
suportados por ASP.Net?
A) Web Apps, Web Forms e Web Grid
B) Web Forms, MVC e Web Grid
C) Web Pages, MVC e Web Apps
D) Web Pages, MVC e Web Forms
E) Web Pages, Web Grid e Web Forms

16. (CESGRANRIO - 2012 - EPE - ANALISTA DE GESTÃO CORPORATIVA -


TECNOLOGIA DA INFORMAÇÃO) Considere que uma aplicação WEB em ASP.NET na
linguagem C# contém classes X e Y, cujos trechos relevantes estão apresentados a
seguir.

public class X {
public int Foo() { return 2; }
public virtual int Bar() { return 1; }
}

public class Y: X {
public new int Foo() { return 0; }
public override int Bar() { return 5; }
}

Seja o conteúdo do corpo do método manipulador do evento Load da página


12542341605

principal dessa aplicação o trecho de código a seguir.

X x = new X();
Y y = new Y();

int v1 = x.Foo();
int v2 = x.Bar();
int v3 = y.Foo();
int v4 = y.Bar();

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 117 128


int v5 = ((X)y).Foo();
int v6 = ((X)y).Bar();

Response.Write(v1+” “+v2+” “+v3+” “+v4+” “+ v5+” “+v6);

Quando a aplicação exibir com sucesso, em um navegador, a página WEB resultante


de sua execução, qual será a sequência de números apresentada nessa página
principal?
A) 0 5 0 5 0 5
B) 2 1 0 5 0 5
C) 2 1 0 5 2 1
D) 2 1 0 5 2 5
E) 2 1 2 1 2 1

17. (CESGRANRIO - 2010 - EPE - ANALISTA DE GESTÃO CORPORATIVA -


TECNOLOGIA DA INFORMAÇÃO) Um órgão federal disponibiliza serviços na
Internet utilizando a plataforma ASP.NET, versão 3.5. Um dos objetivos da
tecnologia LINQ dessa plataforma é
A) substituir, gradativamente, o AJAX.
B) simpliᢴcar o acesso a dados.
C) permitir tipagem dinâmica de variáveis.
D) realizar testes automatizados.
E) consumir web service genéricos.

18. (CESGRANRIO - 2010 - EPE - ANALISTA DE GESTÃO CORPORATIVA -


12542341605

TECNOLOGIA DA INFORMAÇÃO) Determinado órgão público federal deseja


implantar um sistema de consulta na Internet. A plataforma utilizada será ASP.NET
e a linguagem de programação, C#. Na modelagem orientada a objetos desse
sistema, é importante considerar que a linguagem adotada
A) impede, no contexto de instanciação de objetos, o uso de classes abstratas.
B) impede somente o uso de polimorᢴsmo a ᢴm de assegurar a legibilidade do código.
C) apresenta o conceito de namespaces para implementar associações entre classes.
D) proíbe o uso de interfaces para garantir a coesão e a modularidade do código.
E) implementa, no âmbito da generalização, somente herança simples.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 118 128


19. (CESGRANRIO - 2010 - ELETROBRAS - ANALISTA DE SISTEMAS - SUPORTE BASIS
SAP R/3) Analise o fragmento de código a seguir.

12542341605

Qual o objetivo desse código?


A) Alterar dados da tabela “Customers” de um banco de dados.
B) Apresentar o resultado de uma consulta em um banco de dados em um navegador.
C) Enviar um e-mail para todos os clientes de uma empresa.
D) Criar um arquivo .mdb com o dump com alguns dados da tabela “Customers”.
E) Escrever, em um banco relacional, as entradas de dados do usuário.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 119 128


20. (CESGRANRIO - 2010 - ELETROBRAS - ANALISTA DE SISTEMAS - ENGENHARIA
DE SOFTWARE) Os usuários internos de um órgão público reclamam que, ao utilizar
o sistema de atendimento Web, recebem, com frequência, a mensagem que a sessão
expirou, exigindo novo login no sistema. O gestor desse sistema, ao consultar os
desenvolvedores, percebeu que o tempo de sessão está conᢴgurado para 10
minutos, e, para resolver o incômodo de seus usuários, solicitou que a sessão fosse
conᢴgurada para 30 minutos. O administrador do servidor de aplicação conᢴrmou
que a conᢴguração default é de 10 minutos, mas não está seguro para alterá-la
porque o impacto em outras aplicações não foi mensurado. Considerando-se que o
sistema foi desenvolvido em ASP, que fragmento de código deve ser incluído no
sistema para atender ao gestor?
A) SessionExpireOn=30
B) Session.Timeout=30
C) SessionExpireOn=1800
D) Session.Timeout=1800
E) TimeoutConnectionsInSession=1800000

21. (FCC - 2016 - TRF 3ª REGIÃO (SP MS) - TÉCNICO JUDICIÁRIO - INFORMÁTICA)
Uma das classes do ASP.NET MVC 5 responsáveis por converter os dados
provenientes de requisições HTTP em objetos .Net requeridos como parâmetros de
Actions Methods é a classe
A) HttpRequestAttribute
B) HttpRequest
C) ModelGetConverter
D) DefaultModelBinder
12542341605

E) HttpRequestValue

(VISUAL BASIC ‐ DIVERSAS BANCAS)

1. (IDECAN ‐ 2012 ‐ BANESTES ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO ‐


DESENVOLVIMENTO DE SISTEMAS) Variáveis são mecanismos utilizados para armazenar
uma determinada informação por um período de tempo, até que o seu valor seja

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 120 128


substituído ou perdido ao sair do sistema. Assinale a alternativa que retorna o maior
valor numérico em Visual Basic.
A) Byte.
B) Currency.
C) Long.
D) Single.
E) Integer.

2. (VUNESP ‐ 2013 ‐ CETESB ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO ‐ ANALISTA


DE SISTEMAS) No Visual Basic 6.0, para fazer a conversão de um texto para a forma
numérica, incluindo as casas decimais, deve‐se utilizar a função:
A) Atoi
B) Int
C) Val
D) Str
E) StrToInt

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 121 128


3. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ SUPORTE BASIS SAP
R/3) Um órgão público deseja desenvolver um sistema financeiro utilizando o VB 6. O
programador, ao se deparar com a especificação de um caso de uso, observou que
será necessário calcular a raiz quadrada de números. Que função, no VB 6, atinge
esse objetivo?
A) Log
B) Int
C) Fix
D) Sqr
E) Med

4. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ SUPORTE BASIS SAP


R/3)

Left$(“Só se vê bem com o coração.”,7)

Qual o resultado da linha de código VB 6 acima?


A) 7
B) “so se ve bem com o coracao.”
C) “oração.”
D) “Só se v”
E) “Só se vê”

5. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ SUPORTE BASIS SAP


R/3) No Visual Basic 6, que classe MSXML (Microsoft XML Core Services) pode ser
instanciada para carregar arquivos XML?
A) XMLoadr
12542341605

B) MSDXML
C) DOMDocument
D) DOMXMLdr
E) XDocumentLoader

6. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ ENGENHARIA DE


SOFTWARE) Analise a linha de código VB‐6 a seguir.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 122 128


Qual o valor da variável tmp?
A) "ssencial é"
B) "sencial é"
C) "sencial"
D) "ssencia"
E) "l é "

7. (FGV ‐ 2015 ‐ TCM‐SP ‐ AGENTE DE FISCALIZAÇÃO ‐ TECNOLOGIA DA INFORMAÇÃO)


Observe o código VB .NET a seguir.

12542341605

Dado que as funções ListaDeAlunos e ListaDeDisciplinas retornam, respectivamente,


listas dos tipos List(Of csAluno) e List(Of csDisciplina), a definição para a consulta LINQ
QR, compatível com o restante do código, é:
A) Dim QR = From al In alunos
Group Join disc In disciplinas On al.Matricula Equals disc.Matricula,
TotCred = Sum(disc.Creditos)
Select al.Nome, al.Matricula, AlunoDisciplinas, TotCred
B) Dim QR = From al In alunos

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 123 128


Into(AlunoDisciplinas = Group, TotCred = Sum(disc.Creditos))
Select al.Nome, al.Matricula, AlunoDisciplinas, TotCred
C) Dim QR = From al In alunos
Group Join disc In disciplinas On al.Matricula Equals disc.Matricula
Into AlunoDisciplinas = Group
Select al.Nome, al.Matricula, AlunoDisciplinas, _
TotCred = Sum(disc.Creditos)
D) Dim QR = From al In alunos
Join disc In disciplinas On al.Matricula Equals disc.Matricula
Into(AlunoDisciplinas = Group, TotCred = Sum(disc.Creditos))
Select *
E) Dim QR = From al In alunos
Group Join disc In disciplinas On al.Matricula Equals
disc.Matricula
Into AlunoDisciplinas = Group, TotCred = Sum(disc.Creditos)
Select al.Nome, al.Matricula, AlunoDisciplinas, TotCred

8. (FGV ‐ 2015 ‐ TCM‐SP ‐ AGENTE DE FISCALIZAÇÃO ‐ TECNOLOGIA DA INFORMAÇÃO)


Com relação ao ambiente VB .NET, considere o trecho de código a seguir:

Dim L As Button = New Button



AddHandler L.Click, AddressOf OnControlesClic

Uma assinatura adequada para OnControlesClic é:


12542341605

A) (sender As Object, e As System.EventArgs)


B) (sender As Form, e As System.EventArgs, x as cursor.Position, y as cursor.position)
C) (sender As Object, e As Form)
D) (sender As Button)
E) (sender As System.EventArgs)

9. (FGV ‐ 2015 ‐ TCM‐SP ‐ AGENTE DE FISCALIZAÇÃO ‐ TECNOLOGIA DA INFORMAÇÃO)


Analise o código VB NET mostrado a seguir.

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 124 128


O resultado exibido no console é:
A) 0
1
B) 0
0,1
C) 1
0
D) 0
0,01
E) 1
0,01

10. (FGV ‐ 2015 ‐ CM CARUARU ‐ ANALISTA LEGISLATIVO) Assinale a opção que


apresenta um operador de concatenação de strings do Visual Basic.NET.
A) || 12542341605

B) |
C) &&
D) &
E) ++

11. (FGV ‐ 2015 ‐ TJ‐BA ‐ ANALISTA JUDICIÁRIO) Na linguagem Visual Basic .NET, a
construção

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 125 128


pode ser aplicada para manipular propriedades apenas para:
A) structures;
B) classes;
C) modules, classes, structures;
D) modules;
E) classes, modules.

12. (FGV ‐ 2015 ‐ TJ‐BA ‐ ANALISTA JUDICIÁRIO) O comando switch da linguagem de


programação C é, na linguagem Visual Basic .NET, semelhante ao comando:
A) Select Case;
B) Exit;
C) For Each;
D) Goto;
E) Continue.

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 126 128


13. (FGV ‐ 2014 ‐ DPE‐RJ ‐ TÉCNICO SUPERIOR ESPECIALIZADO ‐ ANALISTA DE
DESENVOLVIMENTO DE SISTEMAS) Observe o código Visual Basic a seguir.

Ao ser executado no ambiente do Visual Studio 2008, a partir do procedimento


main(), a mensagem exibida por esse código é
A) JKLRST
B) JKL
C) 123RST
D) GHIRST
E) JKL123

12542341605

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 127 128


(C#, .NET, VISUAL STUDIO ‐ DIVERSAS BANCAS)

1 2 3 4 5 6 7 8 9 10 11 12 13

E B B B A A E A C A E A E

14 15 16 17 18 19 20 21 22 23 24 25 26

B D C D E A E A B B A E C

27 28 29 30 31 32 33 34 35 36 37 38 39

B A C E C A E E D B E A B

40

(ASP.Net ‐ DIVERSAS BANCAS)

1 2 3 4 5 6 7 8 9 10 11 12 13

B D E A A C B D E A D C D

14 15 16 17 18 19 20 21

E D D B E B B D

(VISUAL BASIC ‐ DIVERSAS BANCAS)


12542341605

1 2 3 4 5 6 7 8 9 10 11 12 13

D C D D C A E A D D C A A

Profa. Mayara Rosa www.estrategiaconcursos.com.br P 128 128


12542341605
Aula 13 (Prof. Mayara Rosa)

Desenvolvimento de Software para Concursos - Curso Regular


Professores: Diego Carvalho, Mayara Rosa
Olá! Antes de iniciarmos, é importante saber que nesta aula vou considerar
que você já conhece o básico de lógica de programaçao, ok? Assim
poderemos focar no que é específico do Delphi e do PHP. Mas fique
tranquilo, começaremos com os conceitos básicos, e nas resoluções das
questões tudo está bem explicado, mas caso tenha alguma dúvida, estou a
disposição, ok?

DELPHI

Delphi teve início como uma linguagem de programação e ambiente de desenvolvimento


para a plataforma Windows. Com o tempo, o Delphi incluiu suporte completo ao
ActiveX; a uma biblioteca de widgets orientada a objetos (chamada Visual Component
Library ‐ VCL e Component Library for Cross‐Platform ‐ CLX); e um rápido ambiente de
desenvolvimento para aplicações que é extensível e customizável. Atualmente está na
versão 10, mantida pela empresa Embarcadero​©.​

A IDE provê diversas ferramentas para projeto, desenvolvimento, testes, depuração,


implantação, geração de relatórios – permitindo prototipação rápida. Entre as
ferramentas mais utilizadas para o desenho de sistemas de software estão as
apresentadas a seguir:

Ferramentas Descrição

Form Designer Uma janela em branco para desenhar a interface gráfica da aplicação.

Component Utilizado para exibir componentes visuais e não‐visuais para o desenho da


Palette interface gráfica.

Object Utilizado para examinar e modificar as propriedades e eventos de um


Inspector objeto.

Object Utilizado para exibir e modificar as relações lógicas entre componentes.


TreeView

Code Editor Utilizado para escrever e editar a lógica interna do programa ou aplicação.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 1​ de 56


Project Utilizado para gerenciar arquivos da aplicação que criam ou mais projetos.
Manager

Integrated Utilizada para encontrar e consertar erros no código de programação.


Debugger

Outros Além de editores, ferramentas de linha de comando, compiladores,


ligadores, extensa biblioteca de classes com diversos objetos reusáveis;

Essas ferramentas Delphi permitem criar aplicações de forma muito simples: à medida
que se constrói a interface gráfica, o Form Designer gera o código Delphi interno que
suporta a aplicação. Ao selecionar ou modificar propriedades de componentes e
formulários, os resultados dessas mudanças​ aparecem automaticamente no
código‐fonte e vice‐versa.

Sintaxe

Apesar de ser um “gerador de código” às vezes é necessário escrever algumas linhas,


além disso os examinadores adoram questões de sintaxe básica. A sintaxe de Delphi é a
da linguagem Pascal. Vamos ver o código de uma unit (módulo básico de Delphi) simples
de um botão que diz “Hello World”. A unit é composta por dois blocos: ​interface ​e
implementation. ​Os comentários explicam o código.

unit ​Unit1​;​ ​//gerará o arquivo Unit1.pas


​interface​ ​//são declaradas as bibliotecas utilizada, os tipos, variáveis...
uses ​//importação de bibliotecas/classes
​Windows​,​ ​Messages​,​ ​SysUtils​,​ ​Variants​,​ ​Classes​,​ ​Graphics​,​ ​Controls​,​ ​Forms,
​Dialogs​,​ ​StdCtrls;
type ​//utilizado para a declaração de tipos, nesse é criado um formulário.
​TForm1​ ​=​ ​class​(​TForm​)​ ​//nosso tipo TForm1 é uma classe TForm
​Label1​:​ ​TLabel​;​ ​//um dos atributos é o label1 do tipo TLabel
​Button1​:​ ​TButton​;​ ​//o outro é o Button do tipo TButton;
procedure ​Button1Click​(​Sender​:​ ​TObject​);​ ​//será ativado no clique do botão
​private
​{​ ​private​ declarations }
​public

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 2​ de 56


​{​ ​public​ declarations }
​ nd​;​ ​//fim do bloco type
e
​var​ ​//trecho de declaração de variáveis
​Form1​:​ ​TForm1​;​ ​//acima foi criado o tipo TForm1 que agora pode ser utilizado

implementation ​//bloco que implementa a interface

​ ​$R ​*.​dfm​}​ ​//diretiva para o compilador linkar todos os Resources do tipo dfm
{

​//agora é definida a ação que ocorrerá ao clicar no botão


procedure ​TForm1​.​Button1Click​(​Sender​:​ ​TObject​);
​begin
​Label1​.​Caption​ ​:=​ ​'Hello World'​;​ ​//o label mudará para "Hello Word".
​end;

​end​.​ ​//fim da unit

Acesso a Base de Dados

Para acessar base de dados com o Delphi, existem componentes específicos para auxiliar
desde a conexão até a manipulação dos dados. Apesar de não serem visuais, os
componentes de acesso a dados aparecem na ​Paleta de Componentes do Delphi. Alguns
desses componentes são o ​TTable​, ​TQuery​, ​TDataSource​, e o ​TDatabase​. Além dos
componentes de acesso a dados também temos os componentes que trabalham na
visualização e na edição dos dados, esses são chamados ​Data Controls Components,
entre eles estão o ​DBGrid, DBEdit, e DBMemo.​ E para auxiliar na conexão a um banco

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 3​ de 56


de dados específico, existe o componente ​dbExpress​, basta informar o driver respectivo
para que a conexão seja realizada.

Os dados podem ser acessados através do componente ​TDataSet​, mas normalmente o


que acessamos são os campos, através do objeto ​TField ​e seus descendentes. Além de
recuperar e setar os valores de um campo no registro corrente do dataset, você também
pode alterar o comportamento de um campo ao modificar suas propriedades. Também é
possível modificar o próprio dataset, modificando a ordem dos campos, removendo
campos, e até criando novos campos calculados ou de seleção.

Tipo de Extensão Descrição


Arquivo

View .vbhtml Cria a saída HTML que será a parte da view na aplicação MVC
.cshtml

JavaScript .js Arquivos JavaScript são utilizados pelo navegador para executar código
do lado do cliente

Código .vb.cs Parte que é compilada, iniciada e executada; tanto os models e os


controllers são guardados nesses arquivos

Folha de .css Contém instruções para o navegador sobre como estilizar a página
estilo

Configuraçã .config Contém configurações como a string de configuração de banco de


o dados

Evento da .asax Utilizado pelo servidor web Microsoft IIS para tratar eventos da
Aplicação aplicação e de sessão como a criação de rotas

Web .html Um arquivo estático que não executa processamento, apenas


apresenta o HTML para ser renderizado pelo navegador

Callback Functions
Uma função de callback é uma função da sua aplicação chamada por uma DLL.
Basicamente, o Windows possui várias funções da API que necessitam de funções de
callback. Ao chamar estar funções, você passa um endereço de uma função definida por
sua aplicação que o Windows pode chamar.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 4​ de 56


Um exemplo é a função ​EnumWindows(), que faz parte da API​, ela enumera todas as
janelas abertas. Essa função passa a manipulação de cada janela na enumeração para a
callback function definida por sua aplicação. Você precisa definir e passar o endereço de
uma função callback para a EnumWindows(). Essas funções tem assinatura padrão e para
a EnumWindows() seria definida assim:

​ ​ lParam​):​ ​Boolean​;​ stdcall;


function​ ​EnumWindowsProc​(​Hw​:​ ​HWnd​;​ lp:

(DELPHI ‐ DIVERSAS BANCAS)


1. (FCC ‐ 2009 ‐ TRT‐3ª REGIÃO (MG) ‐ ANALISTA JUDICIÁRIO ‐ TECNOLOGIA DA
INFORMAÇÃO) A primeira tela exibida quando um programa Delphi é executado, cuja
exibição dura apenas alguns instantes durante a carga do programa, denomina‐se
tela
A) ShowModal.
B) OnShow.
C) de login.
D) de setup.
E) de splash.

Comentários:

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 5​ de 56


Não é apenas no Delphi que chamamos esse tipo de tela de splash. É bastante
comum uma telinha de apresentação para que o usuário acompanhe o
carregamento. Veja o exemplo abaixo para o Word 2010.

Resposta: ​ Letra e)

2. (CESPE ‐ 2015 ‐ STJ ‐ ANALISTA JUDICIÁRIO ‐ DESENVOLVIMENTO) Métodos


callback são formas de instanciar métodos utilizando‐se tecnologia de chamada em
segundo plano escondido do plano sequencial da aplicação.

Comentários:
Os métodos ou funções callback são métodos passados como parâmetro para
funções que obtêm dados da API Windows. Eles podem ser síncronos (plano
sequencial da aplicação) ou assíncronos (segundo plano).

Resposta:​ E

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 6​ de 56


3. (FGV ‐ 2015 ‐ TCE‐SE ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO ‐
DESENVOLVIMENTO) Em um programa codificado na linguagem Delphi, a abertura do
arquivo texto "arq.txt" para leitura utiliza, em sequência, as chamadas
Assign(arq,"arq.txt") e Reset(arq), sendo arq uma variável do tipo text. Supondo que
a opção {$IOChecks off} esteja habilitada, para saber se o arquivo foi aberto com
sucesso, o programador deve:
A) testar o valor retornado pela função Reset, que é do tipo boolean;
B) testar o valor retornado pela função Reset, que é do tipo integer;
C) testar o valor retornado pela função IOResult, que é do tipo boolean;
D) testar o valor retornado pela função IOResult, que é do tipo integer;
E) testar os valores retornados pelas funções Reset e IOResult, ambos do tipo integer.

Comentários:
Mais uma para o livro de questões decorebas, no Delphi, variáveis iniciadas com
“$” indicam diretivas de compilação. A $IOChecks determina se uma operação de
IO deverá lançar uma exceção quando houver erro. {$IOChecks Off} não gera a
exceção, e passa a ser de responsabilidade do programador checar se a operação
deu certo através da função IOResult que retorna um inteiro (0 se houve sucesso,
e um número positivo em caso de erro).

Resposta:​ Letra d)

4. (CESPE ‐ 2015 ‐ STJ ‐ ANALISTA JUDICIÁRIO ‐ DESENVOLVIMENTO) A diretiva $V


controla a verificação de tipos em sequências curtas, que são passados como
parâmetros variáveis.

Comentários:
A diretiva $V é uma abreviação de $VarStringChecks. Esse enunciado parece estar
escrito em outra língua, mas está correto. Essa diretiva define se os parâmetros

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 7​ de 56


do tipo short strings devem ser verificados ao serem enviados para uma
subrotina. Por padrão essa verificação é habilitada, para que não seja enviada
uma string longa (maior que 255 caracteres) para um parâmetro short, o que
causaria erros.

Resposta:​ C

5. (CESPE ‐ 2015 ‐ STJ ‐ ANALISTA JUDICIÁRIO ‐ DESENVOLVIMENTO) O TdataSource


é um componente não visual da VCL (visual component library) utilizado em
formulários para conectar um controle e um conjunto de dados usado pelo controle.

Comentários:
Certo o TdataSource é um componente de acesso a dados para controlar a
conexão a um conjunto de dados. Ele não é visual, os componentes visuais são os
Data Controls, como o DBGrid.

Resposta:​ C

6. (CESPE ‐ 2015 ‐ STJ ‐ ANALISTA JUDICIÁRIO ‐ DESENVOLVIMENTO) Na versão 7 do


Delphi, os drivers nativos para o Firebird não estão disponíveis, mas é possível
acessá‐los por meio de componentes dbExpress, em cuja paleta a propriedade
DriverName define o driver do banco de dados utilizado.

Comentários:
Firebird é um tipo de base de dados. O Delphi permite a conexão a inúmeros
bancos de dados através do componente dbExpress, desde que você inclua o
driver que deverá utilizado.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 8​ de 56


Resposta:​ C

7. (CESPE ‐ 2005 ‐ TRT ‐ 16ª REGIÃO (MA) ‐ ANALISTA JUDICIÁRIO ‐ TECNOLOGIA DA


INFORMAÇÃO) A linguagem Delphi permite acessar os campos de um conjunto de
dados por meio do objeto Tfield e seus descendentes, mas não permite a alteração
de suas propriedades, que deve ser realizada pelo método Tfieldchange.

Comentários:
O objeto Tfield permite o acesso ao conjunto de dados e também a alteração de
suas propriedades. O método Tfieldchange não existe.

Resposta:​ E

8. (CESPE ‐ 2005 ‐ TRT ‐ 16ª REGIÃO (MA) ‐ ANALISTA JUDICIÁRIO ‐ TECNOLOGIA DA


INFORMAÇÃO) Acerca da sintaxe e da semântica da linguagem Delphi no acesso a
banco de dados, julgue os itens subseqüentes.
A arquitetura de banco de dados da linguagem Delphi possui componentes que
representam e encapsulam, apropriadamente, informações de banco de dados. A
interface do usuário interage com os dados através da origem dos dados,
conectando‐se a um conjunto de dados.

Comentários:
Vimos na aula alguns desses componentes, como o TDataSource, TDataSet e etc.

Resposta:​ Letra b)

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 9​ de 56


9. (CESPE ‐ 2005 ‐ TRT ‐ 16ª REGIÃO (MA) ‐ ANALISTA JUDICIÁRIO ‐ TECNOLOGIA DA
INFORMAÇÃO) O componente palette possui funcionalidades que usam o activex data
objects (ADO), padrão Microsoft, para acessar banco de dados por meio do OLEDB.

Comentários:
Questão mal escrita. O componente palette, é a paleta de componentes, ou seja
a “prateleira” que contém todos os componentes disponíveis no Delphi. Como já
vimos, existem diversos tipos de conexão, como o dbExpress. O OLEDB (Object
Linking and Embedding Database), é uma API desenvolvida pela Microsoft, que
permite o acesso a dados de uma variedade de fontes. Por sua vez os
componentes ADO facilitam a troca de dados com o servidor e o banco OLEDB e
está disponível nos componentes Delphi.

Resposta:​ C

10. (CESPE ‐ 2004 ‐ TRT ‐ 10ª REGIÃO (DF E TO) ‐ ANALISTA JUDICIÁRIO ‐
TECNOLOGIA DA INFORMAÇÃO) Conforme a sintaxe e a semântica da linguagem
Delphi, julgue os itens a seguir.
O código que se segue apaga um determinado elemento, aIndex, dentro de um array
chamado FArray.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 10​ de 56


Comentários:
Esta procedure tem um código super complicado, mas está fácil responder,
perceba que aIndex é um inteiro, não é um elemento do array, e sim o índice,
que é utilizado para o cálculo do elemento que será deletado.

Resposta:​ E

11. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ANALISTA DE SISTEMAS) Na


linguagem de programação Delphi, os arquivos com extensão “.pas”, “.dfm” e
“.dpr” armazenam os códigos fontes, respectivamente, referentes a
A) unidades de programa, formulário, demais unidades do projeto.
B) demais unidades do projeto, unidades de programa, formulário.
C) formulário, demais unidades do projeto, unidades de programa.
D) recursos do projeto, formulário, todas as unidades de programa.
E) todas as unidades de programa, formulário, recursos do projeto.

Comentários:
Os arquivos .pas contêm unidades de programa, em object Pascal, os .dfm
representam formulários, e os .dpr são outras unidades do projeto.

Resposta:​ Letra a)

12. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ ENGENHARIA DE


SOFTWARE) Analise o fragmento de código de um sistema de controle de estoque
desenvolvido em Delphi, apresentado a seguir.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 11​ de 56


Nesse fragmento, qual comando deve substituir a string XXX para correto
funcionamento do código?
A) TextFile
B) OpenTxt
C) GetFile
D) OpenRead
E) AssignFile

Comentários:
Questão de sintaxe, o comando que vincula um arquivo a uma variável do tipo
File (nesse caso TextFile) através de seu nome é o AssignFile.

Resposta:​ Letra e)

13. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA) A
maneira correta de se utilizar uma string na linguagem de programação indicada é:
A) Delphi:

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 12​ de 56


Declare TestStr As String = "Tribunal Regional Federal";
if pos("Tribunal",TestStr)>0 then
ShowMessage("Tribunal foi encontrado na posição "+IntToStr(pos()))
else
ShowMessage(" Não foi encontrado Tribunal na string");
B) C#:
string msg1 = @NULL;
string msg2 = System.String.Empty;
string novoPath = @'c:\TRF3R\Processos';
System.String titulo = 'Tribunal Regional Federal';
C) Visual Basic:
Dim TestDataTempo As Date = #1/27/2016 5:04:23 PM#
Dim TestStr As String
TestStr = Format(TestDataTempo, "dddd, MMM d yyyy")
D) Delphi:
var temp = "vazio";
const string msg = " Tribunal Regional Federal ";
char[] vogais = { 'A', 'E', 'I', 'O', 'U'};
string alfabeto = new string(vogais);
E) Visual Basic:
Dim Str As String = 'Tribunal Regional Federal'
Dim Primeira As String = Middle(TestString, 1, 3)
Dim Meio As String = Middle(TestString, 14, 4)
Dim Ultima As String = Middle(TestString, 5)

Comentários:
Questão interessante que compara as 3 linguagens. Vamos ver os erros dos itens.
a) Delphi não utiliza a sintaxe Declare X as Tipo e sim X : Tipo.
b) A forma de declaração está certa C# nas 3 primeiras linhas, realmente é
“java like” “tipo x = inicialização”. Mas na quarta linha, o tipo é
System.String o que é errado, essa é a classe de manipulação de strings.
Além disso, a inicialização com ‘@’ antes não é utilizada. O correto seria
apenas ​null, “c:\TRF3R\Processos”, “Tribunal Regional Federal”.
System.String.Empty está certo, equivale a ​“” (vazio).

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 13​ de 56


c) Certo. Sintaxe correta do Visual Basic.
d) Essa é a sintaxe C#. Repare que ​var ​no C# indica que o compilador deve
definir o tipo, nesse caso ​string.
e) A sintaxe de declaração Visual Basic está certa. Mas é utilizado aspa
simples, o correto é aspas duplas. Além disso, o comando ​Middle ​não
existe na biblioteca String, apenas em sql. A função equivalente seria
Substring.​ Mais um detalhe é que ele utiliza uma variável TestString não
declarada no trecho.

Resposta:​ Letra c)

14. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA) Uma
associação correta entre a linguagem de programação e suas palavras‐chave, é:
A) Visual Basic: abstracts, assert, extends, implements, package, native
B) C#: implicit, sbyte, params, sealed, foreach, namespace
C) Delphi: enddeclare, include_once, requires, final, global
D) Java: unit, implementation, uses, comp, extended, single
E) PHP: AddressOf, ByRef, Delegates, NotOverridable, WithEvents

Comentários:
Nesse tipo de questão é muito difícil saber tudo, mas se tiver alguma noção você
consegue eliminar alguns itens. Vamos analisar:
a) Errado. Essas são sintaxes Java.
b) Certo.
c) Essa mistura php com Java, faz uma mistura.
d) Essas são as palavras‐chave Delphi.
e) Mais uma mistura de Visual Basic e PHP.

Resposta:​ Letra b)

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 14​ de 56


15. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA) Em
relação à compilação e execução dos trechos de programa, considerando condições e
ambientes ideais a cada linguagem,

A) os compiladores das linguagens dos trechos 1 e 2 permitem a geração de arquivos


executáveis (.EXE). No Visual Studio é possível depurar um executável, com
limitações
B) no Visual Basic, a utilização do procedimento readln para ler as linhas do arquivo,
deverá ser implementada no evento onClick de um botão contido em um formulário
C) no trecho 2, para proteger a execução do código evitando um eventual erro de
abertura, a diretiva de compilação foi ligada pela instrução {$I‐}, para que o
resultado da operação de abertura do arquivo seja retornado pela função IOResult. O
retorno do valor 1 indica que o arquivo foi aberto com sucesso
D) no Delphi, cada arquivo criado deve ter um nome e um número para sua
identificação. Para que não haja erros de compilação, o nome do arquivo deve estar
acompanhado do caminho (path) onde o arquivo está armazenado

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 15​ de 56


E) na execução do trecho 1, todas as linhas do arquivo processos.txt serão
apresentadas até que o fim do arquivo seja atingido. É necessário que o arquivo
tenha, pelo menos, 2 linhas de dados para não ocorrer um run time error

Comentários:
O trecho 1 é um código Visual Basic e o segundo é Delphi. Os dois manipulam
arquivos (leitura e exibição de dados).
A) Certo.
B) Errado. Só trocou Delphi por Visual basic, o resto é certo.
C) Só erra no final ao dizer que o valor 1 indica sucesso, é o valor 0 o indicador.
D) Errado. Ele quer confundir com o estilo nome + numero dos tipos Delphi. O
“Edit1.Text” significa que o nome do arquivo é recebido através do campo de
input de usuário “Edit1”. O nome do arquivo não precisa estar com o path
completo, desde que esteja no path conhecido da aplicação.
E) O trecho lerá todo o arquivo, mas não é necessário ter 2 linhas.

Resposta:​ Letra a)

16. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA) Em
relação à sintaxe, estrutura e semântica dos trechos de programa,

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 16​ de 56


A) ambos os trechos manipulam um mesmo arquivo texto denominado processos.txt
B) a sintaxe para utilização de eventos onClick em ambas as linguagens é muito
semelhante, embora no trecho em C# seja necessário o uso de uma procedure
C) o trecho de código em Visual Basic apresenta erro de sintaxe, pois não foi
verificado se o arquivo existia antes de ser aberto para leitura
D) tanto no Visual Basic quanto no Delphi um arquivo texto é aberto, lido e exposto.
Ambos utilizam um componente text ou para ler o nome ou para mostrar o arquivo
E) em ambos os trechos a variavel1 é utilizada para receber os dados do arquivo que
são expostos, no Visual Basic, em um Memo Dialog Box

Comentários:
O primeiro código é Visual Basic (repare as declarações DIM) o segundo é Delphi
(repare o uso de procedure, var, begin, end, TForm). Vejamos item a item:

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 17​ de 56


a) Errado. O primeiro trecho manipula o arquivo ‘processos.txt’ o segundo,
‘Edit1.txt’.
b) Errado. Além de não ser parecido, o trecho não é C# é visual basic.
c) Errado. No Visual Basic o “Open” cria o arquivo caso não exista.
d) Certo.
e) Errado. O item faz uma bagunça. É certo que ambos utilizam a ​variavel1
para receber dados, mas na verdade o trecho em visual basic utiliza um
“Text Box” para expor os dados do arquivo e no Delphi é utilizado o
Memo1 que é da classe TMemo que permite que linhas sejam enviadas
para um formulário.

Resposta:​ Letra d)

PHP

Páginas HTML são estáticas, utilizando PHP podemos criar páginas web dinâmicas. Ele
permite que você manipule o conteúdo da página web no servidor antes que ela seja
entregue ao browser cliente. O ​script PHP ​é executado no servidor e pode alterar ou
gerar código HTML. Vamos ver um resumo da arquitetura PHP na imagem abaixo.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 18​ de 56


Agora que você já entendeu o funcionamento da arquitetura, vamos ver um exemplo de
página em PHP. Perceba no trecho abaixo que uma página PHP começa igualzinho a uma
página HTML. Incluindo as mesmas tags. Isso é o que chamamos de parte estática da
página. A coisa fica interessante é dentro da tag <?php ?>, é ela que indica que aquela
parte do código é dinâmica, que é um script PHP que deve ser interpretado pelo
servidor.

<!DOCTYPE html>
<html>
<head>
<title>​ Minha primeira página PHP ​</title>
</head>

<body>

​ h2>​ Cuidado! Estou aprendendo! ​</h2>


<

​ form​ m
< ​ ethod​=​"post">
​<label>​ Nome: ​</label>

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 19​ de 56


​<input​ t ​ ype​=​"text"​ ​id​=​"nome"​/>
​<input​ ​type​=​"submit"​ ​value​=​"Enviar"​ ​id​=​"nome"​/>
​ /form>
<

​<?​php
​ ​ $_POST​[​'nome'​];
$nome =

echo $nome ​.​ ​' está aprendendo PHP <br />'


​?>

</body>
</html>

Perceba o formulário faz o post quando a pessoa clica no botão, e o comando echo
adiciona conteúdo HTML de maneira dinâmica. Veja o resultado desse código:

superglobais

Glória Pires, Tony Ramos… não é deles que vamos falar rs. As variáveis superglobais do
PHP são aquelas que podem ser acessadas por qualquer arquivo, classe ou função. No
exemplo anterior você já viu uma delas que é a $_POST. Na tabela abaixo vamos ver as
demais.

$GLOBALS O PHP armazena todas as variáveis globais definidas por seu script em
um array chamado $GLOBALS[índice]. O índice guarda o nome da
variável.

$_SERVER Guarda informações relacionadas ao servidor, comocabeçalhos,


caminhos relativos, localização de scripts.

$_REQUEST É utilizado para coletar os dados após a submissão de um formulário


HTML.

$_POST Um dos métodos mais utilizados. Ele retorna os dados de um


formulário após a submissão de um form com ​method="post"​. $_POST

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 20​ de 56


também pode ser usado para passar variáveis entre páginas.

$_GET O $_GET também retorna dados do formulário, porém ele deve estar
definido com ​method="get". ​Além disso, o $_GET coleta dados
enviados pela URL.

$_FILES Utilizado para fazer upload e recuperar arquivos.

$_ENV Utilizado para recuperar variáveis de ambiente no servidor web.

$_COOKIE Recupera cookies armazenados no cliente.

$_SESSION Utilizado para guardar variáveis e valores que devem ser recuperados
durante a sessão.

arrays

Em um array podemos guardar múltiplos valores, vejamos um exemplo:

<!DOCTYPE html>
<html>
<body>

<?​php
$carros = ​ ​ array​(​"Volvo"​,​ ​"BMW"​,​ ​"Toyota"​);
echo "​ Eu gosto de "​ ​.​ $carros​[​0​]​ ​.​ ​", "​ ​.​ $carros​[​1​]​ ​.​ ​" e "​ ​.​ $carros​[​2​]​ ​.​ ​".";
?>

</body>
</html>

A saída de desse trecho será: Eu gosto de Volvo, BMW e Toyota.

Esse é o tipo mais simples de array, indexado por números, iniciando no índice 0. Mas,
no PHP, temos três tipos de arrays:

Indexed arrays (indexados) ‐ ​Arrays com ​índices numéricos


Associative arrays (associativos) ‐ ​Arrays com​ chaves nominais
Multidimensional arrays (multidimensionais) ‐ A ​ rrays contendo ​um ou mais arrays

Vejamos um exemplo do ​Array Associativo:

<?​php
$idade ​=​ array​(​"Pedro"​=>​"35"​,​ ​"Beto"​=>​"37"​,​ ​"Carlos"=
​ >​"43"​);
echo "​ Pedro têm "​ ​.​ $idade​[​'Pedro'​]​ ​.​ ​" anos de idade";
?>

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 21​ de 56


A saída de desse trecho será: Pedro têm 35 anos de idade.

O simbolo ‘=>’ (seta) é utilizado para indicar que os valores 35, 37 e 43 serão associados
as chaves Pedro, Beto e Carlos. Para iterar em um array associativo utilizamos o
foreach. Veja:

foreach​(​$idade ​as​ $x =
​ >​ $x_valor​)​ {
echo ​"Chave= "​ ​.​ $x ​.​ ​", Valor= "​ ​.​ $x_valor;
echo ​"<br>";
}

A saída de desse trecho será:


Chave= Pedro, Valor= 35
Chave= Beto, Valor= 37
Chave= Carlos, Valor= 43

O que o foreach faz é mapear na variável $x o valor de cada chave e na variável


$x_valor o valor associados a essa chave.

Existem diversas funções para a ordenação de arrays no PHP. É importante saber quais
são elas:
sort() ‐ ordena um array em ordem crescente
rsort() ‐ ordena um array em ordem reversa, decrescente
asort() ‐ ordena um array associativo em ordem crescente, de acordo com o valor
ksort() ‐ ordena um array associativo em ordem crescente, de acordo com a
chave (key)
arsort() ‐ ordena um array associativo em ordem reversa, decrescente, de acordo
com o valor
krsort() ‐ ordena um array associativo em ordem reversa, decrescente, de acordo
com a chave (key)

funções

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 22​ de 56


Vamos começar com um exemplo básico.

<?​php
function​ foo ​(​$arg_1​,​ $arg_2​,​ ​/* ..., */​ $arg_n)
{
echo ​"Exemplo de função.\n";
​return​ $valor_retornado;
}
?>

Os argumentos são iniciados com ‘$’ assim como as variáveis PHP. O valor de return é
sempre precedido pelo comando “return”. E as funções podem ser tipadas ou ter tipo
dinâmico assim como as variáveis.

Então, vamos ver um exemplo de passagem por referência.

<?​php
function​ add_some_extra​(&​$string)
{
$string ​.=​ ​' e alguma coisa mais.';
}
​ ​ ​'Isto é uma string,';
$str =
​ ​$str​);
add_some_extra(
echo $str​;​ ​// imprime 'Isto é uma string, e alguma coisa mais.'
?>

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 23​ de 56


1. (FCC - 2015 - TRE-RR - ANALISTA JUDICIÁRIO - ANÁLISE DE SISTEMAS)
Considere o seguinte script encontrado em uma página PHP.

<?php
$idade = array("Paulo"=>"40", "Pedro"=>"62", "Ana"=>"43", "Marcos"=>"18");
arsort($idade);
foreach($idade as $x => $x_valor) {
echo $x . " = " . $x_valor . " ";
}
?>

Ao executar o script será exibido na página:


A) Ana = 43 Marcos = 18 Paulo = 40 Pedro = 62
B) Marcos = 18 Paulo = 40 Ana = 43 Pedro = 62
C) 0 = 62 1 = 43 2 = 40 3 = 18
D) Pedro = 62 Paulo = 40 Marcos = 18 Ana = 43
E) Pedro = 62 Ana = 43 Paulo = 40 Marcos = 18

Comentários:
Questão sobre arrays e o método ​arsort. ​Como esse é um array com índices
associativos, vimos na aula que o ​asort​ que ordena o array em ordem crescente
dos valores, mantendo o índice. Já o ​arsort​, o ​r ​é de ​reverse, ​ordena os valores
na ordem inversa, ou seja, decrescente.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 24​ de 56


Resposta:​ Letra e)

2. (FCC - 2013 - MPE-MA - TÉCNICO DO JUDICIÁRIO - TECNOLOGIA DA


INFORMAÇÃO) Considere o código PHP a seguir:

O comando que deve ser utilizado na lacuna I para colocar os nomes em ordem
alfabética crescente é
A) order($nomes) ascending;
B) rsort($nomes);
C) index($nomes) order by asc;
D) sort($nomes);
E) krsort($nomes);

Comentários:
Esse é um array do tipo indexado, com índices numéricos. Portanto o método é o
sort simples.

Resposta:​ Letra d)

3. (FCC - 2013 - MPE-MA - TÉCNICO DO JUDICIÁRIO - TECNOLOGIA DA


INFORMAÇÃO) Considere um formulário criado na página de site desenvolvido
com PHP para permitir que os usuários façam upload de arquivos:

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 25​ de 56


No arquivo upload.php, as instruções utilizadas para se obter o nome e o tipo do
arquivo, caso não ocorra erro são, respectivamente,
A) $_DUMP["file"] e $_DUMP ["type"]
B) $_FILES["file"]["name"] e $_FILES["file"]["type"]
C) $_POST["file"] e $_ POST["type"]
D) $_FILES["file"] e $_FILES ["type"]
E) $_REQUEST["file"]["name"] e $_REQUEST["file"]["type"]

Comentários:
A variável superglobal que guarda os arquivos é o ​$_FILES. ​Perceba que o nome
do input do arquivo é ​file. ​Ele que será o índice passado para o $_FILES. Agora o
nome do arquivo e seu tipo estão dentro do objeto file. Por isso é preciso acessar
com dois índices. ​$_FILES["file"]["name"] e $_FILES["file"]["type"].

Resposta:​ Letra b)

4. (FCC - 2012 - TJ-RJ - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS) HTML,


DHTML, JavaScript e PHP são linguagens utilizadas no desenvolvimento de sites
da World Wide Web. A seu respeito é correto afirmar que
A) o código de uma aplicação JavaScript deve ser interpretado pelo servidor HTTP ao
passo que o código de uma aplicação PHP deve ser interpretado pelo cliente HTTP.
B) o código de uma aplicação JavaScript deve ser interpretado pelo cliente HTTP ao
passo que o código de uma aplicação PHP deve ser interpretado pelo servidor HTTP.
C) tanto o código de uma aplicação JavaScript como o código de uma aplicação PHP
devem ser executados pelo cliente HTTP.
D) tanto o código de uma aplicação JavaScript como o código de uma aplicação PHP
devem ser executados pelo servidor HTTP.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 26​ de 56


E) o código de uma página HTML deve ser interpretado pelo cliente HTTP ao passo
que o código de uma página DHTML deve ser interpretado pelo servidor HTTP.

Comentários:
Questão tranquila, diferentemente do javascript, os scripts PHP são
interpretados no servidor.

Resposta:​ Letra b)

5. (FCC - 2012 - TST - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS) Considere


o programa abaixo escrito na linguagem PHP:

O resultado a ser informado ao usuário após a execução do programa acima é:


A) 100 70 30 20 4
B) 50 35 15 10 2
C) 4 20 30 70 100
D) 2 10 15 35 50
E) 10 50 2 15 35

Comentários:
Questão de lógica. Esse algoritmo está fazendo a ordenação do vetor em ordem
decrescente. É o famoso bubble sort. Ele compara o elemento atual com o
próximo, se for maior eles trocam de lugar e assim sucessivamente, voltando
para o início a cada vez que realizar a troca.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 27​ de 56


Resposta:​ Letra d)

6. (FCC - 2012 - TRE-SP - TÉCNICO DO JUDICIÁRIO - PROGRAMADOR DE


SISTEMAS) A linguagem PHP permite a instalação de extensões que podem
aumentar sua gama de funcionalidades. Uma das funcionalidades extras que
podem ser adicionadas se refere a manipulação de arquivos XML. A extensão que
possui várias classes que podem ser instanciadas para a leitura e gravação de
arquivos XML é chamada
A) DOM.
B) XML-RPC.
C) Ctype.
D) SCA.
E) YAZ.

Comentários:
DOM ‐ Document Object Model ‐ é a extensão do PHP que permite que sejam
realizadas diversas operações em documentos XML através da API DOM.

Resposta:​ Letra a)

7. (FCC - 2012 - TRE-SP - TÉCNICO DO JUDICIÁRIO - PROGRAMADOR DE


SISTEMAS) Na linguagem PHP é possível utilizar o protocolo SOAP por meio de
classes desenvolvidas especificamente para esse protocolo. A classe que fornece
acesso cliente aos servidores SOAP é chamada de
A) PHPAccess.
B) WSDLClient.
C) SoapConnect.
D) SoapClient.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 28​ de 56


E) SoapAccess.

Comentários:
A classe SoapClient provê um cliente para servidores SOAP 1.1 e SOAP 1.2 . Pode
ser utilizada no modo WSDL or non‐WSDL.

Resposta:​ Letra a)

8. (FCC - 2011 - TRT - 14ª REGIÃO (RO E AC) - ANALISTA JUDICIÁRIO -


TECNOLOGIA DA INFORMAÇÃO) Na PHP 5, é uma função usada para a busca por
um padrão em um nome de arquivo:
A) fscanf.
B) fpassthru.
C) fseek.
D) fputs.
E) fnmatch.

Comentários:
Vamos ver o que cada função dessas faz:
fscanf: faz o parse de uma entrada de um arquivo aberto, de acordo com
o formato especificado.
fpassthru: lê de um arquivo aberto, até o EOF, e escreve o resultado no
buffer de saída.
fseek: move o ponteiro do arquivo para a posição determinada.
fputs: alias of fwrite(), escreve em um arquivo aberto.
fnmatch: busca em um nome de arquivo ou string um padrão específico.

Resposta:​ Letra e)

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 29​ de 56


9. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE
WEB) Para acessar bases de dados MySQL, por meio do PHP, é necessário antes
estabelecer uma conexão. Para isso, deve ser utilizado o comando:
A) mysql_&connect ou mysql_&pconnect
B) mysql_&&connect ou mysql_&&pconnect
C) mysql&_connect ou mysql&_pconnect
D) mysql&&_connect ou mysql&&_pconnect
E) mysql_connect ou mysql_pconnect

Comentários:
O comando de acesso a uma base de dados MySQL é ​mysql_connect ou
mysql_pconnect. ​A diferença entre os dois é que no segundo, a conexão é
persistente. ​Essas funções estão depreciadas nas versões mais recentes, o uso
agora é unificado na função ​mysqli_connect() ​e para que a conexão seja
persistente utiliza-se o parâmetro​ p: ​como prefixo do host.

Resposta:​ Letra e)

10. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) O envio de e-mails, por meio de programas PHP, é responsabilidade da
função
A) email.
B) mail.
C) &mail.
D) ismail.
E) &email.

Comentários:
A função é a ​mail()​, repare que o examinador tenta confundir colocando
simbolos, em php os nomes de variáveis é que são precedidas por símbolos ($), os

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 30​ de 56


nomes funções não (os parâmetros podem ser precedidos por & para indicar
passagem pro referência). Agora colocar email como alternativa foi maldade rs.
Veja um exemplo abaixo retirado da documentação.

// Send
mail('caffeinated@example.com', 'My Subject', $message);

Resposta:​ Letra b)

11. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) Em uma função, escrita na linguagem de programação PHP, a passagem de
parâmetros por referência é feita por meio da utilização do caractere:
A) !
B) %
C) &
D) @
E) ?

Comentários:
Nas funções PHP a passagem por valor é o padrão. Caso você necessite passar um
parâmetro por referência, utilize o caractere &. Veja no exemplo abaixo.

<?php
function foo(&$var)
{
$var++;
}

$a=5;
foo($a);
// $a vale 6 aqui.
?>

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 31​ de 56


Resposta:​ Letra c)

12. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) A validação de uma data em PHP pode ser realizada pela função
A) getdate.
B) checkdate.
C) setdate.
D) isdate.
E) mktime.

Comentários:
A função ​checkdate ​valida uma data do calendário Gregoriano. Sua assinatura é
a seguinte: ​checkdate(​month,day,year);

Resposta:​ Letra b)

13. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) Uma função PHP em execução terminará imediatamente, retornando seu
argumento como valor, se for chamada, na função, a instrução:
A) this
B) null
C) return
D) this.value
E) this.return

Comentários:
O comando ​return ​encerra a execução de uma função retornando o argumento
como valor.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 32​ de 56


Resposta:​ Letra c)

14. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) Para o recebimento dos dados de um formulário HTML, enviados por meio
do método GET, para uma página PHP, deve-se utilizar:
A) $_GET[“nome_text”]
B) $GET[“nome_text”]
C) _GET$[“nome_text”]
D) _$GET[“nome_text”]
E) _$_GET[“nome_text”]

Comentários:
Quando o formulário utiliza o método ​get, ​devemos utilizar a variável
supergloblal ​$_GET. ​Grave a sintaxe das variáveis superglobais.

Resposta:​ Letra a)

15. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) NÃO se trata de uma característica do PHP:
A) portábil.
B) baseado no servidor.
C) gratuito e com código aberto.
D) embutido no HTML.
E) baseado no cliente.

Comentários:

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 33​ de 56


Conforme visto na arquitetura do PHP, é necessário que os scripts sejam
interpretados pelo servidor para que o código HTML que será apresentado ao
cliente sejam gerados.

Resposta:​ Letra e)

16. (FCC - 2009 - TRT-3ª REGIÃO (MG) - ANALISTA JUDICIÁRIO - TECNOLOGIA DA


INFORMAÇÃO) Dados os operadores “e” lógico: “and”, “&&” e “&” e os operadores
“ou” lógico: “or”, “||” e “|”, a ordem de precedência no momento do PHP avaliar as
expressões será na sequência
A) and, &&, &, or, || e |.
B) or, II, I, and, && e &.
C) and, or, &&, ||, & e |.
D) or, and, ||, &&, | e &.
E) &, &&, and, |, || e or.

Comentários:
O ​and ​sempre tem precedência sobre o ​or​, e os operadores bitwise tem
precedência sobre os demais.

Resposta:​ Letra d)

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 34​ de 56


17. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA)
Cookie é um arquivo texto que pode ser armazenado no computador do usuário,
normalmente com informações de sua navegação no site, para ser recuperado
posteriormente pelo servidor. Em PHP, um cookie criado pela instrução
setcookie("ck", "abcde", time() + 3600); poderá ser recuperado utilizando a
instrução
A) $_ISSET["ck"]
B) load_cookie ("ck")
C) get_cookie("ck")
D) $_GETCOOKIE["ck"]
E) $_COOKIE["ck"]

Comentários:
Como vimos na aula, a variável superglobal ​$_COOKIE[“ck”] ​recupera cookies
armazenados no cliente.

Resposta:​ Letra e)

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 35​ de 56


18. (FGV - 2015 - TJ-PI - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS (BANCO
DE DADOS)) Analise o código PHP mostrado a seguir.

<?php
function f($arg)
{
$arg01 = 343 + 20/2 + 911;
$arg02 = 38 - (5 * 11);
$argRetorno = $arg01 - $arg02;
}

$arg01 = 343;
$arg02 = 38;
f($arg01);
echo $arg01;
?>

A saída produzida pela execução desse código é:


A) -17
B) 38
C) 343
D) 1264
E) 1281

Comentários:
Vimos na aula que a passagem padrão de argumentos no php é ​por valor​, ou
seja, o valor da variável passada não é alterado. Logo, o valor continua sendo
343.

Resposta:​ Letra c)

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 36​ de 56


19. (FGV - 2015 - TJ-PI - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS (BANCO
DE DADOS)) Uma String recebida do campo nome de um formulário HTML enviado
por meio do método POST para um site deve ser codificada para UTF-8. A forma
correta de realizar essa operação, utilizando a linguagem PHP, é:
A) $nome = utf8_encode( $_POST['nome'] )
B) $nome: utf8
C) decode($nome)
D) $nome = string( $_POST['nome'] )
E) parseHTML($nome, utf8( $_POST['nome'] )

Comentários:
Para resolver essa questão, precisamos saber qual é a forma de ler um campo do
método POST. Já sabemos que a variável superglobal ​$_POST​ guarda os valores
passados, para recuperar basta colocar o nome do campo, logo, recuperamos o
campo nome dessa forma: ​$_POST[​'​nome​'​].​ Isso jé eliminam as letras b e c.
Infelizmente era necessário saber que a função é a ​utf8_encode.

Resposta:​ Letra a)

20. (IESES - 2015 - IFC-SC - INFORMÁTICA - WEB DESIGN) Em um código PHP 5.6.2,
qual das alternativas a seguir atribuiria o valor 10 à variável $var?
A) $var = (100 > 10 : 100 ? 10);
B) $var = (100 > 10 ? 10 : 100);
C) $var = (100 > 10 : 10 ? 100);
D) $var = (100 > 10 ? 100 : 10);

Comentários:
O ‘?’ é o ​operador ternário ​do PHP. Sua sintaxe é ​(exp1 ? exp2 : exp3).
Caso a ​exp1 ​seja ​verdadeira ​o retorno é ​exp2​, caso seja ​falsa​, o retorno é
exp3​.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 37​ de 56


Os itens A e C estão com sintaxe errada. Vamos analisar os restantes:
B) 100 > 10 ? verdade; Logo retorna ​10. ​Correto.
D) 100 > 10 ? verdade; Logo retorna ​100. ​Incorreto.

Resposta:​ Letra b)

21.(FGV - 2015 - TJ-PI - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS


(DESENVOLVIMENTO)) Analise o código PHP mostrado a seguir.

Ao final da execução desse código, os valores na variável $lista estarão:


A) ordenados de forma crescente, segundo o método de ordenação Quicksort;
B) ordenados de forma crescente, segundo o método de ordenação em bolha;
C) embaralhados, não sendo possível prever a ordem dos valores;
D) removidos da variável, devido a um erro no código;
E) duplicados, devido a um erro no código.

Comentários:
Primeiramente, a variável $lista recebe um array cujos valores são os números de
0 à 20 (retorno da função ​range​). Em seguida, executamos uma for com a
variável $i também recebendo valores de 0 a 20.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 38​ de 56


Ao entrar no for, a variável $pos sempre receberá um valor ​aleatório ​entre 0 e
20 (função rand). A $aux receberá o valor da $lista[0], ou seja, 0. E $lista[0] =
$lista[$pos], quer dizer que receberá um valor ​aleatório ​entre 0 e 20. E ao final
$lista[$pos] = $aux, $aux == 0 nesse momento, ou seja, a posição aleatória
receberá o valor na ordem do loop.

Ufa, para mim isso virou uma bagunça total entre 0 e 20 rs, não podemos saber
quais valores estão em cada posição.

Resposta:​ Letra c)

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 39​ de 56


LISTA DE EXERCÍCIOS
(PHP ‐ DIVERSAS BANCAS)

1. (FCC - 2015 - TRE-RR - ANALISTA JUDICIÁRIO - ANÁLISE DE SISTEMAS)


Considere o seguinte script encontrado em uma página PHP.

<?php
$idade = array("Paulo"=>"40", "Pedro"=>"62", "Ana"=>"43", "Marcos"=>"18");
arsort($idade);
foreach($idade as $x => $x_valor) {
echo $x . " = " . $x_valor . " ";
}
?>

Ao executar o script será exibido na página:


A) Ana = 43 Marcos = 18 Paulo = 40 Pedro = 62
B) Marcos = 18 Paulo = 40 Ana = 43 Pedro = 62
C) 0 = 62 1 = 43 2 = 40 3 = 18
D) Pedro = 62 Paulo = 40 Marcos = 18 Ana = 43
E) Pedro = 62 Ana = 43 Paulo = 40 Marcos = 1

2. (FCC - 2013 - MPE-MA - TÉCNICO DO JUDICIÁRIO - TECNOLOGIA DA


INFORMAÇÃO) Considere o código PHP a seguir:

O comando que deve ser utilizado na lacuna I para colocar os nomes em ordem
alfabética crescente é
A) order($nomes) ascending;
B) rsort($nomes);

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 40​ de 56


C) index($nomes) order by asc;
D) sort($nomes);
E) krsort($nomes);

3. (FCC - 2013 - MPE-MA - TÉCNICO DO JUDICIÁRIO - TECNOLOGIA DA


INFORMAÇÃO) Considere um formulário criado na página de site desenvolvido
com PHP para permitir que os usuários façam upload de arquivos:

No arquivo upload.php, as instruções utilizadas para se obter o nome e o tipo do


arquivo, caso não ocorra erro são, respectivamente,
A) $_DUMP["file"] e $_DUMP ["type"]
B) $_FILES["file"]["name"] e $_FILES["file"]["type"]
C) $_POST["file"] e $_ POST["type"]
D) $_FILES["file"] e $_FILES ["type"]
E) $_REQUEST["file"]["name"] e $_REQUEST["file"]["type"]

4. (FCC - 2012 - TJ-RJ - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS) HTML,


DHTML, JavaScript e PHP são linguagens utilizadas no desenvolvimento de sites
da World Wide Web. A seu respeito é correto afirmar que
A) o código de uma aplicação JavaScript deve ser interpretado pelo servidor HTTP ao
passo que o código de uma aplicação PHP deve ser interpretado pelo cliente HTTP.
B) o código de uma aplicação JavaScript deve ser interpretado pelo cliente HTTP ao
passo que o código de uma aplicação PHP deve ser interpretado pelo servidor HTTP.
C) tanto o código de uma aplicação JavaScript como o código de uma aplicação PHP
devem ser executados pelo cliente HTTP.
D) tanto o código de uma aplicação JavaScript como o código de uma aplicação PHP
devem ser executados pelo servidor HTTP.
E) o código de uma página HTML deve ser interpretado pelo cliente HTTP ao passo
que o código de uma página DHTML deve ser interpretado pelo servidor HTTP.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 41​ de 56


5. (FCC - 2012 - TST - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS) Considere
o programa abaixo escrito na linguagem PHP:

O resultado a ser informado ao usuário após a execução do programa acima é:


A) 100 70 30 20 4
B) 50 35 15 10 2
C) 4 20 30 70 100
D) 2 10 15 35 50
E) 10 50 2 15 35

6. (FCC - 2012 - TRE-SP - TÉCNICO DO JUDICIÁRIO - PROGRAMADOR DE


SISTEMAS) A linguagem PHP permite a instalação de extensões que podem
aumentar sua gama de funcionalidades. Uma das funcionalidades extras que
podem ser adicionadas se refere a manipulação de arquivos XML. A extensão que
possui várias classes que podem ser instanciadas para a leitura e gravação de
arquivos XML é chamada
A) DOM.
B) XML-RPC.
C) Ctype.
D) SCA.
E) YAZ.

7. (FCC - 2012 - TRE-SP - TÉCNICO DO JUDICIÁRIO - PROGRAMADOR DE


SISTEMAS) Na linguagem PHP é possível utilizar o protocolo SOAP por meio de
classes desenvolvidas especificamente para esse protocolo. A classe que fornece
acesso cliente aos servidores SOAP é chamada de

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 42​ de 56


A) PHPAccess.
B) WSDLClient.
C) SoapConnect.
D) SoapClient.
E) SoapAccess.

8. (FCC - 2011 - TRT - 14ª REGIÃO (RO E AC) - ANALISTA JUDICIÁRIO -


TECNOLOGIA DA INFORMAÇÃO) Na PHP 5, é uma função usada para a busca por
um padrão em um nome de arquivo:
A) fscanf.
B) fpassthru.
C) fseek.
D) fputs.
E) fnmatch.

9. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) Para acessar bases de dados MySQL, por meio do PHP, é necessário antes
estabelecer uma conexão. Para isso, deve ser utilizado o comando:
A) mysql_&connect ou mysql_&pconnect
B) mysql_&&connect ou mysql_&&pconnect
C) mysql&_connect ou mysql&_pconnect
D) mysql&&_connect ou mysql&&_pconnect
E) mysql_connect ou mysql_pconnect

10. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) O envio de e-mails, por meio de programas PHP, é responsabilidade da
função
A) email.
B) mail.
C) &mail.
D) ismail.
E) &email.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 43​ de 56


11. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE
WEB) Em uma função, escrita na linguagem de programação PHP, a passagem de
parâmetros por referência é feita por meio da utilização do caractere:
A) !
B) %
C) &
D) @
E) ?

12. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) A validação de uma data em PHP pode ser realizada pela função
A) getdate.
B) checkdate.
C) setdate.
D) isdate.
E) mktime.

13. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) Uma função PHP em execução terminará imediatamente, retornando seu
argumento como valor, se for chamada, na função, a instrução:
A) this
B) null
C) return
D) this.value
E) this.return

14. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE


WEB) Para o recebimento dos dados de um formulário HTML, enviados por meio
do método GET, para uma página PHP, deve-se utilizar:
A) $_GET[“nome_text”]
B) $GET[“nome_text”]
C) _GET$[“nome_text”]
D) _$GET[“nome_text”]
E) _$_GET[“nome_text”]

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 44​ de 56


15. (FCC - 2010 - TCE-SP - AGENTE DA FISCALIZAÇÃO FINANCEIRA - SUPORTE DE
WEB) NÃO se trata de uma característica do PHP:
A) portábil.
B) baseado no servidor.
C) gratuito e com código aberto.
D) embutido no HTML.
E) baseado no cliente.

16. (FCC - 2009 - TRT-3ª REGIÃO (MG) - ANALISTA JUDICIÁRIO - TECNOLOGIA DA


INFORMAÇÃO) Dados os operadores “e” lógico: “and”, “&&” e “&” e os operadores
“ou” lógico: “or”, “||” e “|”, a ordem de precedência no momento do PHP avaliar as
expressões será na sequência
A) and, &&, &, or, || e |.
B) or, II, I, and, && e &.
C) and, or, &&, ||, & e |.
D) or, and, ||, &&, | e &.
E) &, &&, and, |, || e or.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 45​ de 56


17. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA)
Cookie é um arquivo texto que pode ser armazenado no computador do usuário,
normalmente com informações de sua navegação no site, para ser recuperado
posteriormente pelo servidor. Em PHP, um cookie criado pela instrução
setcookie("ck", "abcde", time() + 3600); poderá ser recuperado utilizando a
instrução
A) $_ISSET["ck"]
B) load_cookie ("ck")
C) get_cookie("ck")
D) $_GETCOOKIE["ck"]
E) $_COOKIE["ck"]

18. (FGV - 2015 - TJ-PI - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS (BANCO


DE DADOS)) Analise o código PHP mostrado a seguir.

<?php
function f($arg)
{
$arg01 = 343 + 20/2 + 911;
$arg02 = 38 - (5 * 11);
$argRetorno = $arg01 - $arg02;
}

$arg01 = 343;
$arg02 = 38;
f($arg01);
echo $arg01;
?>

A saída produzida pela execução desse código é:


A) -17
B) 38
C) 343
D) 1264

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 46​ de 56


E) 1281

19. (FGV - 2015 - TJ-PI - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS (BANCO


DE DADOS)) Uma String recebida do campo nome de um formulário HTML enviado
por meio do método POST para um site deve ser codificada para UTF-8. A forma
correta de realizar essa operação, utilizando a linguagem PHP, é:
A) $nome = utf8_encode( $_POST['nome'] )
B) $nome: utf8
C) decode($nome)
D) $nome = string( $_POST['nome'] )
E) parseHTML($nome, utf8( $_POST['nome'] )

20. (IESES - 2015 - IFC-SC - INFORMÁTICA - WEB DESIGN) Em um código PHP 5.6.2,
qual das alternativas a seguir atribuiria o valor 10 à variável $var?
A) $var = (100 > 10 : 100 ? 10);
B) $var = (100 > 10 ? 10 : 100);
C) $var = (100 > 10 : 10 ? 100);
D) $var = (100 > 10 ? 100 : 10);

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 47​ de 56


21.(FGV - 2015 - TJ-PI - ANALISTA JUDICIÁRIO - ANALISTA DE SISTEMAS
(DESENVOLVIMENTO)) Analise o código PHP mostrado a seguir.

Ao final da execução desse código, os valores na variável $lista estarão:


A) ordenados de forma crescente, segundo o método de ordenação Quicksort;
B) ordenados de forma crescente, segundo o método de ordenação em bolha;
C) embaralhados, não sendo possível prever a ordem dos valores;
D) removidos da variável, devido a um erro no código;
E) duplicados, devido a um erro no código.

GABARITO
(PHP ‐ DIVERSAS BANCAS)

1 2 3 4 5 6 7 8 9 10 11 12 13

E D B B D A A E E B C B C

14 15 16 17 18 19 20 21

A E D E C A B C

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 48​ de 56


LISTA DE EXERCÍCIOS
(DELPHI ‐ DIVERSAS BANCAS)

1. (FCC ‐ 2009 ‐ TRT‐3ª REGIÃO (MG) ‐ ANALISTA JUDICIÁRIO ‐ TECNOLOGIA DA


INFORMAÇÃO) A primeira tela exibida quando um programa Delphi é executado, cuja
exibição dura apenas alguns instantes durante a carga do programa, denomina‐se
tela
A) ShowModal.
B) OnShow.
C) de login.
D) de setup.
E) de splash.

2. (FGV ‐ 2015 ‐ TCE‐SE ‐ ANALISTA DE TECNOLOGIA DA INFORMAÇÃO ‐


DESENVOLVIMENTO) Em um programa codificado na linguagem Delphi, a abertura do
arquivo texto "arq.txt" para leitura utiliza, em sequência, as chamadas
Assign(arq,"arq.txt") e Reset(arq), sendo arq uma variável do tipo text. Supondo que
a opção {$IOChecks off} esteja habilitada, para saber se o arquivo foi aberto com
sucesso, o programador deve:
A) testar o valor retornado pela função Reset, que é do tipo boolean;
B) testar o valor retornado pela função Reset, que é do tipo integer;
C) testar o valor retornado pela função IOResult, que é do tipo boolean;
D) testar o valor retornado pela função IOResult, que é do tipo integer;
E) testar os valores retornados pelas funções Reset e IOResult, ambos do tipo integer.

3. (CESPE ‐ 2015 ‐ STJ ‐ ANALISTA JUDICIÁRIO ‐ DESENVOLVIMENTO) Métodos


callback são formas de instanciar métodos utilizando‐se tecnologia de chamada em
segundo plano escondido do plano sequencial da aplicação.

4. (CESPE ‐ 2015 ‐ STJ ‐ ANALISTA JUDICIÁRIO ‐ DESENVOLVIMENTO) A diretiva $V


controla a verificação de tipos em sequências curtas, que são passados como
parâmetros variáveis.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 49​ de 56


5. (CESPE ‐ 2015 ‐ STJ ‐ ANALISTA JUDICIÁRIO ‐ DESENVOLVIMENTO) O TdataSource
é um componente não visual da VCL (visual component library) utilizado em
formulários para conectar um controle e um conjunto de dados usado pelo controle.
6. (CESPE ‐ 2015 ‐ STJ ‐ ANALISTA JUDICIÁRIO ‐ DESENVOLVIMENTO) Na versão 7 do
Delphi, os drivers nativos para o Firebird não estão disponíveis, mas é possível
acessá‐los por meio de componentes dbExpress, em cuja paleta a propriedade
DriverName define o driver do banco de dados utilizado.

7. (CESPE ‐ 2005 ‐ TRT ‐ 16ª REGIÃO (MA) ‐ ANALISTA JUDICIÁRIO ‐ TECNOLOGIA DA


INFORMAÇÃO) A linguagem Delphi permite acessar os campos de um conjunto de
dados por meio do objeto Tfield e seus descendentes, mas não permite a alteração
de suas propriedades, que deve ser realizada pelo método Tfieldchange.

8. (CESPE ‐ 2005 ‐ TRT ‐ 16ª REGIÃO (MA) ‐ ANALISTA JUDICIÁRIO ‐ TECNOLOGIA DA


INFORMAÇÃO) Acerca da sintaxe e da semântica da linguagem Delphi no acesso a
banco de dados, julgue os itens subseqüentes.
A arquitetura de banco de dados da linguagem Delphi possui componentes que
representam e encapsulam, apropriadamente, informações de banco de dados. A
interface do usuário interage com os dados através da origem dos dados, conectando‐se
a um conjunto de dados.

9. (CESPE ‐ 2005 ‐ TRT ‐ 16ª REGIÃO (MA) ‐ ANALISTA JUDICIÁRIO ‐ TECNOLOGIA DA


INFORMAÇÃO) O componente palette possui funcionalidades que usam o activex data
objects (ADO), padrão Microsoft, para acessar banco de dados por meio do OLEDB.

10. (CESPE ‐ 2004 ‐ TRT ‐ 10ª REGIÃO (DF E TO) ‐ ANALISTA JUDICIÁRIO ‐
TECNOLOGIA DA INFORMAÇÃO) Conforme a sintaxe e a semântica da linguagem
Delphi, julgue os itens a seguir.
O código que se segue apaga um determinado elemento, aIndex, dentro de um array
chamado FArray.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 50​ de 56


11. (AOCP ‐ 2012 ‐ TCE‐PA ‐ ASSESSOR TÉCNICO ‐ ANALISTA DE SISTEMAS) Na
linguagem de programação Delphi, os arquivos com extensão “.pas”, “.dfm” e
“.dpr” armazenam os códigos fontes, respectivamente, referentes a
A) unidades de programa, formulário, demais unidades do projeto
B) demais unidades do projeto, unidades de programa, formulário.
C) formulário, demais unidades do projeto, unidades de programa.
D) recursos do projeto, formulário, todas as unidades de programa.
E) todas as unidades de programa, formulário, recursos do projeto.

12. (CESGRANRIO ‐ 2010 ‐ ELETROBRAS ‐ ANALISTA DE SISTEMAS ‐ ENGENHARIA DE


SOFTWARE) Analise o fragmento de código de um sistema de controle de estoque
desenvolvido em Delphi, apresentado a seguir.

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 51​ de 56


Nesse fragmento, qual comando deve substituir a string XXX para correto
funcionamento do código?
A) TextFile
B) OpenTxt
C) GetFile
D) OpenRead
E) AssignFile

13. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA) A
maneira correta de se utilizar uma string na linguagem de programação indicada é:
A) Delphi:
Declare TestStr As String = "Tribunal Regional Federal";
if pos("Tribunal",TestStr)>0 then
ShowMessage("Tribunal foi encontrado na posição "+IntToStr(pos()))
else
ShowMessage(" Não foi encontrado Tribunal na string");
B) C#:
string msg1 = @NULL;
string msg2 = System.String.Empty;

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 52​ de 56


string novoPath = @'c:\TRF3R\Processos';
System.String titulo = 'Tribunal Regional Federal';
C) Visual Basic:
Dim TestDataTempo As Date = #1/27/2016 5:04:23 PM#
Dim TestStr As String
TestStr = Format(TestDataTempo, "dddd, MMM d yyyy")
D) Delphi:
var temp = "vazio";
const string msg = " Tribunal Regional Federal ";
char[] vogais = { 'A', 'E', 'I', 'O', 'U'};
string alfabeto = new string(vogais);
E) Visual Basic:
Dim Str As String = 'Tribunal Regional Federal'
Dim Primeira As String = Middle(TestString, 1, 3)
Dim Meio As String = Middle(TestString, 14, 4)
Dim Ultima As String = Middle(TestString, 5)

14. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA) Uma
associação correta entre a linguagem de programação e suas palavras‐chave, é:
A) Visual Basic: abstracts, assert, extends, implements, package, native
B) C#: implicit, sbyte, params, sealed, foreach, namespace
C) Delphi: enddeclare, include_once, requires, final, global
D) Java: unit, implementation, uses, comp, extended, single
E) PHP: AddressOf, ByRef, Delegates, NotOverridable, WithEvents

15. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA) Em
relação à compilação e execução dos trechos de programa, considerando condições e
ambientes ideais a cada linguagem,

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 53​ de 56


A) os compiladores das linguagens dos trechos 1 e 2 permitem a geração de arquivos
executáveis (.EXE). No Visual Studio é possível depurar um executável, com
limitações
B) no Visual Basic, a utilização do procedimento readln para ler as linhas do arquivo,
deverá ser implementada no evento onClick de um botão contido em um formulário
C) no trecho 2, para proteger a execução do código evitando um eventual erro de
abertura, a diretiva de compilação foi ligada pela instrução {$I‐}, para que o
resultado da operação de abertura do arquivo seja retornado pela função IOResult. O
retorno do valor 1 indica que o arquivo foi aberto com sucesso
D) no Delphi, cada arquivo criado deve ter um nome e um número para sua
identificação. Para que não haja erros de compilação, o nome do arquivo deve estar
acompanhado do caminho (path) onde o arquivo está armazenado
E) na execução do trecho 1, todas as linhas do arquivo processos.txt serão
apresentadas até que o fim do arquivo seja atingido. É necessário que o arquivo
tenha, pelo menos, 2 linhas de dados para não ocorrer um run time error

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 54​ de 56


16. (FCC ‐ 2016 ‐ TRF 3ª REGIÃO (SP MS) ‐ TÉCNICO JUDICIÁRIO ‐ INFORMÁTICA) Em
relação à sintaxe, estrutura e semântica dos trechos de programa,

A) ambos os trechos manipulam um mesmo arquivo texto denominado processos.txt


B) a sintaxe para utilização de eventos onClick em ambas as linguagens é muito
semelhante, embora no trecho em C# seja necessário o uso de uma procedure
C) o trecho de código em Visual Basic apresenta erro de sintaxe, pois não foi
verificado se o arquivo existia antes de ser aberto para leitura
D) tanto no Visual Basic quanto no Delphi um arquivo texto é aberto, lido e exposto.
Ambos utilizam um componente text ou para ler o nome ou para mostrar o arquivo
E) em ambos os trechos a variavel1 é utilizada para receber os dados do arquivo que
são expostos, no Visual Basic, em um Memo Dialog Box

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 55​ de 56


GABARITO
(DELPHI ‐ DIVERSAS BANCAS)

1 2 3 4 5 6 7 8 9 10 11 12 13

E E D C C C E B C E A E C

14 15 16

B A D

Profa. Mayara Rosa www.estrategiac​oncursos.com.br Página 56​ de 56

Você também pode gostar