Escolar Documentos
Profissional Documentos
Cultura Documentos
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
APRESENTAÇÃO.
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?
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.
O PROFESSOR
www.facebook.com/professordiegocarvalho
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!
16712855225
16712855225
16712855225
O CURSO...
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:
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/
CRONOGRAM
12 15/09 Framework .NET, C#, Visual Basic, ASP.NET e Visual Studio (Prof.
Mayara Rosa)
16712855225
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!
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.
16712855225
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.
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.
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
início
<instruções>
se <teste> então
<instruções>
senão
<instruções>
fim_se
fim
16712855225
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!
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.
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:
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 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.
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 é:
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!
Diferente de <> ou !=
Maior que >
Menor que <
Maior ou igual a >=
Menor ou igual a <=
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
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
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
16712855225
16712855225
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.
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.
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
a) For
b) If...Then...Else
c) While
d) Do...While
e) Next
Comentários:
Gabarito: B
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.
Gabarito: A
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.
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: C
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
Comentários:
Gabarito: E
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
Gabarito: C
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.
Gabarito: C
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.
Gabarito: E
16712855225
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).
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
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
Gabarito: B
A opção que utiliza a estrutura para ... faça ... correspondente, que gera o mesmo
resultado, é:
Comentários:
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.
programa.
e) O número de constantes deve ser igual ao número de procedimentos em um
programa.
Comentários:
Gabarito: D
função fatorial(n)
{
se (n <= 1)
retorne 1;
senão
retorne n * fatorial(n-1);
}
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
Gabarito: C
ACERTEI ERREI
FUNÇÕES E PROCEDIMENTOS
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>
int main()
{
int valor1 = 5;
int valor2 = 10;
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.
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.
int main()
{
int valor1 = 5;
int valor2 = 10;
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.
16712855225
COMPLEXIDADE DE ALGORITMOS
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!
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.
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!
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
16712855225
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
Gabarito: D
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
MÉTODOS DE ORDENAÇÃO
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).
BubbleSort (Troca)
InsertionSort (Inserção)
SelectionSort (Seleção)
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
QuickSort (Troca)
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
16712855225
ShellSort (Inserção)
MergeSort (Intercalação)
16712855225
HeapSort (Seleção)
16712855225
RESUMÃO DE COMPLEXIDADES
16712855225
a) Bubble Sort
b) Select Sort
c) Shell Sort
d) Busca Sequencial;
e) Quick Sort;
Comentários:
Gabarito: D
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
Comentários:
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
Comentários:
Gabarito: E
Comentários:
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).
Gabarito: E
Comentários:
Gabarito: C
a) SelectionSort e InsertionSort.
b) MergeSort e BubbleSort.
c) QuickSort e SelectionSort.
d) BubbleSort e QuickSort.
e) InsertionSort e MergeSort.
Comentários:
Gabarito: D
Comentários:
Gabarito: E
Comentários:
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
Comentários:
Gabarito: C
a) O(1) 16712855225
b) O(log n)
c) O(n)
d) O(n log n)
e) O(n2)
Comentários:
Trata-se de O(n²)!
Gabarito: E
a) HeapSort e BubbleSort
b) QuickSort e InsertionSort
c) MergeSort e BubbleSort
d) InsertionSort
e) HeapSort, QuickSort e MergeSort
Comentários:
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.
a) Selectionsort (seleção)
b) Insertionsort (inserção)
c) Merge sort
d) Quicksort
e) Heapsort
Comentários:
Gabarito: B
a) Merge sort
b) Insertion sort
c) Bubble sort
d) Quick sort
e) Selection sort
Comentários:
Gabarito: A
Comentários:
Gabarito: C
Comentários:
16712855225
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: C
b) A estrutura de dados que utiliza, chamada heap, pode ser interpretada como
uma árvore binária.
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
Comentários:
16712855225
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
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:
Gabarito: D
ACERTEI ERREI
16712855225
a) For
b) If...Then...Else
c) While
d) Do...While
e) Next
a) Recursividade.
b) Rotatividade.
c) Repetição.
d) Interligação.
e) Condicionalidade.
A opção que utiliza a estrutura para ... faça ... correspondente, que gera o mesmo
16712855225
resultado, é:
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.
função fatorial(n)
{
se (n <= 1)
retorne 1;
senão
retorne n * fatorial(n-1);
}
a) Branco.
b) Amarelo.
c) Azul.
d) Verde.
e) Vermelho.
a) Bubble Sort
b) Select Sort
c) Shell Sort
d) Busca Sequencial;
e) Quick Sort;
a) SelectionSort e InsertionSort.
b) MergeSort e BubbleSort.
c) QuickSort e SelectionSort.
d) BubbleSort e QuickSort.
e) InsertionSort e MergeSort.
a) O(1)
b) O(log n)
c) O(n)
d) O(n log n) 16712855225
e) O(n2)
a) HeapSort e BubbleSort
b) QuickSort e InsertionSort
c) MergeSort e BubbleSort
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
a) Merge sort
b) Insertion sort
c) Bubble sort
d) Quick sort
e) Selection sort
b) A estrutura de dados que utiliza, chamada heap, pode ser interpretada como
uma árvore binária.
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.
(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
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
1 2 3 4 5 6 7 8 9 10
D B
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
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
16712855225
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:
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
(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.
1
Filas, Pilhas, Árvores, Deques, entre outros.
16712855225
Comentários:
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
Gabarito: D
Comentários:
Gabarito: E
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.
Gabarito: C
Comentários:
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.
Gabarito: E
Comentários:
Gabarito: C
Comentários:
(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
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.
Comentários:
(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
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
Comentários:
Gabarito: E
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.
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
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
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Perfeito! Observem que vetores são diferentes de listas, nesse sentido. Eu posso
16712855225
Gabarito: C
ACERTEI ERREI
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.
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.
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.
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
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
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.
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: C
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
Comentários:
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:
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.
Gabarito: C
Comentários:
Gabarito: C
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
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
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
Comentários:
Gabarito: E
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
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:
Gabarito: E
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:
Comentários:
Gabarito: A
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
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).
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
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
Gabarito: E
Comentários:
Gabarito: E
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
Comentários:
Gabarito: E
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.
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
Comentários:
Não! LIFO é similar a UEPS (Último a Entrar, Primeiro a Sair). PEPS refere-se a
16712855225
Gabarito: E
a) Fila e Pilha.
b) Pilha e Fila.
c) Grafo e Árvore.
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
Comentários:
Gabarito: C
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).
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
Comentários:
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
Comentários:
Gabarito: C
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
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:
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.
Gabarito: C
ACERTEI ERREI
16712855225
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
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
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários: 16712855225
Gabarito: C
a) fila.
b) árvore binária.
c) pilha.
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:
Comentários:
Gabarito: A
Comentários:
Gabarito: C
Comentários:
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:
Gabarito: C
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:
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:
Gabarito: C
Comentários:
Gabarito: E
ACERTEI ERREI
ÁRVORES
16712855225
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.
16712855225
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
Comentários:
Gabarito: C
Comentários:
Perfeito, observem que alguns autores tratam Tipos de Dados como sinônimo de
Estruturas de Dados.
Gabarito: C
16712855225
Comentários:
Não, árvore binária é aquela em que cada nó tem, no máximo, dois filhos!
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: E
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
Comentários:
Gabarito: E
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
Comentários:
Gabarito: E
Comentários:
Gabarito: E
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
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).
16712855225
N = {A, B, C, D, E, F}
A = {(A,B), (B,A), (B,C), (B,D), (C,C), (D,A), (D,C), (E,F)}
Aresta ou Arco:
Qualquer elemento de um conjunto A.
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: AC <(A,B), (B,D), (D,C)>).
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 é 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.
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).
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.
16712855225
Comentários:
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
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.
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
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 }
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
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).
Gabarito: C
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
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
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
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
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.
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
Comentários:
Gabarito: C
16712855225
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
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
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
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
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
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
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
HASHING
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.
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.
Comentários:
Perfeito! Para fazer uma pesquisa sequencial, não é necessário que os dados
estejam ordenados – diferentemente da pesquisa binária.
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabarito: E
a) array.
b) lista.
c) vetor.
d) árvore binária.
e) tabela de hashing.
Comentários:
Gabarito: E
Comentários:
Não, eles utilizam a chave para gerar resultados que, esses sim, são comparados.
Gabarito: E
Comentários:
Gabarito: E
ACERTEI ERREI
ESTRUTURA DE ARQUIVOS
16712855225
de dados utilizados por um programa pode ser organizada a partir de TADs que
definem classes de objetos com características distintas.
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.
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.
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.
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.
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:
d) fila.
e) vetor.
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.
a) Fila e Pilha.
b) Pilha e Fila.
c) Grafo e Árvore.
d) Árvore e Grafo.
e) Árvore Binária e Árvore Ternária.
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.
se p.topo = 0 então
nada {pilha vazia}
senão p.topo p.topo-1
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
a) fila.
b) árvore binária.
c) pilha.
d) matriz quadrada.
e) cubo.
(ESAF - 2010 - CVM - Analista de Sistemas - prova 2) Uma fila é um tipo de lista
linear em que:
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.
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.
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.
16712855225
a) 2.
b) 0, 1 ou 2.
c) divisível por 2.
d) maior ou igual a 2.
e) 0 ou 1.
16712855225
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.
(CESPE -
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)}
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)}
16712855225
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.
a)
b)
c)
d)
e)
14. (CESPE - 2012 – TJ/SE – Analista de Sistemas) Um grafo é formado por um par
16712855225
a) predecessor.
b) adjacente.
c) incidente.
d) ponderado.
e) orientado.
16712855225
a) array.
b) lista.
c) vetor.
d) árvore binária.
e) tabela de hashing.
Dados A busca que utiliza uma tabela hash realiza comparação das chaves para
encontrar a posição do elemento que está sendo buscado.
1 2 3 4 5 6 7 8 9 10
D E C E C C E
1 2 3 4 5 6 7 8 9 10
E D E C E C C
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
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
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
1 2 3 4 5 6 7 8 9 10
C C E E C E E C
1 2 3 4 5 6 7 8 9 10
E B
1 2 3 4 5 6 7 8 9 10
E E E 16712855225
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
1 2 3 4 5 6 7 8 9 10
C C E E E E
16712855225
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
16712855225
PADRÕES DE PROJETO
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.
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.
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.
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.
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.
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
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.
mosca (Flyweight) se aproximar (Proxy). E não tem frase para o último? Não, se não
é criacional ou estrutural, é comportamental.
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.
Pessoal, esse padrão de projeto deve ser utilizado quando o algoritmo para criação
16712855225
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.
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.
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
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.
PADRÕES ESTRUTURAIS
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.
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
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.
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).
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.
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.
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.
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.
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.
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.
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
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.
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
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.
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
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.
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.
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.
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.
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.
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.
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.
1
Frequência de aparições em prova! Os mais frequentes são: Singleton, Adapter, Façade e Abstract Factory.
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,
16712855225
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
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!
Gabarito: C
Comentários:
Definição de uma interface de nível mais alto que torne mais fácil a comunicação?
Opa, isso é Façade.
Gabarito: C
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
Gabarito: C
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
Comentários:
Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.
Gabarito: C
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
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
Comentários:
Gabarito: C
Comentários:
Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.
Gabarito: C
Comentários:
Gabarito: E
Comentários:
16712855225
Gabarito: E
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
Comentários:
Gabarito: E
Comentários:
Gabarito: C
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
Comentários:
Gabarito: E
Comentários:
Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.
Gabarito: E
Comentários:
Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.
Gabarito: E
Comentários:
16712855225
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
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
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
Gabarito: C
Comentários:
Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: C
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
Comentários:
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.
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.
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
Gabarito: E
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
Comentários:
Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.
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
Comentários:
Gabarito: C
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
Gabarito: E
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?
Gabarito: C
Comentários:
16712855225
Gabarito: C
Comentários:
Utilizam polimorfismo, herança, modularidade, composição, abstração para construir código reutilizável,
eficiente, de alta coesão e baixo acoplamento.
Gabarito: E
ACERTEI ERREI
16712855225
Comentários:
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.
Gabarito: E
Comentários:
Gabarito: E
Analise:
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.
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.
Gabarito: D
Comentários:
Singleton: garante que uma classe tenha apenas uma instância e provê um ponto de
acesso global a ela.
Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.
Gabarito: A
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.
(III) Armazenar estado interno de um objeto para retornar, se necessário? Ficou fácil:
Memento.
Gabarito: C
Comentários:
Gabarito: C
Comentários:
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:
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:
Bridge: desacopla uma interface de sua implementação, de forma que ambas possam
variar independentemente.
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
a) GoF Estruturais.
b) GRASP Comportamentais.
c) GRASP Estruturais.
d) GoF de Criação.
e) GoF Comportamentais.
Comentários:
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.
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.
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.
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.
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
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.
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.
Comentários:
Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.
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
Gabarito: D
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.
Comentários:
Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.
Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.
Bridge: desacopla uma interface de sua implementação, de forma que ambas possam
variar independentemente.
Gabarito: B
ACERTEI ERREI
16712855225
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.
a) I e III.
b) II e III.
c) III e IV.
d) I e II.
e) II e IV.
Comentários:
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!
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.
Gabarito: D
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:
Factory Method: define uma interface para criar um objeto, mas deixa as subclasses
decidirem qual classe instanciar.
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.
Gabarito: D
Comentários:
Gabarito: B
16712855225
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
(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
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
d) definir novas operações sem alterar as classes dos elementos sobre os quais
ele opera.
Comentários:
Singleton: garante que uma classe tenha apenas uma instância e provê um nto de
acesso global a ela.
Abstract Factory: fornece uma interface para criar famílias de objetos relacionados ou
dependentes sem especificar suas classes concretas.
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
Adapter: converte a interface de uma classe em outra interface que normalmente não
poderiam trabalhar juntas por serem incompatíveis.
Gabarito: E
Comentários:
Gabarito: E
as afirmativas a seguir.
Assinale:
Comentários:
Gabarito: E
Comentários:
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
PADRÕES JAVA EE
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.
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
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.
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.
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.
Web Service Broke Utilizado para acessar serviços através de XML e protocolos HTTP.
16712855225
a) service activator.
b) session facade.
c) Ajax.
d) intercepting filter.
e) front controller.
Comentários:
Gabarito: B
Comentários:
Gabarito: C
Comentários:
Perfeito, é exatamente isso! Ele é utilizado para encapsular e gerenciar todo acesso
a fontes de dados e suas persistências.
Gabarito: C
a) transfer object.
b) value list handler.
c) transfer object assembler.
d) JDBC.
e) data access object.
Comentários:
Gabarito: E
a) Controller e View.
b) View e Model.
c) Controller e Model.
d) Model e Controller.
e) View e Controller.
Comentários:
- 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.
Gabarito: C
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
Comentários:
16712855225
Gabarito: A
ACERTEI ERREI
16712855225
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
Expert:
Creator:
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
Controller:
Polymorphism:
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
Protected Variations:
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
Comentários:
Creator:
Gabarito: E
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.
Gabarito: E
Comentários:
Expert:
Gabarito: E
Comentários:
Protected Variations:
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
Comentários:
16712855225
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Polymorphism:
para decidir qual comportamento será realizado, mas utilizar os próprios tipos.
Galera, é o polimorfismo comum à orientação a objetos.
Gabarito: C
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
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
Comentários:
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:
Gabarito: E
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
Gabarito: E
ACERTEI ERREI
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.
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.
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.
codificação.
16712855225
programação.
Analise:
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.
(FCC - 2011 - TRT - 14ª Região (RO e AC) - Analista Judiciário - Tecnologia da
Informação) No contexto dos padrões de projeto:
16712855225
Correspondem respectivamente a:
a) Façade e Bridge.
b) Adapter e Façade.
c) Composite e Bridge.
d) Façade e Composite.
e) Bridge e Adapter.
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.
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
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.
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.
16712855225
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.
a) I e III.
b) II e III. 16712855225
c) III e IV.
d) I e II.
e) II e IV.
16712855225
a) somente II.
b) somente I e II.
c) somente I e III.
d) somente II e III.
e) I, II e III.
d) definir novas operações sem alterar as classes dos elementos sobre os quais
ele opera.
Assinale: 16712855225
16712855225
a) service activator.
16712855225
b) session facade.
c) Ajax.
d) intercepting filter.
e) front controller.
a) transfer object.
b) value list handler.
c) transfer object assembler.
d) JDBC.
e) data access object.
a) Controller e View.
b) View e Model.
c) Controller e Model. 16712855225
d) Model e Controller.
e) View e Controller.
a) I e III.
b) I e IV.
c) II e III.
d) II, III e IV.
e) IV.
16712855225
16712855225
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
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
1 2 3 4 5 6 7 8 9 10
D D B E B E E E A
1 2 3 4 5 6 7 8 9 10
B C C E C C A
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
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
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!
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.
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.
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.
16712855225
16712855225
CURIOSIDADE
A Sun Microsystems declarou recentemente que existem atualmente cerca de 5.5 bilhões de
dispositivos executando uma Java Virtual Machine (JVM).
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>
int main()
{
int valor1 = 5;
int valor2 = 10;
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.
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>
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;
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.
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.
JAVA: EMPACOTAMENTO
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.
import javax.swing.JOptionPane;
JAVA: RAÍZ
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
JAVA: SINTAXE
JAVA: IDENTIFICADORES
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.
//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
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
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!
16712855225
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.
byte Tipo de dados inteiros com sinal, armazenado em formato binário na notação
de complemento a dois e tamanho de 8 bits.
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.
class Para definir o início de um arquivo Java, todas as classes possuem pelo
menos essa palavra-chave.
const Essa palavra não tem uso específico em Java mas mesmo assim é uma
palavra-chave.
do Estrutura de repetição que garante que o bloco será executado pelo menos
uma vez durante a execução do programa.
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.
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.
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.
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
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.
static Marca um método ou variável para que se tenha apenas uma cópia da
memória desse membro.
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.
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.
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
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.
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).
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
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.
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)
Operadores de Atribuição: =, +=, -=, *=, /=, %=, ++, --. 16712855225
int Variavel_2 = 4;
int Variavel_3 = 8;
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
//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++;
boolean $Variavel;
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)
16712855225
JAVA: VETORES
//Declaração 1
tipo[] identificador1;
tipo identificador1[];
//Declaração 2
tipo[] identificador2 = new tipo[];
tipo identificador2[] = new tipo[];
//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
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("\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);
}
}
Conversão Implícita:
Variável a1 = 54.7
Conversão Explícita:
Variável a4 = 54
Variável a5 = 2
16712855225
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
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 );
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.");
}
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.
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]);
[expressão 1]
while ([condição]) {
[comando]
[expressão 2]
}
Resultado:
...
do {
System.out.println("Minha idade é " + idade);
idade = idade + 1;
} while (idade > 30)
Resultado:
Minha idade é 26
int idade;
Resultado:
Minha idade é 26
Minha idade é 27
Minha idade é 28
Minha idade é 29
16712855225
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:
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:
16712855225
JAVA: OBJETOS
Um objeto é uma instância de uma classe. Para criar um objeto, devemos utilizar a
seguinte sintaxe:
new construtor();
16712855225
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:
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
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.
//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 só é executável por uma thread por vez
synchronized soma (int a, int b) {//...//}
Modificadores de Acesso:
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
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:
16712855225
JAVA: HERANÇA
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
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?
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.
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!
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.
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.
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.
<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.
<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.
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.
class Classe1 {
//Atributo privado
private String Algo;
16712855225
JAVA: INTERFACE
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).
JAVA: 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.
Professor, o que você quer dizer com mesma assinatura e assinatura diferente? É a
mesma quantidade, tipo e ordem dos parâmetros. Em outras palavras:
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!
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?
class Calculo {
OBSERVAÇÃO
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.
16712855225
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;
JButton: permite que os usuários indiquem quais ações ele deseja que a
aplicação execute; 16712855225
Ele controla os componentes que estão dentro do componente ao qual ele está
associado. Os principais Layout Managers são:
16712855225
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.
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:
MouseListener: utilizado quando se deseja tratar eventos como cliques dos botões
do mouse (ex: duplo-clique, clique-arrasta, etc).
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
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
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:
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?
Planetas(int distanciaSol) {
this.distanciaSol = distanciaSol; }
}
JAVA: ANOTAÇÕES
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
@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;
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:
Classes Aninhadas
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
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
uma Classe B que com certeza será usada apenas dentro da Classe A, o melhor é
criar a Classe B como interna a Classe A.
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:
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!
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
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.
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).
16712855225
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.
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.
É ú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:
//Tratamento da exceção
} finally { //Não vem sozinho: try/finally ou try/catch/finally.
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
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:
16712855225
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.
16712855225
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.
}
}
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
JAVA: COLEÇÕES
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?
É 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
MÉTODO DESCRIÇÃO
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.
MÉTODO DESCRIÇÃ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.
MÉTODO DESCRIÇÃO
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!
16712855225
MÉTODO DESCRIÇÃ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.
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!
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!
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.
Classe Descrição
ByteArrayInputStream Valores são originários de um arranjo de bytes.
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.
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:
Classe Descrição
FileOutputStream Escreve em um arquivo ou em um descritor de arquivo.
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?
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.
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:
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#use-case
16712855225
Comentários:
Gabarito: C
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
Comentários:
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
Comentários:
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
Comentários:
Palavras Descrição
Testa se um objeto é uma instância de uma classe específica ou se é null.
Instanceof
Conforme vimos em aula, ele também pode ser utilizado para testar se um objeto
é instância de uma classe específica.
Gabarito: E
Comentários:
//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 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
Comentários:
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
Comentários:
Gabarito: E
Comentários:
Conforme vimos em aula, está perfeito! Para tal, utiliza-se o Java EE.
Gabarito: C
Comentários:
Gabarito: C
Comentários:
O que muda, então? É a forma como nós nos referimos a esse objeto!
Gabarito: C
Comentários:
Gabarito: E
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:
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:
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:
Conforme vimos em aula, a classe final não pode ter filhos e Método Final não pode
ser sobrescrita.
16712855225
Gabarito: C
Comentários:
Conforme vimos em aula, está perfeito! Qual o nome desse código? Bytecode!
Gabarito: C
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
Comentários:
<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.
Gabarito: C
de aplicações para todos os seus dispositivos, como estações gráficas, iPad, iPod,
entre outros.
Comentários:
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
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.
Gabarito: E
Comentários:
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
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
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
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:
Gabarito: E
Comentários:
16712855225
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
Comentários:
Gabarito: C
Comentários:
interface Map são: HashMap, TreeMap e LinkedHashMap. Cada implementação possui suas
características sendo apropriadas para contextos diferentes.
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
16712855225
Comentários:
Conforme vimos em aula, trata-se de uma interface com o usuário, logo interage
com o usuário.
Gabarito: E
Comentários:
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
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
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
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?
ACERTEI ERREI
Comentários:
(a) Conforme vimos em aula, ele contém um Garbage Collector para gerenciamento
de memória;
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);
(e) Conforme vimos em aula, é uma linguagem orientada a objetos e possui suporte
nativo a threads;
16712855225
Gabarito: B
e) JavaFX.
Comentários:
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:
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).
Gabarito: D
Comentários:
Gabarito: C
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.
Gabarito: C
Comentários:
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
Comentários:
<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
a) static.
b) abstract.
c) protected.
d) volatile.
e) transient.
16712855225
Comentários:
<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.
Gabarito: C
byte j = 30;
short k = 54;
int m = 40;
long n = 12L;
long resultado = 0L;
resultado += j;
resultado += k;
resultado /= n;
resultado -= m;
a) -7.
b) -32.
c) -33.
d) 60.
e) 84.
Comentários:
Gabarito: C
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:
Palavras Descrição
Representa um retorno vazio, i.e., nenhum retorno para esse método.
Void
Gabarito: C
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;
Gabarito: E
}
}
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.
do construtor da NewClassB.
Comentários:
(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
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
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
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
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.
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:
Comentários:
(a) string e real, não; (b) real e bit, não; (c) Perfeito! (d) real, não; (e) apenas float.
Gabarito: C
Comentários:
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:
Comentários:
compilação ocorre apenas uma vez e a interpretação a cada vez que o programa é
executado.
Gabarito: E
Comentários:
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
a) 6.0
b) 7
c) 8.0
d) 5.0
e) 12.5
Comentários:
Gabarito: C
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.
Gabarito: A
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
a) long. 16712855225
b) short.
c) float.
d) byte.
e) double.
Comentários:
Gabarito: A
Comentários:
Gabarito: D
int idade=12;
Analise:
Contém uma instrução correta que exibirá na tela a frase "Menor de idade":
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
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
III. Faz uso explícito de ponteiros e usa conceitos modernos, tais como,
orientação a objetos e suporte a multithreading.
a) I, II e III, somente.
b) I, II e IV, somente.
c) I, III e IV, somente.
Comentários:
Gabarito: B
a) -8388608 a 8388607.
b) -128 a 127.
c) -32768 a 32767.
d) -9223372036854775808 a 9223372036854775807.
e) -2147483648 a 2147483647.
Comentários:
Gabarito: E
a) o J2EE.
b) o JDK.
c) o JRE.
d) uma JSP.
e) uma API.
Comentários:
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
16712855225
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:
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
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á
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:
(c) Polimorfismo? Perfeito! Nós temos uma sobrescrita de métodos (que é um tipo
de Polimorfismo).
(e) Métodos Abstratos? Não, não há nenhum método abstrato nessa questão.
16712855225
Gabarito: C
b) não podem ser acessados diretamente pelo nome da classe a que pertencem,
mas sim por meio de um objeto da classe.
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
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.
Gabarito: C
a) JEE e JME.
b) JEE e JPE.
c) JDE e JME.
d) JDE e JPE.
e) JEEP e JME.
Comentários:
Gabarito: A
Informação Uma classe Java pode ser instanciada por um comando, cuja sintaxe
é:
Comentários:
Gabarito: B
Comentários:
//Tratamento da exceção
} finally { //Não vem sozinho: try/finally ou try/catch/finally.
Gabarito: E
ACERTEI ERREI
a) static
b) const
c) abstract
d) final
e) virtual
Comentários:
Gabarito: D
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
( ) J2ME (Java 2 Micro Edition) - tecnologia Java para dispositivos móveis com
limitações de memória ou processamento.
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:
Gabarito: B
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).
a) I, II e IV, somente;
b) I, III e IV, somente;
Comentários:
(a) Conforme vimos em aula, é tanto uma linguagem quanto uma plataforma;
Gabarito: E
Comentários:
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
Comentários:
16712855225
Gabarito: B
Comentários:
Gabarito: E
a) falso
b) true
c) maior_valor 16712855225
d) Mp10
e) xBACON
Comentários:
Gabarito: B
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:
Gabarito: C
Comentários:
Conforme vimos em aula, podemos ter vários blocos catch de um único try.
Gabarito: C
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.
Gabarito: C
Comentários:
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:
Gabarito: E
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.
Gabarito: B
16. (FGV – 2015 – PGE/RO – Analista de Sistemas) São tipos primitivos na linguagem
de programação Java:
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).
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:
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.
Gabarito: C
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
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:
Gabarito: B
valores:
a) 42 e 41.
b) 42 e 42.
c) 42 e 43.
d) 43 e 42.
e) 43 e 43.
Comentários:
Gabarito: D
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:
Gabarito: B
ACERTEI 16712855225
ERREI
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.
(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.
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.
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.
c) C++.
d) Java.
e) PHP.
a) instanceof.
b) extend.
c) new.
d) this.
e) type.
c) às classes, apenas.
d) aos atributos, apenas.
e) aos atributos e classes, apenas.
a) static.
b) abstract.
c) protected.
d) volatile.
e) transient.
byte j = 30;
short k = 54;
int m = 40;
long n = 12L;
long resultado = 0L;
resultado += j;
resultado += k;
resultado /= n;
resultado -= m;
a) -7. 16712855225
b) -32.
c) -33.
d) 60.
e) 84.
a) static.
b) public.
c) void.
d) main.
e) string args.
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
16712855225
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.
a) Byte.valueOf(cod);
b) (long) cod;
c) Byte.pasreByte(cod); 16712855225
d) (byte) cod;
e) (cast) cod;
17. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da
Informação São tipos primitivos da linguagem Java:
19. (FCC - 2009 - TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação
16712855225
21. (FCC - 2014 – TRF/3 – Analista de Sistemas Considere a classe escrita em Java:
16712855225
a) 6.0
b) 7
c) 8.0
d) 5.0
e) 12.5
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
a) override.
b) overload.
c) herança.
d) encapsulamento.
e) polimorfismo.
a) long.
b) short.
c) float.
d) byte.
e) double.
int idade=12;
Analise:
Contém uma instrução correta que exibirá na tela a frase "Menor de idade":
d) II, apenas.
e) I e III, apenas.
a) 15 e 6.
b) 1 e 5.
c) 0 e 1.
d) 6 e 9.
e) 9 e 7.
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.
a) -8388608 a 8388607.
b) -128 a 127.
c) -32768 a 32767.
d) -9223372036854775808 a 9223372036854775807.
e) -2147483648 a 2147483647.
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
16712855225
a) encapsulamento.
b) sobrecarga de métodos.
c) polimorfismo.
d) sobrescrita de construtores.
e) métodos abstratos.
b) não podem ser acessados diretamente pelo nome da classe a que pertencem,
mas sim por meio de um objeto da classe.
a) _Real e $real
b) um1 e dois2
c) 3tres e tres3 16712855225
d) Codigo e codigo
e) cod_valor e cod$valor
a) JEE e JME.
b) JEE e JPE.
c) JDE e JME.
d) JDE e JPE.
e) JEEP e JME.
16712855225
a) static
b) const
c) abstract
d) final
e) virtual
( ) J2ME (Java 2 Micro Edition) - tecnologia Java para dispositivos móveis com
limitações de memória ou processamento.
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
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).
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.
a) falso
b) true
c) maior_valor
d) Mp10
e) xBACON
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.
14. (ESAF – – CGU - Analista de Sistemas) A linguagem Java possui uma API
(Application Program Interface) que disponibiliza pacotes e classes com diversas
16712855225
a) java.util.
b) java.applet.
c) java.graphic.
d) java.image.
e) java.awt.
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:
17. (FGV – 2014 – TJ/GO – Analista de Sistemas) Se uma classe na linguagem Java é
declarada com o modificador abstract, então essa classe:
a) 42 e 41.
b) 42 e 42.
c) 42 e 43.
d) 43 e 42.
e) 43 e 43.
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
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
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
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
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
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?
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.
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.
Como ele oferece tudo isso, nós veremos por meio do estudo de um assunto muito
importante: Arquitetura Java EE – apresentada na imagem abaixo:
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.
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.
16712855225
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
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!
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).
16712855225
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.
Comentários:
Gabarito: E
Comentários:
16712855225
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
Comentários:
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
Gabarito: E
Comentários:
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
Comentários:
16712855225
Gabarito: E
Comentários:
Conforme vimos em aula, a Camada Web é composta por JSP, JSF e Servlets.
Gabarito: C
Comentários:
Gabarito: B
d) módulos web não devem ser empacotados, pois isso inviabiliza seu acesso
pela Internet.
Comentários:
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
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
Comentários:
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 é:
Comentários:
16712855225
Gabarito: E
Comentários:
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
Comentários:
Gabarito: C
Comentários:
(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;
Gabarito: A
ACERTEI ERREI
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.
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.
<html>
<head>
<title>
<%="Hello World"%>
</title>
</head>
<body>
<%out.println("Hello Again!");%>
</body>
</html>
//Definições e importações.
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.
4
.jspx refere-se ao Arquivo JSP que obedecer às regras de formação do XML.
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.
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.
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
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.
DECLARAÇÕES
16712855225
//Declarações JSP
EXPRESSÕES
//Expressões JSP
SCRIPLETS
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
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.
COMENTÁRIOS
//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:
7
JavaBeans são componentes reutilizáveis de software que podem ser manipulados visualmente com a ajuda
de uma ferramenta de desenvolvimento.
//Ações JSP
DIRETIVAS
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:
ATRIBUTO PROPÓSITO
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.
//Diretiva INCLUDE
//Diretiva TAGLIB
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.
${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.
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
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
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
Comentários:
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
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.
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
Comentários:
Gabarito: C
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.
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:
Gabarito: E
Comentários: 16712855225
Gabarito: E
Comentários:
Gabarito: C
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:
Gabarito: C
ACERTEI ERREI
16712855225
a) diretivas.
b) de scriptlet.
c) de declaração.
d) de expressão.
e) standard action.
Comentários:
Gabarito: A
16712855225
a) diretiva page.
b) diretiva include.
c) comentário.
d) taglib.
e) scriptlet.
Comentários:
Gabarito: E
Comentários:
ATRIBUTO PROPÓSITO
Conforme vimos em aula, ele especifica uma lista de pacotes ou classes importadas.
Gabarito: E
Comentários:
//Diretiva TAGLIB
Gabarito: A
a) diretivas.
b) expressões.
c) declarações.
d) scriptlets.
e) comentários.
Comentários:
Gabarito: D
a) configurar pacotes.
b) importar arquivos html.
c) importar pacotes.
d) configurar arquivos html.
e) importar figuras.
Comentários:
ATRIBUTO PROPÓSITO
Conforme vimos em aula, ele especifica uma lista de pacotes ou classes importadas.
Gabarito: C
a) Declaration tag.
b) Directive tag.
c) Scriplet tag.
d) Action tag.
e) Expression tag.
Comentários:
Gabarito: E
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.
Gabarito: E
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:
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? ;)
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.
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:
Gabarito: E
a) <% %>
b) <%! %>
c) <%= %>
d) <%-- --%>
e) /* */
Comentários:
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.
Comentários:
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
a) Session.
b) Request.
c) Exception.
d) Application.
e) pageContext.
Comentários:
16712855225
OBJETO DESCRIÇÃO
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.
Gabarito: C
a) o WSDL.
b) o DTD.
c) a JCP.
d) a XSL.
e) o JSP.
Comentários:
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
Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe
pode-se utilizar a tag:
Comentários:
Gabarito: D
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.. .
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:
//Diretiva INCLUDE
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
Comentários:
ATRIBUTO PROPÓSITO
Conforme vimos em aula, podemos usar a Diretiva page com o Atributo import e a
Diretiva taglib.
Gabarito: A
a) Extends.
b) Import.
c) isThreadSafe.
d) Session.
e) AutoFlush.
Comentários:
ATRIBUTO PROPÓSITO
Gabarito: C
16712855225
a) info.
b) extends.
c) session.
d) import.
e) autoFlush.
Comentários:
ATRIBUTO PROPÓSITO
Gabarito: B
ACERTEI ERREI
16712855225
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.
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:
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?
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?
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.
Gabarito: D
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.
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?
Gabarito: A
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) 0;
b) 1;
c) 2; 16712855225
d) 3;
e) 4.
Comentários:
ATRIBUTO PROPÓSITO
III. Não existe isso! JavaScript roda no browser do cliente, logo é completamente
possível ter código JavaScript em uma Página JSP.
Gabarito: B
a) Integer.
b) queryString.
c) getParameter.
d) String.
e) Request.
Comentários:
OBJETO DESCRIÇÃO
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.
16712855225
Gabarito: E
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.
Gabarito: B
a) <jsp:invoke>
b) <jsp:include>
c) <jsp:forward>
d) <jsp:plugin>
e) <jsp:call>
Comentários: 16712855225
Gabarito: C
a) Ação <jsp:plugin>.
b) Ação <jsp:include>.
c) Diretiva include.
d) Diretiva Page.
e) Diretiva taglib.
Comentários:
Gabarito: B
ACERTEI ERREI
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
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!
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
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
11
Seu nome completo é: javax.servlet.http.HttpServlet.
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!
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
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
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 ;)
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.
(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:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabarito: E
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
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
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
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.
Gabarito: C
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
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.
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
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
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
Gabarito: C
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
Gabarito: C
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
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.
Gabarit E
ACERTEI ERREI
16712855225
Comentários:
Gabarito: B
e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera
uma nova thread.
Comentários:
Gabarito: A
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
Gabarito: A
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.
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
(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.
(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
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.
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
(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
16712855225
Comentários:
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
a) import()
b) return()
c) catch()
d) getParameter()
e) nameComponent()
Comentários:
Gabarito: D
16712855225
Embora as servlets sejam muito boas no que fazem, tornou-se difícil responder
ao cliente com conteúdo no formato HTML.
PORQUE
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
a) GenericServlet.
b) HttpServlet.
c) HttpServletRequest.
d) HttpServletResponse.
e) HttpServletObject.
Comentários:
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:
é ú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 ;)
Gabarito: A
ACERTEI ERREI
16712855225
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
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
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.
Gabarito: C
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, servlets rodam no servidor, mas applets rodam no cliente.
Gabarito: E
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
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
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.
a) I 16712855225
b) II
c) III
d) I e III
e) II e III
Comentários:
Gabarito: B
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.
Gabarito: E
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!
Gabarito: C
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.
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
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
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
Servlet.
Comentário
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
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
a) ao ser executado por um contêiner de Servlet, será exibida uma tela em branco
no navegador.
16712855225
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.
Comentários:
Gabarito: C
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
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.
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.
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.
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!
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:
14
As implementações da especificação mais famosas são Oracle Mojarra e o Apache MyFaces.
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:
16712855225
O JSF fornece uma maneira fácil e amigável para criar Aplicações Web por meio de,
basicamente, três atividades:
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
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
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.
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
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.
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.
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
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.
dados; filtros de criptografia; filtros de tokenização; filtros XSLT; filtros que acionam
eventos de acesso a recursos, entre outros.
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.
Gabarito: C
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.
Gabarito: C
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
Comentários:
Conforme vimos em aula, ela serve para referenciar propriedades e Managed Beans.
Gabarito: E
Comentários:
Gabarito: C
Comentários:
“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
Comentários:
(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:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: C
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.
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:
Gabarito: C
Comentários:
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:
Gabarito: C
<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
Comentários:
Gabarito: C
Comentários:
Gabarito: E
ACERTEI ERREI
<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>
a) context.xml.
b) web-inf.xml.
c) web.xml.
d) faces-config.xml.
e) config-bean.xml.
Comentários:
Gabarito: D
a) webfaces.xml.
b) actionform.xml.
c) faces-config.xml.
d) webcontext.xml.
e) serverconfig.xml.
Comentários:
Gabarito: C
Comentários:
Gabarito: C
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.
(b) Conforme vimos em aula, de fato recebe requisições dos componentes da View,
no entanto o nome da servlet é FacesServlet.
conexão entre View e Controller. Vamos resumir essa diferença entre esses dois
arquivos?
(d) Conforme vimos em aula, a questão está perfeita! O Ajax não só é suportado,
esse suporte é nativo.
(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
Comentários:
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
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.
Gabarito: E
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.
Gabarito: B
16712855225
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
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
Gabarito: C
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.
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.
Comentários:
Gabarito: B
ACERTEI ERREI
16712855225
( ) Java Server Faces são usadas como uma fachada para Servlets e Java Server
Pages.
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:
(F) Conforme vimos em aula, Facelets vieram para substituir JSP e, não, JSF!
posso afirmar que ele visa substituir JSP! Na verdade, uma de suas funcionalidades
vem substituindo JSP, mas não o JSF como um todo.
Gabarito: A
ACERTEI ERREI
16712855225
d) módulos web não devem ser empacotados, pois isso inviabiliza seu acesso
pela Internet.
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 é:
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:
16712855225
(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 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.
a) diretivas.
b) de scriptlet.
c) de declaração.
d) de expressão.
e) standard action.
a) diretiva page.
b) diretiva include.
c) comentário.
d) taglib.
e) scriptlet.
a) diretivas.
b) expressões.
c) declarações.
d) scriptlets.
e) comentários.
a) configurar pacotes.
b) importar arquivos html.
c) importar pacotes.
d) configurar arquivos html.
e) importar figuras.
a) Declaration tag.
b) Directive tag. 16712855225
c) Scriplet tag.
d) Action tag.
e) Expression tag.
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/>
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.
a) Session.
b) Request.
c) Exception.
d) Application.
e) pageContext.
a) o WSDL.
b) o DTD.
c) a JCP.
d) a XSL.
e) o JSP.
package dados;
Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe
pode-se utilizar a tag:
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.. .
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"%>.
e <%@library
uri=“caminho/biblioteca”%>.
e) <%@import class= “pacote.Classe”%> e <%@taglib
urli=“caminho/biblioteca”%>.
a) Extends.
b) Import.
c) isThreadSafe.
d) Session.
e) AutoFlush.
a) info.
b) extends.
c) session.
d) import.
e) autoFlush.
16712855225
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.
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:
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.
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) 0;
b) 1;
c) 2;
d) 3;
e) 4.
a) Integer.
b) queryString.
c) getParameter.
d) String.
e) Request.
a) <jsp:invoke>
b) <jsp:include>
c) <jsp:forward>
d) <jsp:plugin>
e) <jsp:call>
a) Ação <jsp:plugin>.
b) Ação <jsp:include>.
c) Diretiva include.
d) Diretiva Page.
e) Diretiva taglib.
16712855225
}
public String getServletInfo() {
return "The BookStore servlet returns the main web page " +
"for Duke's Bookstore.";
}
}
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.
16712855225
e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera
uma nova thread.
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.
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.
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.
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:
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.
16712855225
a) import()
b) return()
c) catch()
d) getParameter()
e) nameComponent()
Embora as servlets sejam muito boas no que fazem, tornou-se difícil responder
ao cliente com conteúdo no formato HTML.
PORQUE
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
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.
a) I
b) II
c) III
d) I e III
e) II e III
a) get.
b) post.
16712855225
c) destroy.
d) prerender.
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.
Servlet.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
a) ao ser executado por um contêiner de Servlet, será exibida uma tela em branco
no 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.
a) cancel( )
b) delete( )
c) destroy( )
d) invalidate( )
e) release( )
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.
<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>
a) context.xml.
b) web-inf.xml.
c) web.xml.
d) faces-config.xml.
e) config-bean.xml.
a) webfaces.xml.
b) actionform.xml. 16712855225
c) faces-config.xml.
d) webcontext.xml.
e) serverconfig.xml.
(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:
a) ControllerServlet.
b) Facelet.
c) HttpServlet.
d) FacesConfig.
e) FacesServlet.
a) Restore View.
b) Apply Request Values.
c) Process Validation.
d) Update Model Values.
e) Invoke Application.
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
( ) Java Server Faces são usadas como uma fachada para Servlets e Java Server
Pages.
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
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
1 2 3 4 5 6 7 8 9 10
D A B E B C B
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
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
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
1 2 3 4 5 6 7 8 9 10
D C C D A E B D C C
11 12 13 14 15 16 17 18 19 20
D
1 2 3 4 5 6 7 8 9 10
A
16712855225
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
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.
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:
1
Possui até uma versão para .NET chama-se NHibernate.
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.
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
FAQ: JPA
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
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.
Java Persistence Criteria API (JPCA): define queries, em geral, dinâmicas para
entidades e seus estados persistentes;
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).
16712855225
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.
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
2
Ele especifica qual implementação será utilizada (Hibernate, Toplink, JDO, etc); conexão com banco, etc.
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?
16712855225
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.
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.
Gabarito: E
Comentários:
Gabarito: D
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:
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
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 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
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
Conforme vimos em aula, JPA pegou as melhores ideias dos frameworks líderes de
mercado e condensou em uma especificação.
Gabarito: C
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.
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
Gabarito: C
a) persistence context.
b) persistence unit.
c) entity manager factory.
d) entity transaction.
e) persistence provider.
Comentários:
Gabarito: B
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!
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
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.
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.
Gabarito: C
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
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.
Gabarito: C
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.
Gabarito: E
Comentários:
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();
}
}
deseja se conectar.
Comentários:
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
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
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:
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?
Gabarito: A
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
a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em
aplicações Java SE. 16712855225
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!
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;
(d) Conforme vimos em aula, pode-se utilizar JPQL e JPCA, com acesso feito por
SQL ou Java.
Gabarito: A
c) @Id define que o atributo que está mapeado com tal anotação corresponderá
à chave primária da tabela. 16712855225
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.
@ManyToOne Mapeamento muitos para um (N:1).
@OneToMany Mapeamento um para muitos (1:N).
@OneToOne Mapeamento um para um (1:1).
Gabarito: A
ACERTEI ERREI
16712855225
HIBERNATE
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.
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.
OBSERVAÇÕES
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
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.
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!
16712855225
HIBERNATE: ARQUITETURA
<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.
4
Classes Persistentes não precisam implementar interfaces ou herdar de uma classe-base especial!
OBSERVAÇÕES
16712855225
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.
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 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
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;
@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;
}
}
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.
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
Comentários:
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
Gabarito: E
Comentários:
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
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.
Comentários:
Conforme vimos em aula, está perfeito! Vocês já notaram que isso cai bastante, né?!
Gabarito: C
Comentários:
16712855225
Gabarito: C
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
Comentários: 16712855225
Gabarito: C
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.
Gabarito: C
Comentários:
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
<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
Gabarito: C
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
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Conforme vimos em aula, Criteria Query API é – sim – utilizada para consultas em
bancos de dados.
Gabarito: C
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
a) HiBD-QL.
b) OOQL.
c) ORM-QL.
d) HQL.
e) JEEQL.
Comentários:
Gabarito: D
16712855225
Comentários:
Gabarito: D
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
Comentários:
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.
(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
(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)!
(e) Conforme vimos em aula, pode-se usar annotations. Ademais, o sufixo seria
hbm.xml.
Gabarito: A
Comentários:
(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
a) negócio.
b) restrição.
c) apresentação.
d) consistência.
e) persistência.
Comentários:
Gabarito: E
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:
Gabarito: B
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.
Gabarito: A
a) mappings.
b) annotations.
c) descriptions.
d) patterns.
e) actions.
Comentários:
Gabarito: B
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:
Gabarito: E
ACERTEI ERREI
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.
Gabarito: A
ACERTEI 16712855225
ERREI
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
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.
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();
}
ResultSet rs = stm.executeQuery(SQL);
finally
{
try
{
16712855225
a) API.
b) ODBC.
c) SGDB.
d) JDBC.
e) OLE.
Comentários:
16712855225
Gabarito: B
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.
Gabarito: C
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.
Gabarito: C
a) java.lang.ClassNotFoundException.
b) java.io.FileNotFoundException.
c) java.lang.SecurityException.
d) java.io.IOException.
e) java.util.InputMismatchException.
Comentários:
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();
}
Gabarito: A
16712855225
Comentários:
Gabarito: D
b = a.createStatement( ); 16712855225
Comentários:
Gabarito: D
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.
Gabarito: E
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
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
Comentários:
Gabarito: E
ACERTEI ERREI
16712855225
CURIOSIDADE:
A Sun Microsystems declarou recentemente que existem atualmente cerca de 5.5 bilhões de
dispositivos executando uma Java Virtual Machine (JVM).
Comentários:
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:
rodá-lo em uma JVM! E quais outras linguagens? Temos também Eiffel, Pascal,
Python, C.
Gabarito: C
Comentários:
Gabarito: E
Comentários:
16712855225
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!
Gabarito: C
Comentários:
Gabarito: C
a) bytecode.
b) appletcode.
Comentários:
Gabarito: A
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.
Gabarito: C
ACERTEI ERREI
16712855225
(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.
a) JSF
b) SVN
c) JPA
d) spring
e) struts
a) persistence context.
b) persistence unit.
c) entity manager factory. 16712855225
d) entity transaction.
e) persistence provider.
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.
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.
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.
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();
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:
a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em
aplicações Java SE.
c) @Id define que o atributo que está mapeado com tal anotação corresponderá
à chave primária da tabela.
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.
<hibernate-mappingpackage=
"org.hibernate.tutorial.domain">
<class name="Evento" table="Eventos">
<id name="id" column="Evento_ID">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>
16712855225
a) HiBD-QL.
b) OOQL.
c) ORM-QL.
d) HQL.
e) JEEQL.
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.
a) negócio.
b) restrição.
c) apresentação.
d) consistência.
e) persistência.
a) transient.
b) detached.
c) attached.
d) persistent.
e) consistent.
a) mappings.
b) annotations.
c) descriptions.
d) patterns.
e) actions.
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
16712855225
a) API.
b) ODBC.
c) SGDB.
d) JDBC.
e) OLE.
a) import java.awt.*;
b) import java.util.*;
c) import java.sql.*;
d) import java.swing.*;
e) import java.jdbc.*;
16712855225
a) java.lang.ClassNotFoundException.
b) java.io.FileNotFoundException.
c) java.lang.SecurityException.
d) java.io.IOException.
e) java.util.InputMismatchException.
b = a.createStatement( );
a) SQLData
b) ResultSet
c) Statement
d) DriverManager
e) Connection
(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.
a) bytecode.
b) appletcode.
16712855225
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
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
1 2 3 4 5 6 7 8 9 10
D D A E E 16712855225
B A B E
1 2 3 4 5 6 7 8 9 10
A
JDBC
1 2 3 4 5 6 7 8 9 10
B C C A D D E E D E
16712855225
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
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).
SPRING FRAMEWORK
BENEFÍCIOS DESCRIÇÃO
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
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”.
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.
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,
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
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.
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.
16712855225
Comentários:
Gabarito: C
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.
Gabarito: C
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.
Gabarito: D
a) SpringMessaging Service(SMS).
b) JavaMessaging Service(JMS).
c) SpringChat Service(SCS).
d) JavaChat Service(SCS).
e) Chat andMessaging Service(CMS).
Comentários:
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.
Gabarito: B
a) Bean Injection.
b) Setter Injection.
c) Factory Injection.
d) Constructor Injection.
Comentários:
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
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:
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
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.
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
Comentários:
Gabarito: C
Comentários:
Perfeito! Ele é um sistema de tamplates que pode ser utilizado sem o Struts.
16712855225
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabarito: C
16712855225
associada a uma requisição HTTP. Nessa ordem, esses elementos são conhecidos,
respectivamente, por:
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabarito: C
ACERTEI ERREI
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:
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
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.
16712855225
Comentários: 16712855225
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).
Gabarito: A
Comentários:
Gabarito: E
16712855225
Comentários:
Gabarito: C
ACERTEI ERREI
16712855225
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.
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:
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.
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.
16712855225
4
E usr é contexto, bin é subcontexto de usr, etc;
Comentários:
Perfeito! Contextos de nomes JNDI são necessários junto ao Web Container e EJB
Container.
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: C
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
Comentários:
Gabarito: C
Comentários:
Gabarito: C
ACERTEI ERREI
16712855225
16712855225
Comentários:
Gabarito: C
(CESPE - 2010 – TRE/BA - Analista de Sistemas) JTA pode ser utilizado para o
gerenciamento de transações distribuídas.
Comentários:
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).
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
ACERTEI ERREI
16712855225
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.
XML Compreende funções out, parse, set, choose, forEach, if, transform,
de manipulação de otherwise, param, when.
XML.
16712855225
Comentários:
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.
Conforme vimos em aula, não existe as tags <switch> ou <while>. No entanto, a banca
considerou o item verdadeiro :-(
Gabarito: C
Comentários:
Gabarito: C
Comentários:
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.
Gabarito: E
Comentários:
16712855225
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.
Conforme vimos em aula, trata-se de Core, XML, Banco de Dados, i18n e Funções.
Gabarito: B
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
Comentários:
(a) Conforme vimos em aula, o suporte é nativo – é até uma área funcional;
(b) Conforme vimos em aula, JSTL é JavaServer Pages (JSP) Tag Library. Logo, nada
mais é que uma biblioteca de tags para uma Página JSP.
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
(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.
Gabarit A
ACERTEI ERREI
16712855225
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.
a) Spring Core
b) Spring ORM
c) Spring Context
d) Spring DAO
e) Spring AOP
a) SpringMessaging Service(SMS).
b) JavaMessaging Service(JMS).
c) SpringChat Service(SCS).
d) JavaChat Service(SCS).
e) Chat andMessaging Service(CMS).
a) Bean Injection.
b) Setter Injection.
c) Factory Injection.
d) Constructor Injection.
16712855225
2.
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.
a JNDI API.
(CESPE - 2010 – TRE/BA - Analista de Sistemas) JTA pode ser utilizado para o
gerenciamento de transações distribuídas.
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.
16712855225
1 2 3 4 5 6 7 8 9 10
C C D B D
1 2 3 4 5 6 7 8 9 10
C C C C C C C
1 2 3 4 5 6 7 8 9 10
A E C
1 2 3 4 5 6 7 8 9 10
C E E E C 16712855225
E C C
JSTL
1 2 3 4 5 6 7 8 9 10
C C E B A
16712855225
AULA 07
SUMÁRIO PÁGINA
Apresentação 01
- HTML 02
- CSS (Cascading Style Sheets) 63
Lista de Exercícios Comentados 101
Gabarito 127
16712855225
HTML
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.
texto fique melhor organizado dentro da página. Ademais, ela pode estruturar
textos, imagens, links, tabelas, listas, entre outros.
<primeira tag> <segunda tag> Texto qualquer... </segunda tag> </primeira tag>
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.
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
ELEMENTO DESCRIÇÃO
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.
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:
16712855225
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
16712855225
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>:
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
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:
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>
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:
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
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>
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.
16712855225
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
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:
16712855225
<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.
16712855225
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).
<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>
16712855225
<thead>
<tr>
<th colspan="2"> Tabela de Despesas </th>
</tr>
</thead>
Vejam na tabela abaixo (sem trocadilhos) os principais elementos que podem fazer
parte da estrutura de uma tabela:
ELEMENTO DESCRIÇÃO
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
VALOR DESCRIÇÃO
Há, ainda, vários novos atributos para o elemento de entrada de dados (<input .
Vejamos um pouco mais sobre eles:
ATRIBUTO DESCRIÇÃO
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>
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
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.
ELEMENTO DESCRIÇÃO
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 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.
ELEMENTO DESCRIÇÃO
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
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
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 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.
<figcaption>
Esse elemento define o que deve ser mostrado nos navegadores que não
<rp>
suportam anotações Ruby – entre parêntesis.
Esse elemento é utilizado para declarar fragmentos de HTML que podem ser
<template> clonados e inseridos em um documento por meio de um script.
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.
16712855225
Comentários:
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
Comentários: 16712855225
Gabarito: C
Comentários:
ELEMENTO DESCRIÇÃO
Gabarito: C
c) Introdução de diversas APIs, entre elas a API Canvas que permite criar gráficos,
16712855225
Comentários:
ELEMENTO DESCRIÇÃO
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!
16712855225
Gabarito: 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>:
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
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.
Gabarito: C
<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.
Gabarito: C
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;
(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:
Gabarito: C
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.
Gabarito: C
Comentários:
ATRIBUTO DESCRIÇÃO
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
Comentários:
ELEMENTO DESCRIÇÃO
Gabarito: C
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.
Comentários:
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
a) label.
b) name.
c) disabled.
d) selected.
e) value.
Comentários:
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>
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>:
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:
Gabarito: A
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:
Gabarito: E
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.
Gabarito: A
<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 é:
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.
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:
<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>
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:
Gabarito: B
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).
Gabarito: B
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:
Gabarito: D
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
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>:
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, é:
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.
Gabarito: B
<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:
Comentários:
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
Comentários:
VALOR DESCRIÇÃO
Gabarito: C
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.
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:
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.
Gabarito: A
b) substitui o elemento <br> que define uma quebra de linha no local onde o
elemento for inserido.
16712855225
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:
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.
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:
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
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.
Comentários:
ELEMENTO 16712855225
DESCRIÇÃO
Gabarito: C
a) <output>
b) <ol>
c) <keygen>
d) <ul>
e) <datalist>
Comentários:
16712855225
ELEMENTO DESCRIÇÃO
Gabarito: E
<!DOCTYPE HTML>
Comentários:
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
1. <caption>
2. <center>
3. <font>
4. <frame>
5. <img>
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.
Gabarito: C
a) <HEAD>
b) <HTML>
c) <TITLE>
d) <BEGIN>
e) <BODY>
Comentários:
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
a) HTML;
b) C;
c) HTTP;
d) Pascal;
e) SQL.
Comentários:
Gabarito: A
a) SIMD.
b) HTTPS.
c) IMPEL.
d) HTML.
e) MIMD.
Comentários:
Gabarito: D
a) 2DShapes
b) canvas
c) header
d) p
e) xgraphbody
Comentários:
ELEMENTO DESCRIÇÃO
Gabarito: B
a) strong
b) footer
c) th
d) thead
e) label
Comentários:
<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>
Gabarito: A
a) <canvas>
b) <ul>
c) <meta>
d) <style>
e) <script>
Comentários:
ELEMENTO DESCRIÇÃO
Gabarito: A
Comentários:
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>
Gabarito: B
a) HTML.
b) CSS.
c) JavaScript.
d) Flash.
e) jQuery.
Comentários:
Gabarito: A
a) <BODY>
b) </HEAD>
c) <LINK>
d) <META>
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>
Gabarito: A
ACERTEI ERREI
16712855225
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).
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?
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.
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.
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 {
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
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:
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:
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
http://css3clickchart.com
3
Se quiserem brincar com isso, o Web Developer também permite.
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:
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>
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>
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.
<!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;
}
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?
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.
/* 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 */.
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:
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;
}
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.
.cor-tres {
color: #00f;
}
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!
a[target = "_blank"] {
background-color: yellow;
}
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
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á...
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.
Propriedade Descrição
Propriedade Descrição
Propriedade Descrição
16712855225
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.
Comentários:
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.
/* Observem que CSS permite notação da cor por Nome (Ex: green) ou valor RGB (Ex: #FF0) */
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
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.
Gabarito: C
Comentários:
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
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
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
Comentários:
Gabarito: X
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.
Gabarito: C
Comentários:
Conforme vimos em aula, está perfeito! Pode-se combinar HTML com diversas
tecnologias, sendo CSS uma das mais comuns para apresentação.
Gabarito: C
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:
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.
Gabarito: C
Comentários: 16712855225
Gabarito: C
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.
Gabarito: E
mentários:
seletor {
propriedade: valor;
}
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:
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:
Gabarito: C
ACERTEI ERREI
16712855225
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:
Gabarito: C
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.
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
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.
Gabarito: E
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).
Gabarito: E
a) interno.
b) externo.
c) incorporado.
d) atributo.
e) referenciado.
Comentá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
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:
Gabarito: A
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;
}
......
...
<?xml version="1.0" encoding="ISO8859-1" ?>
...
Minas Milton Nascimento Brazil Columbia 15.90 1985
...
Comentários:
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
Arquivo Clientes.xml:
...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:
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:
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:
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
Gabarito: C
a) font-weight.
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).
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
Gabarito: C
III. Usada para formatar conteúdos estruturados, é linguagem própria para estilos
que define o layout de documentos.
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
assim, professor? Vamos exemplificar isso! Imaginem que o dono de uma empresa
liga para o web designer e diz:
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:
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
<style type="text/css">
body {
color: purple;
background-color: #d8da3d }
</style>
a) 2, 1, 3.
b) 2, 2, 2.
c) 2, 1, 1.
d) 1, 2, 2.
e) 3, 2, 1.
mentários:
Gabarito: D
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:
Gabarito: D
ACERTEI ERREI
Comentários:
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.
a) preta e azul.
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
a) JavaScript.
b) DOM.
c) XHTML.
d) CSS.
e) CMS.
Comentários:
Gabarito: D
ACERTEI ERREI
16712855225
c) Introdução de diversas APIs, entre elas a API Canvas que permite criar gráficos,
16712855225
<label>Cor:
<select name=cor required>
<option value="">Escolha um
<option>Vermelho
<option>Verde
<option>Azul
</select>
</label>
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.
16712855225
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>
a) echo comentário
b) // comentário
c) /* comentário */
d) <%-- comentário --%>
e) <!-- comentário -->
a) de marcação.
b) de script.
c) procedural.
d) orientada a eventos.
e) orientada a objetos.
<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 é:
(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
<html>
<body>
comando x
a) de interrogação.
b) ordenadas.
c) não-ordenadas.
d) de definição.
e) de frames.
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, é:
<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:
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
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 >.
b) substitui o elemento <br> que define uma quebra de linha no local onde o
elemento for inserido.
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:
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>
18. (FCC - 2012 – TRT/2ª – Analista de Sistemas No que concerne aos elementos da
HTML5 e suas funções, assinale a opção correta.
b) O elemento datalist representa uma parte da página que pode ser distribuída
e reutilizada em serviços de RSS.
a) <output> 16712855225
b) <ol>
c) <keygen>
d) <ul>
e) <datalist>
<!DOCTYPE HTML>
16712855225
1. <caption>
2. <center>
3. <font>
4. <frame>
5. <img>
a) <HEAD> 16712855225
b) <HTML>
c) <TITLE>
d) <BEGIN>
e) <BODY>
a) HTML;
b) C;
c) HTTP;
d) Pascal;
e) SQL.
a) SIMD.
b) HTTPS.
c) IMPEL.
d) HTML.
e) MIMD.
a) 2DShapes
b) canvas
c) header
d) p
e) xgraphbody
a) strong
b) footer 16712855225
c) th
d) thead
e) label
a) <canvas>
b) <ul>
c) <meta>
d) <style>
e) <script>
a) HTML.
b) CSS.
c) JavaScript.
d) Flash.
e) jQuery.
a) <BODY>
b) </HEAD>
c) <LINK>
d) <META>
e) <HTML>
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.
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.
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.
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
a) font-family.
b) font-variant.
c) font-style.
d) font-face.
e) font-size.
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.
a) interno.
b) externo.
c) incorporado.
d) atributo.
e) referenciado.
Fragmento de Código I:
......
CATALOG
{
background-color: #ffffff;
width: 100%;
}
CD
{
display: block;
margin-bottom: 30pt;
margin-left: 0;
}
TITLE
{
color: #FF0000;
...
<?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>
...
...
Minas Milton Nascimento Brazil Columbia 15.90 1985
...
Arquivo Clientes.xml:
...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:
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) 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.
III. Usada para formatar conteúdos estruturados, é linguagem própria para estilos
que define o layout de documentos.
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:
<style type="text/css">
body {
color: purple;
background-color: #d8da3d }
</style>
a) 2, 1, 3.
b) 2, 2, 2.
c) 2, 1, 1.
d) 1, 2, 2.
e) 3, 2, 1.
a) inline.
b) offline.
c) externo.
d) incorporado.
e) personalizado.
16712855225
(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.
a) preta e azul.
b) branca e azul. 16712855225
c) preta e verde.
d) branca e verde.
e) preta e vermelha.
a) JavaScript.
b) DOM.
c) XHTML.
d) CSS.
e) CMS.
16712855225
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
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
1 2 3 4 5 6 7 8 9 10
C B A D B A A B A A
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
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
1 2 3 4 5 6 7 8 9 10
B C D
16712855225
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
16712855225
JAVASCRIPT
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.
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.
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).
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: Escopo
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.
2
A
16712855225
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
Javascript: Comentários
Javascript: Declarações
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...
16712855225
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:
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).
Mas essa não é a única maneira de se criar um vetor, podemos também utilizar o
operador new:
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.
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
No exemplo acima, quando o usuário clicar no botão, será informada a data e hora
atual. O resultado é mostrado abaixo:
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.
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.
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
Comentários:
Gabarito: C
Comentários:
Gabarito: C
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
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Portanto, ela avalia e executa códigos dentro de uma string e apresenta o resultado.
Gabarito: C
Comentários:
Gabarito: C
a) de método. 16712855225
b) de script.
c) global.
d) local.
e) de função.
Comentários:
Gabarito: C
Comentários:
Gabarito: E
ACERTEI ERREI
16712855225
Comentários:
Gabarito: B
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.
Gabarito: C
a) string.
b) eval.
c) number.
d) parseInt.
e) parseFloat.
Comentários:
Gabarito: B
16712855225
<html>
<body>
<h1>Página Principal</h1>
<form>
comando y
</form>
</body>
</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
Gabarito: D
Comentários:
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
Comentários:
Gabarito: B
Comentários:
Gabarito: E
a) Case.
b) Left.
c) Open.
d) Forward
e) Hostname.
Comentários:
Métodos Descrição
16712855225
Gabarito: D
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
a) parseInt.
b) parseFloat.
c) toString.
d) Eval.
e) toResult.
Comentários:
Gabarito: D
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:
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.
Gabarito: E
Comentários:
O Evento onChange ocorre quando o valor de um elemento foi modificado, i.e., seu
conteúdo.
Gabarito: E
Comentários:
Gabarito: B
a) toUpper.
b) toUpperCase.
c) toLower.
d) toLowerCase.
e) toMascCase.
Comentários:
Métodos Descrição
toUpperCase() Converte uma string em letras maiúsculas.
toLowerCase() Converte uma string em letras minúsculas.
Gabarito: B
a) I, II e III.
b) I e III.
c) II e III.
d) II.
e) III.
Comentários:
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
a) open.
b) forward.
c) hostname.
d) case.
e) left.
Comentários:
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
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
Gabarito: A
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
a) window.open( )
b) page.open( )
c) document.open( )
d) page.init( )
e) window.init( )
Comentários:
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
Comentários:
16712855225
Gabarito: A
a) Math.exp()
b) Math.round()
c) Math.sqrt.round()
d) Math.sqrt()
e) Math.circle()
Comentários:
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
Comentários:
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
Gabarito: C
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
Uma forma correta de criar um objeto Array chamado nomes que armazena o
nome de três pessoas, pode ser encontrada em:
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
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
a) MooTools
b) jQuery
c) Prototype
d) Log4J
e) Dojo
Comentários:
Gabarito: D
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();
Comentários:
Gabarito: C
ACERTEI ERREI
16712855225
Comentários:
Gabarito: A
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
a) Javascript e Java;
b) PHP e Javascript;
c) Python e Javascript;
d) PHP e Java;
e) C++ e PHP.
Comentários:
Gabarito: A
ACERTEI ERREI
16712855225
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.
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
$(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:
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;
}
$(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
});
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
$("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.
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).
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
Comentários:
SINTAXE DESCRIÇÃO
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
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?
Gabarito: B
<!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>
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();});
Comentários:
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
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
Comentários:
Gabarito: A
ACERTEI ERREI
16712855225
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
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.
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.
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.
formato XML! É possível, ainda, capturar dados em outros formatos, tais como:
HTML e JSON!
Status:
o 200: “Ok”.
o 404: Página não-encontrada.
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.
Comentários:
Gabarito: C
Comentários:
Não, começou em 1999 (com IE5)! Cobrar data em prova? Questão ridícula!
Gabarito: E
16712855225
Comentários:
Gabarito: E
Comentários: 16712855225
Gabarito: E
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
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
navegador.
Comentários:
Gabarito: C
Comentários:
Gabarito: C
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:
16712855225
Gabarito: C
Comentários:
Perfeito! AJAX é um conjunto de tecnologias, tais como: XML, JSON, XSTL, HTML,
XHTML, DOM, JavaScript, CSS e XMLHttpRequest.
Gabarito: C
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
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
Comentários:
Gabarito: E
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
Comentários:
Gabarito: C
Comentários:
16712855225
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:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
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
Gabarito: C
Comentário
Gabarito: C
Comentários:
Na verdade, é assíncrona!
Gabarito: E
Comentários:
Gabarito: E
16712855225
a) ActionScript.
b) WAP.
c) XSLT.
d) Telnet.
e) VoIP.
Comentários:
Trata-se do XSLT!
Gabarito: C
Comentários:
Gabarito: C
ACERTEI ERREI
16712855225
III. O objeto XMLHttpRequest e/ou o objeto iFrame são utilizados para troca de
dados assíncrona com o servidor.
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
a) responseText e responseXML.
b) responseText e responseHTML.
c) responseText.
d) responseXML.
e) responseHTML.
Comentários:
barito: A
a) JavaScript e XMLHttpRequest.
b) XML e XSLT.
c) HTML e XHTML.
d) JavaScript e CSS.
e) DOM e CSS.
Comentários:
Gabarito: B
a) XML e XSLT.
Comentários:
Gabarito: A
a) XMLRequest.
b) XMLAjaxActiveXObject.
c) HttpServletResponse.
d) HttpServletRequest.
e) XMLHttpRequest.
Comentários:
XMLHttpRequest.
Gabarito: E
a) oncompletedrequest.
b) onserverreturn.
c) onendstatus.
d) onreadystatechange.
e) onreadystate.
Comentários:
Trata-se do onreadystatechange.
Gabarito: D
Comentários:
Gabarito: B
a) XML.
b) JavaScript.
c) XHTML.
d) AJAX.
e) CSS.
Comentários:
ACERTEI ERREI
16712855225
a) Ant
b) XML
c) WiMAX
d) VoIP
e) Jakarta
Comentários:
Gabarito: B
a) CSS
b) SMTP 16712855225
c) AJAX
d) FTP
e) UTF-8
Comentários:
Gabarito: C
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
<html>
<head>
script language JavaScript
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:
Gabarito: C
Comentários:
Gabarito: D
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
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
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
a) de método.
b) de script.
c) global.
d) local.
e) de função.
16712855225
a) MouseOver.
b) MouseDown.
c) MouseUp.
d) MouseMove.
e) MouseOut.
a) string.
b) eval.
c) number. 16712855225
d) parseInt.
e) parseFloat.
<html>
<body>
<h1>Página Principal</h1>
<form>
comando y
</form>
</body>
</html>
métodos de interface com o usuário que fazem parte do objeto window são
apenas os denominados:
a) Case.
b) Left.
c) Open.
d) Forward
e) Hostname.
ocorre quando o:
a) parseInt.
b) parseFloat.
c) toString.
d) Eval.
e) toResult.
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:
perder o foco e:
a) toUpper.
b) toUpperCase.
c) toLower.
d) toLowerCase.
e) toMascCase.
a) I, II e III.
b) I e III. 16712855225
c) II e III.
d) II.
e) III.
a) open.
b) forward.
c) hostname.
d) case.
e) left.
a) window.open( )
b) page.open( )
c) document.open( ) 16712855225
d) page.init( )
e) window.init( )
a) Math.exp()
b) Math.round()
c) Math.sqrt.round()
d) Math.sqrt()
e) Math.circle()
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
Uma forma correta de criar um objeto Array chamado nomes que armazena o
nome de três pessoas, pode ser encontrada em:
a) MooTools 16712855225
b) jQuery
c) Prototype
d) Log4J
e) Dojo
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
a) Javascript e Java;
b) PHP e Javascript;
c) Python e Javascript; 16712855225
d) PHP e Java;
e) C++ e PHP.
b) .show(false)
b) .hide()
c) .mask()
d) .visible(false)
e) .display(false) 16712855225
<!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>
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();});
localização.
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.
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.
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.
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.
a) ActionScript.
b) WAP.
c) XSLT.
d) Telnet.
e) VoIP.
16712855225
III. O objeto XMLHttpRequest e/ou o objeto iFrame são utilizados para troca de
dados assíncrona com o servidor.
a) I, apenas.
b) II, apenas.
c) III, apenas.
d) I e III, apenas.
e) I, II e III.
(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.
a) JavaScript e XMLHttpRequest.
b) XML e XSLT.
c) HTML e XHTML.
d) JavaScript e CSS.
e) DOM e CSS.
a) XML e XSLT.
b) HTML, XHTML e CSS.
c) XMLHttpRequest.
d) JavaScript.
e) DOM.
a) XMLRequest.
b) XMLAjaxActiveXObject.
c) HttpServletResponse.
d) HttpServletRequest.
e) XMLHttpRequest.
16712855225
a) oncompletedrequest.
b) onserverreturn.
c) onendstatus.
d) onreadystatechange.
e) onreadystate.
a) XML.
b) JavaScript.
c) XHTML.
d) AJAX.
e) CSS.
16712855225
a) Ant
b) XML
c) WiMAX
d) VoIP
e) Jakarta
a) CSS
b) SMTP
c) AJAX
d) FTP
e) UTF-8
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.
<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>
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.
a) DOM e CSS
b) ASP e XML 16712855225
c) Java e XML
d) Java e CSS
e) JavaScript e ASP
a) I, apenas
b) II, apenas
c) I e II, apenas
d) II e III, apenas
e) I, II e III
a) protocolo
b) banco de dados
c) coleção de tecnologias
d) linguagem de programação
e) linguagem de marcação
16712855225
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
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
1 2 3 4 5 6 7 8 9 10
A A A 16712855225
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
1 2 3 4 5 6 7 8 9 10
E A B A E D B D
1 2 3 4 5 6 7 8 9 10
B C E C D A C C
16712855225
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
DHTML
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
Comentários:
DHTML é uma coleção de tecnologias: HTML, JavaScript e Folhas de Estilo (Ex: CSS).
Gabarito: D
Comentários:
16712855225
Gabarito: E
Comentários:
Gabarito: C
ACERTEI ERREI
16712855225
Galera, vocês já sabem o que é HTML e XML! Agora, então, eu vos pergunto: o que
seria o XHTML?
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.
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!
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
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.
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:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabarito: E
16712855225
c) os nomes dos elementos podem ser escritos com letras caixa-alta ou caixa-
baixa.
Comentários:
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!
Gabarito: D
16712855225
Comentários:
Gabarito: D
ACERTEI ERREI
16712855225
XML
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!
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é?!
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.
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!
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:
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”).
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?
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.
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.
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:
16712855225
16712855225
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!
Todos os atributos devem possuir valores. Além disso, esses valores devem vir entre
aspas simples ou duplas.
16712855225
Caracteres especiais
16712855225
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.
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!
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
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
16712855225
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Perfeito, é isso mesmo! Ele pode conter elementos vazios (Ex: <tag></tag>).
Gabarito: C
Comentários:
Gabarito: E
Comentários:
16712855225
Gabarito: C
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
Comentários:
Gabarito: E
Comentários:
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
Gabarito: E
ACERTEI ERREI
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
a) Os elementos XML não podem ter mais que um atributo e o valor desse
atributo pode estar vazio.
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.
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
Comentários:
Gabarito: B
a) !DOCTYPE
b) !ELEMENT
c) #PCDATA
d) CDATA
e) IDREF
Comentários:
Gabarito: A
Comentários:
Gabarito: E
a) Elementos.
b) Instâncias.
c) Entidades.
d) Notações.
e) Listas de atributos.
Comentários:
Gabarito: B
a) o ASP.
b) a GML.
c) o DTD.
d) a SHTML.
e) a PHP.
Comentários:
16712855225
Gabarito: C
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
Comentários:
Gabarito: E
Comentários:
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) 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.
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: (...)
Gabarito: A
ACERTEI ERREI
a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.
Comentários:
I.
16712855225
II.
16712855225
Todos os atributos devem possuir valores. Além disso, esses valores devem vir entre
aspas simples ou duplas.
Gabarito: E
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
XSLT
<catalogo>
<cd>
<titulo> Sgt. Peppers </titulo>
<artista> The Beatles </artista>
</cd>
<cd>
<titulo> Ride the Lightning </titulo>
16712855225
<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>
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)?
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!
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<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.
<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
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:
16712855225
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!
Gabarito: C
a) DTD
b) XSLT
c) XQuery
d) XLink
e) XSL-FO
Comentários:
Gabarito: B
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
Comentários:
16712855225
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
16712855225
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
Gabarito: A
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
16712855225
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
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
Assinale:
Comentários:
(I) Sim, claro que podem; (II) Sim, eles devem ser bem formados; (III) Não, qualquer
documento baseado em texto.
Gabarito: D
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)?
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.
Comentários:
Gabarito: A
ACERTEI ERREI
16712855225
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:
Rapaziada, é senso comum atualmente que XML Schemas irão substituir os DTDs
na grande maioria das aplicações web. Por que, professor? Vejamos:
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.
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.
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.
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
?xml version="1.0"?>
<schema>
...
...
</schema>
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.
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.
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? ;)
16712855225
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
Comentários:
(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;
(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
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
Gabarito: B
PORQUE
Comentários:
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
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
Comentários:
Gabarito: C
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:
Gabarito: E
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:
Gabarito: C
Comentários:
Gabarito: E
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.
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:
(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.
Gabarito: A
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:
Conforme visto em aula, ele define elementos e atributos que podem aparecer em
um Documento XML.
Gabarito: C
Comentários:
Gabarito: C
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.
XML.
Gabarito: C
Comentários:
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
Comentários:
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
Comentários:
Gabarito: E
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:
?xml version="1.0"?>
<schema>
...
...
</schema>
Conforme visto em aula, deve-se iniciar com <schema> e concluir com </schema>.
Gabarito: E
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.
Gabarito: E
Comentários:
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
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? ;)
Gabarito: B
I. XSLT
II. DTD
III. XML Schema
Assinale:
Comentários:
XSLT serve para definir regras de validação? Não! DTD e XML Schema (XSD), sim!
Gabarito: D
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
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? ;)
Gabarito: B
ACERTEI ERREI
16712855225
16712855225
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.
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”.
c) os nomes dos elementos podem ser escritos com letras caixa-alta ou caixa-
baixa.
16712855225
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
e) está na versão 5.0 já que a XML 4.0 estava obsoleta e, gradativamente, sendo
substituída pela WML.
a) Os elementos XML não podem ter mais que um atributo e o valor desse
16712855225
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.
a) !DOCTYPE
b) !ELEMENT
c) #PCDATA
d) CDATA
e) IDREF
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.
a) Elementos.
b) Instâncias.
c) Entidades.
d) Notações.
e) Listas de atributos.
a) o ASP.
b) a GML.
c) o DTD.
d) a SHTML.
e) a PHP.
b) instruções de processamento.
c) referências a entidades.
d) elementos.
e) comentários.
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) DOM.
b) JSON.
c) XSLT.
d) XPath.
e) DTD.
16712855225
a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.
a) DTD
b) XSLT
c) XQuery
d) XLink
e) XSL-FO
16712855225
16712855225
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.
Assinale:
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.
a) XQuery
b) XML Schema 16712855225
PORQUE
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.
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).
a) Simples e complexo.
b) Global e local.
c) Restrição e extensão.
d) Abstrato e concreto.
e) Instância e esquema.
a) complexType. 16712855225
b) notation.
c) extension.
d) field.
e) import.
I. XSLT
II. DTD
Assinale:
a) QName
b) anyType
c) char
d) string
e) token
16712855225
1 2 3 4 5 6 7 8 9 10
D E C
1 2 3 4 5 6 7 8 9 10
C C E D D
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
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
1 2 3 4 5 6 7 8 9 10
E D
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
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
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
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
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).
SISTEMAS MÓVEIS
16712855225
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!
DESENVOLVIMENTO NATIVO
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.
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:
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
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
DESENVOLVIMENTO CROSS-PLATFORM
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.
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.
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:
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).
16712855225
Comentários:
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
Comentários:
Conforme vimos em aula, a questão está perfeita! Deve haver uma preocupação
com as características de hardware do dispositivo.
Gabarito: C
ACERTEI ERREI
16712855225
ANDROID
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.
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.
16712855225
VERSÃO SLOGAN
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
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.
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?
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
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.
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:
Gabarito: E
Comentários:
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
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
Comentários:
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
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
Comentários:
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.
Gabarito: E
a) Unix.
b) Linux.
c) Android.
d) Mac OS X.
e) Windows.
Comentários:
Gabarito: C
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
Gabarito: E
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:
Gabarito: D
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.
Gabarito: E
Comentários:
Gabarito: C
a) V, F, F, V.
b) F, V, F, V.
c) F, V, V, F.
d) V, V, F, F.
Comentários:
Gabarito: D
Comentários:
Gabarito: C
ACERTEI ERREI
iOS
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.
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.
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
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.
Comentários:
16712855225
Gabarito: C
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.
Gabarito: C
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.
Gabarito: A
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.
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: C
ACERTEI ERREI
SEGURANÇA NO DESENVOLVIMENTO
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:
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).
16712855225
É 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
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.
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.
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.
1
Entidades de software que agem como usuário, como agentes proxies e webservices.
POSITIVA
FALHAR COM SEGURANÇA EXECUTAR COM MENOS PRIVILÉGIOS
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.
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!
16712855225
REVISÃO DE CÓDIGO
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;
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;
16712855225
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 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.
16712855225
(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
Comentários:
“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
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
Conforme vimos em aula, é no máximo 400 linhas de código por vez e, não, 1000!
Gabarito: D
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
Comentários:
16712855225
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
Comentários:
Gabarito: C
ACERTEI ERREI
16712855225
COMPILADORES
PRÉ-PROCESSADOR (PREPROCESSOR)
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.
COMPILADOR (COMPILER)
Ex: Eu vou passar nesse concurso! Os tokens obtidos foram: “Eu”; “vou”; “passar”;
“nesse”; “concurso”; “!”.
Ex: string nome = “Diego’; ora, se eu declarar um valor com aspas-duplas, preciso
fechá-lo com aspas duplas e, não, simples.
Ex: int x = “Diego”; ora, eu não posso declarar uma variável do tipo inteiro e
atribuir um valor textual.
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.
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.
16712855225
relocável, que pode ser passado diretamente para um ligador e/ou carregador, i.e.,
já entregam um código-objeto!
CARREGADOR (LOADER)
para execução.
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.
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.
disco e na memória.
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.
INTERPRETADORES
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
Comentários:
Voltemos à teoria:
16712855225
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Voltemos à teoria:
16712855225
Gabarito: C
Comentários:
Gabarito: C
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
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
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).
Comentários:
Gabarito: E
Comentários:
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:
Gabarito: C
Comentários:
Como não? Claro que interferem! Entradas e Saídas de dados geralmente são
armazenadas em uma variável.
Gabarito: E
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
Comentários:
Gabarito: E
Comentários:
Assembly é uma linguagem de montagem e, não, de máquina. Além disso, ela não
é compilada, mas montada.
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Não, eles não são usados exclusivamente por linguagens de programação de alto
nível.
Gabarito: E
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
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
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:
Gabarito: A
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: C
16712855225
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
Comentários:
Gabarito: C
Comentários:
Gabari : C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Claro que não! Elas precisam ser traduzidas, porque computadores só entendem 0
e 1 (0V e 5V).
Gabarito: E
16712855225
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Perfeito, essa é uma questão para decorar! Muito bem escrita e boa para sedimentar
alguns conceitos!
Gabarito: C
Comentários:
Não! O Linker (Ligador) não efetua tradução alguma! Quem faz isso é o Compilador!
Gabarito: E
Comentários:
Gabarito: E
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
Comentário
Gabarito: E
Comentários:
Gabarito: E
ACERTEI ERREI
16712855225
a) debugger.
b) compilador.
c) montador.
d) fortran.
e) otimizador.
Comentários:
16712855225
barito: B
Comentários:
Gabarito: B
Comentários:
Gabarito: B
Comentários:
ACERTEI ERREI
16712855225
16712855225
a) Unix.
b) Linux.
c) Android.
d) Mac OS X.
e) Windows.
a) Cupcake
b) Frozen Yogurt
c) Gingerbread. 16712855225
d) Honeycomb.
e) Ice Cream.
a) V, F, F, V.
b) F, V, F, V.
c) F, V, V, F.
d) V, V, F, F.
a) I, II e III.
b) I e II, apenas.
c) I e III, apenas. 16712855225
d) II e III, apenas.
16712855225
(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.
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.
16712855225
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).
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.
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.
programas de usuário.
16712855225
a) debugger.
b) compilador.
c) montador.
d) fortran.
e) otimizador.
16712855225
1 2 3 4 5 6 7 8 9 10
C C
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
1 2 3 4 5 6 7 8 9 10
C C A E C C
SEGURANÇA NO DESENVOLVIMENTO
1 2 3 4 5 6 7 8 9 10
E C D E C C
1 2 3 4 5 6 7 8 9 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
1 2 3 4 5 6 7 8 9 10
B B B D
16712855225
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
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).
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.
CENTRALIZADO DISTRIBUÍDO
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
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)
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?
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!
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
Comentários:
CENTRALIZADO DISTRIBUÍDO
Gabarito: B
Comentários:
CENTRALIZADO DISTRIBUÍDO
Gabarito: E
ACERTEI ERREI
16712855225
SUBVERSION (SVN)
O Subversion (SVN) é um Sistema de Controle de Versão! E ele serve para quê? Ele
16712855225
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.
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).
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!
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).
É 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.
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
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.
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).
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
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
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.
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.
COMANDO DESCRIÇÃO
16712855225
16712855225
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
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.
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.
Comentários:
COMANDO DESCRIÇÃO
Gabarito: C
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
Comentários:
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
a) FileSync e Subclipse
b) ProjectSet e Subclipse
c) ProjectSet e FileSync
d) Subversive e Subclipse
e) Subversive e FileSync
Comentários:
Gabarito: D
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
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
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.
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!
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).
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.
16712855225
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: A
Comentários:
Gabarito: B
ACERTEI ERREI
16712855225
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 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 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.
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.
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.
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:
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.
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.
16712855225
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:
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
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.
Gabarito: D
Comentários:
COMANDO DESCRIÇÃO
Gabarito: C
Comentários:
COMANDO DESCRIÇÃO
Conforme vimos em aula, é necessário que ele adicione o arquivo para passar a
monitorá-lo.
Gabarito: A
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
Podem ser usados como parte do processo de inspeção ou como uma atividade
16712855225
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).
Código morto.
Vulnerabilidade na segurança.
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.
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.
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á
16712855225
Comentários:
Gabarito: C
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
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
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
SONARQUBE
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?
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
Banco de Dados:
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:
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
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
PRÁTICAS ÁGEIS
16712855225
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)
16712855225
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
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.
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
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.
AS PRÁTICAS...
COMO FAZER...
16712855225
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.
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.
16712855225
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).
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.
16712855225
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabarito: C
ACERTEI ERREI
REFATORAÇÃO
Comentários:
Gabarito: C
Comentários:
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
Comentários:
Gabarito: C
Comentários:
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
Comentários:
Gabarito: E
Comentários:
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
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Não, têm propostas similares! Ambas buscam melhorar a estrutura do código sem
alterar seu comportamento externo.
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
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
Comentários:
Gabarito: C
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:
Gabarito: X
ACERTEI ERREI
16712855225
16712855225
(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.
a) FileSync e Subclipse
b) ProjectSet e Subclipse
c) ProjectSet e FileSync
d) Subversive e Subclipse
e) Subversive e FileSync
16712855225
a) apply.
b) get.
c) push.
d) fetch.
e) update.
16712855225
a) Gerenciamento de testes.
b) Aquisição de dados.
c) Análise estática.
d) Análise dinâmica. 16712855225
e) Avaliações transfuncionais.
16712855225
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.
1 2 3 4 5 6 7 8 9 10
B E
1 2 3 4 5 6 7 8 9 10
C C E E D C
1 2 3 4 5 6 7 8 9 10
E E A B
1 2 3 4 5 6 7 8 9 10
D C A C 16712855225
1 2 3 4 5 6 7 8 9 10
C E E C
SONARQUBE
1 2 3 4 5 6 7 8 9 10
E
1 2 3 4 5 6 7 8 9 10
E C C C
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
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.
namespace MinhaAplicacao
class Program
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
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.
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:
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
Esta é uma boa classe para representar todos os animais, eles todos fazem essas coisas.
Porém nem todos fazem tudo igual, não é mesmo?
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.
12542341605
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>
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.
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.
lista Add i
return lista
for int i i i
yield return i
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
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,
for int i i i
yield break
for int i i i
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
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
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.
12542341605
Agora que você já foi apresentado a tela do Visual Studio, vamos falar um pouco mais de
12542341605
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.
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
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.
Resposta: Letra e)
12542341605
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
Resposta: Letra b)
namespace ConsoleApplication
class Program
Comentários:
Resposta: Letra b)
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
Resposta: Letra b)
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
Resposta: Letra a)
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
Resposta: Letra A)
Comentários:
Resposta: Letra E)
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)
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)
Comentários:
Simples não é? Você já sabe que a sintaxe de declaração do C# é TipoObjeto
12542341605
Resposta: Letra a)
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.
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?
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.
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
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)
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)
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”.
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)
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
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
dependency
dependentAssembly
assemblyIdentity type win
dependentAssembly
dependency
assembly
Resposta: Letra A)
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)
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)
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
class Exemplo
Exemplo
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)
Resposta: Letra a)
Comentários:
Vamos comentar os erros de cada alternativa:
A) É uma linguagem fortemente tipada.
B) Não suporta herança múltipla.
12542341605
Resposta: Letra e)
12542341605
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.
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)
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)
Resposta: Letra c)
int num
while num
Resposta: Errado
Comentários:
Exatamente, este operador equivale a if (x == null) return 1;
Resposta: Certo
12542341605
Comentários:
Esta é uma ótima questão para relembrarmos o funcionamento dos arrays e do
operador condicional ternário.
12542341605
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)
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.
12542341605
Resposta: Letra e)
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)
Comentários:
A antiga plataforma de colaboração era o Visual SourceSafe. Já o Team Explorer
12542341605
Resposta: Letra d)
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)
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
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
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.
Resposta: Letra a)
12542341605
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());
}
}
}
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.
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)
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).
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.
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
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.
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).
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.
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".
Authorize
HttpPost
public ActionResult Checkout Pedido pedido
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
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
Propriedade
Método
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.
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.
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.
Veja um exemplo abaixo, onde definimos a propriedade Number em uma classe e depois a
acessamos em um Módulo.
Class Example
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:
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.
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.
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)
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).
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)
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.
Comentários:
Resposta: Letra a)
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.
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.
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:
Resposta: Letra b)
Comentários:
Resposta: Letra d)
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
Resposta: Letra e)
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
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)
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.
Comentários:
Resposta: Letra d)
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:
Resposta: Letra e)
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)
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; }
}
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();
Comentários:
Resposta: Letra d)
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.
Comentários:
O C# possui classes abstratas, polimorfismo, namespaces, interfaces e herança
simples.
Resposta: Letra e)
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
Resposta: Letra b)
12542341605
Comentários:
A propriedade Timeout do objeto Session é definida em minutos, conforme vimos
na aula.
Resposta: Letra b)
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)
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.
Resposta: Letra d)
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
Comentários:
Essa é tranquila, Sqr é a função de raiz quadrada (square root).
Resposta: Letra d)
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.
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)
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
Resposta: Letra a)
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, _
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.
cadastrada.
Resposta: Letra e)
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)
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.
If p
Return p
Else
Return
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
Resposta: Letra d)
Comentários:
Uma propriedade pode ser criada em módulos, classes e structures.
Resposta: Letra c)
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.
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”.
Resposta: Letra a)
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
namespace ConsoleApplication
class Program
D) MovendoAcelerandoPasseando.
E) AcelerandoPasseando.
12542341605
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.
B) partial
C) extern
D) continue
E) abstract
12542341605
12542341605
12542341605
class Teste
int num
while num
12542341605
12542341605
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
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());
}
}
}
E) x * x
D) booleano.
E) inteiro.
12542341605
violado;
D) funciona com base em cookies;
E) está implementado em uma View cshtml.
12542341605
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.
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; }
}
X x = new X();
Y y = new Y();
int v1 = x.Foo();
int v2 = x.Bar();
int v3 = y.Foo();
int v4 = y.Bar();
12542341605
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
12542341605
B) MSDXML
C) DOMDocument
D) DOMXMLdr
E) XDocumentLoader
12542341605
B) |
C) &&
D) &
E) ++
11. (FGV ‐ 2015 ‐ TJ‐BA ‐ ANALISTA JUDICIÁRIO) Na linguagem Visual Basic .NET, a
construção
12542341605
12542341605
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
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
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
DELPHI
Ferramentas Descrição
Form Designer Uma janela em branco para desenhar a interface gráfica da aplicação.
Code Editor Utilizado para escrever e editar a lógica interna do programa ou aplicação.
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
$R *.dfm} //diretiva para o compilador linkar todos os Resources do tipo dfm
{
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
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
Folha de .css Contém instruções para o navegador sobre como estilizar a página
estilo
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
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.
Comentários:
Resposta: Letra e)
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
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)
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
Resposta: C
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
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.
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
Comentários:
Vimos na aula alguns desses componentes, como o TDataSource, TDataSet e etc.
Resposta: Letra b)
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.
Resposta: E
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)
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:
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).
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)
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,
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:
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.
<!DOCTYPE html>
<html>
<head>
<title> Minha primeira página PHP </title>
</head>
<body>
form m
< ethod="post">
<label> Nome: </label>
<?php
$_POST['nome'];
$nome =
</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.
$_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.
$_SESSION Utilizado para guardar variáveis e valores que devem ser recuperados
durante a sessão.
arrays
<!DOCTYPE html>
<html>
<body>
<?php
$carros = array("Volvo", "BMW", "Toyota");
echo " Eu gosto de " . $carros[0] . ", " . $carros[1] . " e " . $carros[2] . ".";
?>
</body>
</html>
Esse é o tipo mais simples de array, indexado por números, iniciando no índice 0. Mas,
no PHP, temos três tipos de arrays:
<?php
$idade = array("Pedro"=>"35", "Beto"=>"37", "Carlos"=
>"43");
echo " Pedro têm " . $idade['Pedro'] . " 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>";
}
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
<?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.
<?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.'
?>
<?php
$idade = array("Paulo"=>"40", "Pedro"=>"62", "Ana"=>"43", "Marcos"=>"18");
arsort($idade);
foreach($idade as $x => $x_valor) {
echo $x . " = " . $x_valor . " ";
}
?>
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.
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)
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)
Comentários:
Questão tranquila, diferentemente do javascript, os scripts PHP são
interpretados no servidor.
Resposta: Letra b)
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.
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)
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)
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)
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)
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
// Send
mail('caffeinated@example.com', 'My Subject', $message);
Resposta: Letra b)
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.
?>
Comentários:
A função checkdate valida uma data do calendário Gregoriano. Sua assinatura é
a seguinte: checkdate(month,day,year);
Resposta: Letra b)
Comentários:
O comando return encerra a execução de uma função retornando o argumento
como valor.
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)
Comentários:
Resposta: Letra e)
Comentários:
O and sempre tem precedência sobre o or, e os operadores bitwise tem
precedência sobre os demais.
Resposta: Letra d)
Comentários:
Como vimos na aula, a variável superglobal $_COOKIE[“ck”] recupera cookies
armazenados no cliente.
Resposta: Letra e)
<?php
function f($arg)
{
$arg01 = 343 + 20/2 + 911;
$arg02 = 38 - (5 * 11);
$argRetorno = $arg01 - $arg02;
}
$arg01 = 343;
$arg02 = 38;
f($arg01);
echo $arg01;
?>
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)
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.
Resposta: Letra b)
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.
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)
<?php
$idade = array("Paulo"=>"40", "Pedro"=>"62", "Ana"=>"43", "Marcos"=>"18");
arsort($idade);
foreach($idade as $x => $x_valor) {
echo $x . " = " . $x_valor . " ";
}
?>
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);
<?php
function f($arg)
{
$arg01 = 343 + 20/2 + 911;
$arg02 = 38 - (5 * 11);
$argRetorno = $arg01 - $arg02;
}
$arg01 = 343;
$arg02 = 38;
f($arg01);
echo $arg01;
?>
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);
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
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.
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;
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,
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