Escolar Documentos
Profissional Documentos
Cultura Documentos
Programação Estruturada
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
PROGRAMAÇÃO ESTRUTURADA
Bibliografia
O livro abaixo, escrito por brasileiros, muito utilizado em cursos acadêmicos, versa das
estruturas básicas e do uso de três linguagens: algoritmos, linguagem mais próxima do nosso
dia a dia; Java; C e C++; e Pascal.
Computação
Desde o início da existência do homem ele tem procurado criar máquinas que o auxiliem
em seus trabalhos, diminuindo esforços e economizando tempo.
No início, as máquinas eram produzidas para atividades físicas, iniciando-se, posterior-
mente, máquinas com atividades intelectual, tais como o desenvolvimento de calculadoras
mais remotas até computadores.
ANOTAÇÕES
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O computador é capaz de auxiliar em qualquer coisa que lhe seja solicitada, é consciente,
trabalha e possui muita energia, mas não tem iniciativa, nenhuma independência, não é cria-
tivo nem inteligente, e por isso precisa receber instruções nos mínimos detalhes (algoritmos).
Quanto ao “não é criativo nem inteligente”, é preciso tomar cuidado com a evolução das
máquinas e sistemas. Atualmente, com o machine learning as máquinas possuem uma capa-
cidade latente de aprendizado e simulação (aproximação) de inteligência.
5m
Para o computador realizar uma tarefa é preciso que haja uma linguagem que o oriente
a executar alguma atividade.
Processamento de Dados
Algoritmos
O computador é composto por duas partes:
• Hardware: Partes físicas;
• Software: Programas.
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ser escritos em linguagens de alto nível. Diante dessa linguagem de alto nível, o computador
traduz em uma linguagem em que o usuário melhor possa compreender, algo chamado de
compilação.
As etapas para o desenvolvimento de um programa são:
1. Análise: estuda o enunciado do problema para definir os dados de entrada, o proces-
samento e os dados de saída. Ou seja, antes do processo de programação, serão realizadas
análises do problema, para que assim se possa checar os dados de entrada e saída.
10m
2. Algoritmo: utiliza ferramentas do tipo narrativa, fluxograma ou português estruturado
para descrever o problema com suas soluções.
3. Codificação: o algoritmo é transformado em códigos de linguagem de programação
escolhida para se trabalhar. Exemplo: Java, C, Python. Os algoritmos podem ser traduzi-
dos para qualquer uma dessas linguagens, cada qual com suas particularidades e objetivos
específicos.
Para o ser humano, a leitura desse algoritmo é de fácil compreensão. Contudo, para o
computador, esse algoritmo está bastante abstrato, sendo de difícil compreensão.
Programação Estruturada
Programação estruturada é um paradigma de programação que visa melhorar a clareza,
qualidade e tempo de desenvolvimento de um programa de computador, fazendo uso exten-
sivo das estruturas de controle de seleção (SE / ENTÃO / SENÃO / CASO) e repetição (PARA
/ REPITA / ENQUANTO), estruturas de blocos e sub-rotinas.
ANOTAÇÕES
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A programação estruturada surge devido à crise de software (anos 50). Ou seja, perce-
beu-se que, quando se escrevia em código muito próximo ao que a máquina compreendia
ou sem tanta orientação, o código era de difícil manutenção. Neste interim, a programação
orientada surgir como uma série de orientação para desenvolver códigos de fácil manuten-
ção e com poucos problemas.
15m
O princípio básico de programação estruturada é que um programa é composto por
blocos elementares de código que se interligam através de três mecanismos básicos, que
são sequência, seleção e iteração. Cada uma destas construções tem um ponto de início
(o topo do bloco) e um ponto de término (o fim do bloco) de execução.
Exemplo: “Se chover, torna-se preciso levar o guarda-chuva. Se não chover, não se pre-
cisa levar o guarda-chuva”. Note que, diante das premissas, há orientações com base um
condições lógicas.
GO TO
Em 1968, Edsger W. Dijkstra, através do artigo "A Case against the GO TO Statement"
critica o uso excessivo do comando de desvio incondicional GOTO nos programas desenvol-
vidos na época.
ANOTAÇÕES
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Variáveis
• Um programa, recebe dados que precisam ser armazenados no computador para que
possam ser utilizados no processamento;
• Este armazenamento é feito na memória;
• Quando uma operação aritmética recebe dois operandos, cada operando é armaze-
nado em um endereço de memória diferente, para ser utilizado no cálculo;
• Como cada endereço de memória pode armazenar dados várias vezes, ou seja, seu
conteúdo pode variar, chamamos estas posições de variáveis.
Identificadores
Representam os nomes das variáveis, dos programas, constantes, rotinas, entre outros.
Exemplo: f(x) é o mesmo que função, na matemática.
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Tipos de Dados
Os tipos de dados determinam quantos de memória uma determinada variável ocupará e
o tipo de conteúdo que será armazenado. Os mais comuns são:
25m
Os tipos de dados variam muito de linguagem para linguagem, visto que algumas supor-
tam números complexos, inteiros, flutuantes, os tipos numéricos, os tipos booleanos e carac-
teres. De acordo com o tipo de dado diferente, um tanto mais de espaço será utilizado.
Estrutura Sequencial
Estrutura básica para algoritmos em pseudocódigo (ou portugol):
ALGORITMO
DECLARE
Bloco de comandos
FIM_ALGORITMO
Declaração de Variáveis
Variáveis são declaradas após a palavra DECLARE, e os tipos mais utilizados são NUMÉ-
RICO LITERAL ou LÓGICO:
DECLARE
X – NUMÉRICO
Y, Z LITERAL
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Atribuição
30m
Utilizado para atribuir um valor ou operação à uma variável
Representado pelo símbolo "←":
X–←4
X–←X+2
Y ← "aula"
Em geral, é possível realizar operações com a próxima variável. Mas o resultado da ava-
liação será atribuído ao lado esquerdo da expressão: X + 2
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
PROGRAMAÇÃO ESTRUTURADA II
O comando de entrada é utilizado para receber dados informados pelo usuário. É repre-
sentado pela palavra LEIA:
LEIA X
O comando de saída é utilizado para mostrar dados para o usuário na tela do monitor.
Representado pela palavra ESCREVA:
ESCREVA Y
O “LEIA” será visto como o código de entrada e o “ESCREVA” será visto como o código
de saída de dados.
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O comando só será executado se a condição for verdadeira. Uma condição é uma com-
5m
paração que possui dois valores possíveis: verdadeiro ou falso.
SE condição
ENTÃO INÍCIO
comando1
comando2
comando3
FIM
Se a condição for verdadeira, será executado o comando1, caso contrário, será execu-
tado o comando2.
SE condição
ENTÃO INÍCIO
comando1
comando2
SENÃO INÍCIO
comando3
comando4
FIM
ANOTAÇÕES
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Exemplo
ALGORITMO
DECLARE N1, N2, M NUMÉRICO
ESCREVA "Digite as duas notas"
LEIA N1, N2
M ← (N1 + N2)/2
ESCREVA "Média = ", M
SE (M >= 7)
ENTÃO ESCREVA "Aprovado"
SENÃO ESCREVA "Reprovado"
FIM_ALGORITMO
O comando “Digite as duas notas” buscará calcular a média aritmética. Após o resultado
da média aritmética, nota-se uma condicional, resultando no “Aprovado”, se verdadeiro, ou
10m “Reprovado”, se falso.
SE condição1
ENTÃO comando1
SENÃO INÍCIO
SE condição 2
ENTÃO comando2
SENÃO comando3
FIM
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Acima, a estrutura de decisão do SENÃO INÍCIO está aninhada com a primeira estrutura
de decisão, ocorrendo apenas no caso do SENÃO.
Estruturas de decisão podem ser aninhadas com o objetivo que sejam verificadas várias
alternativas possíveis.
Qualquer outro tipo de bloco pode ser aninhado. E quanto mais blocos, um tanto mais de
aninhamento haverá, provocando uma maior complexidade.
SE IDADE > 10
ENTÃO ESCREVA "IDADE ACIMA DE 10 ANOS"
SENÃO INÍCIO
SE IDADE < 10
ENTÃO ESCREVA "IDADE MENOR DE 10 ANOS"
SENÃO ESCREVA "TEM EXATAMENTE 10 ANOS"
FIM
Havendo muitas estruturas de decisões distintas e aninhadas, nota-se uma grande difi-
culdade quanto ao código. Em vista disso, existe uma outra estrutura, a chamada “Estrutura
de seleção múltipla ESCOLHA-CASO”.
ESCOLHA variável-de-verificação
CASO valor1 FAÇA
comando1
comando2
CASO valor2 FAÇA
comando3
comando4
...
FIM
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
No exemplo acima, caso o valor “CASO valor1 FAÇA” seja executado, o resultado será
15m “comando1” e “comando2”, e assim sucessivamente.
É possível inserir acima quantos blocos forem precisos, alocando-os um abaixo do outro.
Sobre essa informação, observe o exemplo abaixo:
ALGORITMO
DECLARE NUMERO1, NUMERO2, RESULTADO NUMÉRICO
OPERACAO : CARACTERE
ESCREVA "DIGITE O PRIMEIRO NÚMERO: "
LEIA NUMERO1
ESCREVA "DIGITE A OPERAÇÃO: "
LEIA OPERACAO
ESCREVA "DIGITE O SEGUNDO NÚMERO: "
LEIA NUMERO2
SE OPERACAO = "+" ENTAO RESULTADO ← NUMERO1 + NUMERO2
SENAO INICIO
SE OPERACAO = "-" ENTAO RESULTADO ← NUMERO1 - NUMERO2
SENAO INICIO
SE OPERACAO = "*" ENTAO RESULTADO ← NUMERO1 * NUMERO2
SENAO INICIO
SE OPERACAO = "/" ENTAO RESULTADO ← NUMERO1 / NUMERO2
FIM
FIM
FIM
ESCREVA "RESULTADO: ", RESULTADO
FIM_ALGORITMO
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ALGORITMO
DECLARE NUMERO1, NUMERO2, RESULTADO NUMÉRICO
OPERACAO : CARACTERE
ESCREVA "DIGITE O PRIMEIRO NÚMERO: "
LEIA NUMERO1
ESCREVA "DIGITE A OPERAÇÃO: "
LEIA OPERACAO
ESCREVA "DIGITE O SEGUNDO NÚMERO: "
LEIA NUMERO2
ESCOLHA OPERACAO
CASO "+" FAÇA
RESULTADO ← NUMERO1 + NUMERO2
CASO "-" FAÇA
RESULTADO ← NUMERO1 - NUMERO2
CASO "*" FAÇA
RESULTADO ← NUMERO1 * NUMERO2
CASO "/" FAÇA
RESULTADO ← NUMERO1 / NUMERO2
FIM
ESCREVA "RESULTADO: ", RESULTADO
FIM_ALGORITMO
ESCOLHA operacao
CASO "+" FAÇA
resultado ← numero1 + numero2
CASO "-" FAÇA
ANOTAÇÕES
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (CESPE/EBC/ANALISTA/ADMINISTRAÇÃO DE SISTEMAS/2011) Em programação
estruturada, por meio do mecanismo de seleção, é possível testar determinada condi-
ção e estabelecer ações a serem realizadas.
COMENTÁRIO
Mecanismo de seleção é o mesmo que o “SE”.
Estruturas de Repetição
As estruturas de repetição são utilizadas nos casos onde determinados trechos dos algo-
ritmos precisarão ser executados mais de uma vez e, para que não seja necessário reescre-
ver trechos idênticos que aumentariam consideravelmente o tamanho do programa, utiliza-se
as estruturas de repetição.
No caso da seleção, havia um código em que se buscava a sua execução ou não a partir
de determinada condição por meio de uma seleção booleana. Já no caso de repetição, os
blocos de códigos se repetem até que uma condição seja atingida.
ANOTAÇÕES
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O comando1 será executado utilizando a variável I como controle, cujo conteúdo vai
variar do valor inicial até o valor final, de 1 em 1, incrementando automaticamente.
A estrutura PARA é utilizada quando se sabe previamente quantas vezes se busca repetir
o código.
Ela pode também ser utilizada com blocos, podendo ainda ter um número arbitrário
de comandos:
ALGORITMO
DECLARE J NUMÉRICO
PARA J ← 1 ATE 10 FAÇA
INÍCIO
ESCREVA J
FIM
FIM_ALGORITMO
ANOTAÇÕES
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Acima, o ESCREVA J será repetido 10 vezes. Neste caso, o valor de J será atualizado até
25m chegar no valor final determinado.
ALGORITMO "FATORIALCOMPARA"
DECLARE NUMERO, FATORIAL, CONTADOR NUMÉRICO
ESCREVA "DIGITE O NÚMERO PARA CALCULAR O FATORIAL: "
LEIA NUMERO
FATORIAL ← 1
PARA CONTADOR DE 1 ATE NUMERO FACA
INICIO
FATORIAL ← FATORIAL * CONTADOR
FIM
ESCREVA "O FATORIAL DE ", NUMERO, " É : ", FATORIAL
FIM_ALGORITMO
Acima, sabia-se previamente o número de vezes em que o passo seria repetido para
fazer o cálculo do fatorial.
9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ALGORITMO
DECLARE J NUMÉRICO
J←1
ENQUANTO J <= 10 FAÇA
INICIO
ESCREVA J
J←J+1
FIM
FIM_ALGORITMO
ALGORITMO "FATORIALCOMENQUANTO"
30m
DECLARE NUMERO, FATORIAL, CONTADOR NUMÉRICO
ESCREVA "DIGITE O NÚMERO PARA CALCULAR O FATORIAL: "
LEIA NUMERO
FATORIAL ← 1
CONTADOR ← 1
ENQUANTO CONTADOR <= NUMERO FACA
INICIO
FATORIAL ← FATORIAL * CONTADOR
CONTADOR ← CONTADOR + 1
FIM
ESCREVA "O FATORIAL DE ", NUMERO, " É : ", FATORIAL
FIM_ALGORITMO
Obs.: o encremento é muito importante para que a condição “ENQUANTO CONTADOR <=
NUMERO FACA” seja alterada, evitando um looping infinito.
ANOTAÇÕES
10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
REPITA
comando1
comando2
ATÉ condição
ALGORITMO
DECLARE J NUMÉRICO
J←1
REPITA
ESCREVA J
J←J+1
ATÉ J > 10
FIM_ALGORITMO
ALGORITMO "SOMAATEVALORIGUALA0"
DECLARE VALORDIGITADO, SOMA NUMÉRICO
SOMA ← 0
REPITA
ESCREVA "DIGITE UM VALOR PARA A SOMA: "
LEIA VALORDIGITADO
SOMA ← SOMA + VALORDIGITADO
ESCREVAL "TOTAL: ", SOMA
ATE VALORDIGITADO = 0
FIM_ALGORITMO
ANOTAÇÕES
11 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GABARITO
1. C
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
12 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Vetor
Um vetor é uma variável composta, homogênea e unidimensional.
É considerada composta porque possui vários valores dentro dela. Ao declarar valores de
X e Y como variáveis, em vetores é possível guardar diversos valores.
É dita homogênea porque todos os valores devem ser do mesmo tipo. Assim, em vetores
de números, somente poderá haver números – a depender da linguagem de programação
(ex.: Java – vetores homogêneos. Já no Java Script, há vetores heterogêneos).
É unidimensional porque somente há uma dimensão (um comprimento) – ex.: fila de valo-
res. Cada valor terá um índice, que é a sua posição em uma fila de variáveis.
É formada por uma sequência de variáveis, todas do mesmo tipo de dados, com o mesmo
identificador (mesmo nome) e alocadas sequencialmente na memória.
Uma vez que as variáveis que compõem o vetor têm o mesmo nome, o que distingue
cada uma delas é um índice, que referencia sua localização dentro da estrutura. Ex.: em uma
fila de pessoas, para interagir com a terceira pessoa da fila, basta contar quantas pessoas
há para se chegar à terceira.
Vetor: Declaração
DECLARE nome[tamanho] tipo
nome: nome da variável do tipo vetor.
tamanho: é a quantidade de variáveis que vão compor o vetor.
tipo: é o tipo básico de dados que poderá ser armazenado na sequência de variáveis que
formam o vetor.
ANOTAÇÕES
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Vetor: Exemplos
5m
DECLARE X[5] NUMÉRICO
X[1] ← 45
X[4] ← 0
ESCREVA X[4]
Em uma estrutura com vários valores do mesmo tipo, ao invés de declarar diversas vari-
áveis, basta escrever um vetor e entre colchetes o tamanho do vetor.
Carregando um Vetor
PARA I ← 1 ATÉ 5 FAÇA
INÍCIO
ESCREVA "DIGITE O ", I, " NÚMERO"
LEIA X[I]
FIM
É possível realizar uma estrutura de repetição PARA para que ela alimente o vetor com
valores digitados pelo usuário.
Matriz
Uma matriz é uma variável composta homogênea bidimensional formada por uma sequ-
ência de variáveis, todas do mesmo tipo, com o mesmo identificador (mesmo nome) e aloca-
das sequencialmente na memória.
Uma vez que as variáveis têm o mesmo nome, o que as distingue são índices que refe-
renciam sua localização dentro da estrutura. Uma variável do tipo matriz é composta por
linhas e colunas.
Matriz: Declaração
DECLARE nome[linha, coluna] tipo
nome: nome da variável do tipo matriz.
linha: é a quantidade de linhas que vão compor a matriz.
coluna: é a quantidade de colunas que vão compor a matriz.
ANOTAÇÕES
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
tipo: é o tipo básico de dados que poderá ser armazenado na sequência de variáveis que
formam a matriz.
Matriz: Exemplos
DECLARE X[3,5] NUMÉRICO
X[1, 2] ← 45
X[2, 5] ← 0
ESCREVA X[1, 2]
Registros
Registros são estruturas que podem agregar diferentes informações. Dessa maneira,
podem ser feitas diferentes combinações, gerando novos tipos de dados.
Um registro é uma coleção de campos, em que cada campo pode ser de um tipo de dado
diferente. Por isso, os registros são conhecidos como variáveis compostas heterogêneas.
ANOTAÇÕES
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Registros: Declaração
DECLARE nome_da_variável_registro REGISTRO (nome_campo tipo_do_campo...)
Registros: Exemplo
DECLARE conta REGISTRO (num, saldo NUMÉRICO, nome LITERAL)
Acima, o registro declarado é denominado conta e possui três campos, os campos num
e saldo são campos numéricos e o campo nome é do tipo literal.
É possível combinar tipos de dados homogêneos com o tipo de dado registro para con-
seguir mais dados. Exemplo: em uma escola com vários alunos, é possível ter um vetor de
alunos, e cada aluno possui um registro com suas propriedades.
Arquivo
Um arquivo é formado por uma coleção de registros, cada registro é composto por campos
e cada campo possui suas características específicas.
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (IDECAN/INMETRO/ASSISTENTE EXECUTIVO EM METROLOGIA E QUALDIDADE/
INFORMÁTICA/2015) Toda linguagem de programação possui instruções que contro-
lam o fluxo da execução de um programa. Essas estruturas podem ser de decisão,
decisão encadeada, repetição, repetição encadeada, cada uma com seus respectivos
comandos. Observe o fluxograma.
COMENTÁRIO
A imagem da questão apresenta uma condição booleana.
O SE está representado pela condição. O ENTÃO está representado pelo fluxo de Verda-
deiro, enquanto o SENÃO está representando quando a resposta for Falsa.
20m
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O código de uma sub-rotina é carregado uma vez e pode ser executado quantas vezes
forem necessárias. Assim, os programas tendem a ficar menores e mais organizados, uma
vez que o problema pode ser dividido em tarefas menores.
Em geral, um programa é executado linearmente, uma linha após a outra, até o fim.
Entretanto, quando são utilizadas sub-rotinas, é possível a realização de desvios na execu-
ção natural dos programas. Assim, um programa é executado linearmente até a chamada de
uma sub-rotina.
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Tipos de Sub-rotinas
• Funções (functions);
• Procedimentos (procedures).
Funções
É comum encontrar, nas linguagens de programação, várias funções embutidas, por
exemplo, sin (seno), cos (cosseno), abs (valor absoluto), sqrt (raiz quadrada).
Quando uma função é chamada, o programa que chama a função fica em estado de
espera e o controle passa para as instruções que definem a função.
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GABARITO
1. e
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Heaps
HEAPS
Esta estrutura de dados não é, talvez, das mais faladas, como as árvores, vetor, listas,
pilhas, filas: é a HEAPS, um nome em inglês, que não é traduzido.
Quem já trabalhou com Java já ouviu falar de HEAPS porque tem alguma relação com o
gerenciamento de memória do Java.
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Heaps
Introdução
•
Um heap é uma estrutura de dados baseada em árvore na qual todos os nós da árvore
estão em uma ordem específica. Quando a referência é estrutura de dados, de imediato há
a associação com filas, pilhas, vetor, árvores, até mesmo grafo: é uma forma de organizar
dados na memória do computador. Existem vários tipos de árvores, as ordenadas, as não
ordenadas, árvores bem interessantes, como a árvore AVL, que facilita a busca, a coorde-
nação dos elementos, a inserção de busca de elementos. Para cada tipo de operação, para
cada foco existente no sistema, haverá uma estrutura de dados que será a mais adequada
para atender esse sistema.
No caso do heap é uma estrutura de dados que será bastante adequada para que se
possa ter algo como uma prioridade, ter tarefas em prioridade: inserem-se novos elementos,
novos Jobs, novas tarefas, determinando prioridades de forma a acessá-las de forma mais
rápida possível. O que se pretende é uma alta performance de inserção de tarefas e acessar
a prioritária da forma mais rápida possível. Este é o exemplo clássico de utilização de heaps.
Por exemplo, se X é o nó pai de Y, então o valor de X segue uma ordem específica com rela-
ção ao valor de Y, e a mesma ordem será seguida pela árvore;
5m
O número máximo de filhos de um nó em um heap depende do tipo de heap. No entanto,
no tipo mais usado, existem no máximo 2 filhos de um nó e é conhecido como heap binário;
No heap binário, se for uma árvore binária completa com N nós, então ele tem a menor altura
possível, que é log 2 N. É uma estrutura que vai tentar se manter triangular e dinamicamente,
vai reposicionar os elementos para evitar a existência de árvores deterioradas, aquelas árvo-
res que puxam galhos para um determinado lado, o que deteriora muito a ordenação dos ele-
mentos por busca. É uma árvore que vai se “rebalancear” para ficar na menor forma possível,
o mais triangular possível.
No diagrama, você pode observar uma sequência específica, ou seja, cada nó tem um
valor maior que qualquer um de seus filhos. Suponha que haja N Trabalhos em uma fila a
serem executados e cada trabalho tenha sua própria prioridade.
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Heaps
O trabalho com prioridade máxima será concluído primeiro que os outros. A cada ins-
tante, estamos concluindo um trabalho com prioridade máxima e, ao mesmo tempo, também
estamos interessados em inserir um novo trabalho na fila com sua própria prioridade.
Numa árvore AVL, de busca, o elemento do meio será, mais ou menos, o elemento mediano,
sendo que à direita estão os elementos maiores e à esquerda os elementos menores.
No caso do heap a tendência é de que os elementos maiores estejam mais em direção ao
topo e na raiz da heap, no caso de uma heap máxima, estará o maior elemento de todos.Por-
tanto, a cada instante, precisamos verificar o trabalho com prioridade máxima para concluí-lo
e também inserir se há um novo trabalho. Essa tarefa pode ser muito facilmente executada
usando um heap, considerando N trabalhos como N nós da árvore.
É necessário saber qual é o caso de uso principal do heap: não é para ordenação, não
é para busca, é para, por exemplo, prioridades de trabalhos, encontrar o trabalho com maior
prioridade. Ele terá operações que são mais simples do que a de uma árvore AVL que faz
uma série de rotações à direita e à esquerda, ele precisará de menos rotações o que vai
consumir menos recursos do sistema e, por outro lado, ele também tem uma finalidade espe-
cífica para localizar somente o menor ou o maior elemento dentro do heap, o elemento com
maior ou menor prioridade.
Um vetor pode ser usado para simular uma árvore da seguinte maneira: Se estamos
armazenando um elemento no índice i do vetor vet, seu pai será armazenado no índice i/2 (a
menos que seja uma raiz, pois a raiz não tem pai) e pode ser acessado por vet[i/2], e seu filho
esquerdo pode ser acessado por vet[2*i] e seu filho direito pode ser acessado por vet[2*i+1].
O índice de raiz será 1 em um vetor.
Por vezes, para trabalhar com uma árvore, não é necessário trabalhar com ponteiros,
pode-se trabalhar com um vetor tradicional. Um elemento na posição 1, o filho esquerdo
estará à direita e o filho direito em 2 x 1 + 1 = 3. Esses elementos significam que se teria o
seguinte heap.
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Heaps
Podemos usar um vetor para armazenar os nós da árvore. Digamos que temos elemen-
tos com valores {6, 4, 5, 3, 2, 0, 1}.
Heap Máximo
•
Nesse tipo de heap, o valor do nó pai sempre será maior ou igual ao valor do nó filho na
árvore e o nó com o valor mais alto será o nó raiz da árvore.
10m
Implementação: vamos supor que temos um heap com alguns elementos que são arma-
zenados no vetor. A maneira de converter esse vetor em uma estrutura de heap é a seguinte:
Escolhemos um nó no vetor, verificamos se a subárvore esquerda e a subárvore direita são
heaps máximos, em si mesmos e o próprio nó é um heap máximo (seu valor deve ser maior
que todos os nós filhos). Para fazer isso, implementa-se uma função que pode manter a pro-
priedade max heap.
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Heaps
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Heaps
Heap Mínimo
•
Nesse tipo de heap, o valor do nó pai sempre será menor ou igual ao valor do nó filho na
árvore e o nó com menor valor será o nó raiz da árvore:
Cada nó tem um valor menor que o valor de seus filhos. Podemos executar as mesmas
operações que as realizadas na construção de max_heap. Primeiro criaremos uma função
que pode manter a propriedade min heap, se algum elemento a estiver violando.
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Heaps
Agora vamos usar a função na construção de min-heap. Executaremos a função nos nós
restantes que não sejam folhas, pois os nós folha são um heap de um elemento:
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Heaps
DIRETO DO CONCURSO
1. (2018/CCV-UFC/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO) Na estrutura de da-
dos min heap (heap mínima), qual das afirmativas abaixo é verdadeira?
20m
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Heaps
COMENTÁRIO
Heap mínimo
2. (2010/CESPE/INMETRO/PESQUISADOR/DESENVOLVIMENTO DE SISTEMAS) Na
primeira fase do método de ordenação usando uma árvore binária (heapsort), deve ser
montada uma heap a partir do vetor com os dados que se deseja ordenar, conforme os
mostrados na tabela a seguir.
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Heaps
Considerando essas informações, assinale a opção que apresenta a heap max (toda a
árvore ordenada como uma heap) formada ao final dessa fase, antes da classificação pro-
priamente dita.
a.
b.
c.
d.
ANOTAÇÕES
www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Heaps
e.
COMENTÁRIO
Criar uma heap max a partir do vetor abaixo.
GABARITO
1. c
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
Pilhas
PILHAS
REFERÊNCIAS
PILHA
O conteúdo de pilha está muito associado ao de fila. É possível fazer analogias diretas ao
mundo real, o que torna mais fácil o entendimento. A fila é quem chega primeiro, sai primeiro,
já quem chega por último vai para o fim da fila e demorará mais para ser atendido. No caso
da pilha, faz-se a analogia clássica com a pilha de pratos que será lavada na pia: os pratos
são colocados um em cima do outro e o último prato colocado é o primeiro a ser lavado.
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Pilhas
Uma pilha é uma estrutura de dados dinâmica, assim como a fila, que admite remoção de
elementos e inserção de novos objetos.
Mais especificamente, uma pilha (stack) é uma estrutura sujeita à seguinte regra de ope-
ração: sempre que houver uma remoção, o elemento removido é o que está na estrutura há
menos tempo. Adiciona-se de baixo para cima, mas a remoção é feita de cima para baixo, ao
contrário da fila, em que será removido da dianteira em relação à traseira.
Em outras palavras, o primeiro objeto a ser inserido na pilha é o último a ser removido.
Exemplo: pilha de pratos para lavar, em que o primeiro prato colocado é o último e ser lavado.
5m
Essa política é conhecida pela sigla LIFO (Last-In-First-Out), ou seja, o último que chega
é o primeiro a sair.
Uma pilha é um Abstract Data Type (ADT), comumente usado na maioria das linguagens
de programação. Exemplo: programação de pilha de trabalho ou de mensagens.
É denominada pilha, pois se comporta como uma pilha do mundo real — por exemplo: um
baralho de cartas ou pilha de pratos, etc.
A pilha é um tipo de dado abstrato porque não trabalha com um tipo específico. Ela não
é usada para trabalhar apenas com números, letras ou com um tipo específico de objeto.
Pode-se ter uma pilha implementa para qualquer tipo diferente de objeto.
Uma pilha do mundo real permite operações apenas em uma extremidade. Por exemplo,
pode-se colocar ou remover uma carta ou prato apenas da parte superior da pilha. Ao contrá-
rio disso, pode-se operar nas duas extremidades da fila.
Da mesma forma, a pilha permite todas as operações de dados em apenas uma extre-
midade. A qualquer momento, pode-se acessar apenas o elemento superior de uma pilha.
Esse recurso torna a estrutura de dados LIFO. LIFO significa Last-in-first-out. Aqui, o ele-
mento que é colocado (inserido ou adicionado) por último é acessado primeiro. Na terminolo-
gia da pilha, a operação de inserção é chamada operação PUSH e a operação de remoção
é chamada operação POP.
ATENÇÃO
É importante saber a nomenclatura em inglês.
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Pilhas
Coloca-se (push) e retira-se (pop) os dados apenas em uma extremidade. Por essa razão,
a pilha é considerada um pouco mais simples que a fila por conta de sua operação.
REPRESENTAÇÃO DE PILHA
Uma pilha pode ser implementada por meio de um vetor, estrutura, ponteiro e lista ligada.
O caso mais simples é a implementação de um vetor, que é uma estrutura de dados de tama-
nho fixo e que tem alocação inicial de memória.
10m
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Pilhas
A pilha pode ser de tamanho fixo ou pode ter um redimensionamento dinâmico. Caso seja
implementada um vetor, a pilha terá um tamanho fixo. Ou seja, pode-se ter o número máximo
de elementos determinado se estiver trabalhando com vetor ou depender da memória e ter
um redimensionamento dinâmico, principalmente se estiver trabalhando com estruturas de
dados, como, por exemplo, a lista ligada, e aumentar o número de elementos.
OPERAÇÕES BÁSICAS
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Pilhas
peek
A operação de peek retorna o elemento que está no topo da pilha (stack) sem removê-lo.
isfull
A operação de isfull pergunta para a pilha se ela está cheia. Se a pilha já está cheia (top
= maxsize), o retorno é true; se não, o retorno é false.
isempty
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Pilhas
push
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Pilhas
Push recebe um número inteiro de dado. Se não estiver full, incrementa o valor do top
em 1 unidade.
stack[top] = data; — a pilha, que é um vetor na posição top, aponta para o dado; se não,
imprime “Não foi possível inserir, pilha está cheia”.
Lembrando que pop é a operação que coloca o elemento na pilha.
pop
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Pilhas
• Etapa 3 — Se a pilha não estiver vazia, acessa o elemento de dados no qual a parte
superior está apontando;
• Etapa 4 — Diminui o valor de top em 1;
• Etapa 5 — Retorna sucesso.
Se não estiver vazio, pega-se data e faz stack[top], top retorna -1 e faz retorno de data;
se não, imprime “Não foi possível recuperar o dado, a pilha está vazia”.
20m
DIRETO DO CONCURSO
1. (2009/UNRIO/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO) Sobre listas encadea-
das, é INCORRETO afirmar que:
A estrutura de dados pilha segue uma política de inserção e remoção do tipo
a. LIFO — Last In, First Out (o último a entrar é o primeiro a sair).
b. FIFO — First In, First Out (o primeiro a entrar é o primeiro a sair).
c. Depth-First (priozirando a profundidade).
d. Beadth-First (priorizando a largura).
e. Beast-First (priorizando o melhor de acordo com uma dada regra).
COMENTÁRIO
A política da pilha é de LIFO (Last-In-First-Out)
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Pilhas
COMENTÁRIO
Por simplicidade, trabalhar-se-á com vetor de 3 elementos: 2, 1 e 3.
A árvore AVL se auto balanceará em cada inserção, tornando-se uma árvore biná-
ria de busca.
Primeiro, insere-se 2 na raiz da árvore e, depois, 1. Como 1 é menor que 2, ocorre uma
troca. O 3 entra para a direita.
ANOTAÇÕES
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Pilhas
Assim, tem-se uma árvore binária de busca balanceada, aonde à esquerda se tem os nós
de valores menores (1) e à direita se tem os nós de números maiores (3). Independente da
ordem dos valores no vetor, a árvore AVL ficaria com essa disposição.
O percurso em ordem é nó esquerdo, raiz e nó direito. Feito isso, são colocados na pilha
1, 2 e 3 na seguinte ordem: 3, 2 e 1.
GABARITO
1. a
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
www.grancursosonline.com.br 10
TECNOLOGIA DA INFORMAÇÃO
Filas
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
FILAS
REFERÊNCIA
FILA
A regra de uma fila de banco é que quem entra primeiro irá sair primeiro e quem entra
depois irá sair ao fim da fila. Os elementos do meio não são removidos. Trabalha-se com a
ponta e o final da fila. O elemento novo irá para o fim da fila e o próximo elemento a ser aten-
dido é o da ponta da fila. Uma fila é uma estrutura de dados dinâmica que admite remoção
de elementos e inserção de novos objetos.
Mais especificamente, uma fila (queue) é uma estrutura sujeita à seguinte regra de operação:
sempre que houver uma remoção, o elemento removido é o que está na estrutura há mais tempo.
Em outras palavras, o primeiro objeto inserido na fila é também o primeiro a ser removido. Essa
política é conhecida pela sigla FIFO (First-In-First-Out) — primeiro que entra, primeiro que sai.
ANOTAÇÕES
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Filas
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A fila é uma estrutura de dados abstrata, um pouco semelhante a pilhas. A fila é abstrata,
porque, em geral, ela admite vários tipos de dados diferentes, não sendo usada apenas para
números ou textos. O conceito irá funcionar para qualquer tipo de dado.
ATENÇÃO
É importante saber diferenciar fila de pilha, principalmente sobre a questão de ordem de
inserção e remoção de elementos.
Diferente das pilhas, uma fila é aberta nas duas extremidades. Uma extremidade é sempre
usada para inserir dados (enfileirar) e a outra é usada para remover dados (enfileirar).
5m
A fila segue a metodologia First-In-First-Out, ou seja, o item de dados armazenado pri-
meiro será acessado primeiro.
A fila possui apenas um sentido. Quem entrou primeiro, sai primeiro; quem entrou por
último, sai por último.
REPRESENTAÇÃO DA FILA
Em uma fila realizamos acessos nas duas extremidades por diferentes razões.
O diagrama a seguir fornecido abaixo tenta explicar a representação da fila como estru-
tura de dados:
ANOTAÇÕES
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Filas
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
OPERAÇÕES BÁSICAS
As operações da fila podem envolver inicializar ou definir a fila, utilizá-la e depois apa-
ga-la completamente da memória. Aqui tentaremos entender as operações básicas associa-
das às filas:
São necessárias mais funções para tornar a operação da fila acima mencionada efi-
ciente. Estas são:
Existe em várias implementações uma funcionalidade que busca o elemento sem removê-
-lo. O dequeue irá retornar o elemento e, ao mesmo tempo, removê-lo da fila. Já o peek irá
simplesmente retornar o elemento próximo sem removê-lo.
Na fila se desenfileira (ou acessa) dados, apontados pelo ponteiro frontal e, ao enfileirar
(ou armazenar) dados na fila, ajudando o ponteiro traseiro.
peek
int peek () {
return queue[front];
}
Chama-se a operação com o front.
ANOTAÇÕES
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Filas
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Considerando que existe o queue, ele estará instanciado, com tamanho estável, se terá duas
variáveis, uma que aponta para o início e outra que aponta para o final. É como se houvesse
um vetor vazio e ao colocar elementos dentro dele há ponteiros que irão identificar os valores.
Os ponteiros são front e rear. Quando um os dois apontam para o mesmo lugar, há um
10m
elemento só.
isfull
Como se está usando um vetor de dimensão única para implementar a fila, basta verificar
se o ponteiro traseiro alcança MAXSIZE para determinar se a fila está cheia.
Caso se mantenha a fila em uma lista vinculada circular, o algoritmo será diferente.
Por simplicidade, trabalha-se com uma lista e com um vetor.
bool isfull() {
if(rear == MAXZISE – 1)
return true;
else
return false;
}
Se o ponteiro rear está em maxsize -1, então a fila estará cheia (return true). Se estiver
vazia, dará return false.
OPERAÇÃO DE ENFILEIRAMENTO
As filas mantêm dois ponteiros de dados, frontal e traseiro. Portanto, suas operações são
comparativamente mais difíceis de implementar do que as de pilhas:
O ponteiro traseiro aponta para o espaço que está vazio para que possa enfileirar
outro elemento.
• Etapa 4 — Adicione o elemento de dados ao local da fila, para onde a parte traseira
está apontado;
ANOTAÇÕES
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Filas
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
No caso da imagem, rear está voltando. Rear apontava para C, e como havia espaço,
adiciona-se D e aponta rear para ele. Se fosse tentado fazer um novo enfileiramento, a fila já
estaria cheia e a operação iria falhar.
enqueue
int enqueue(int data){
if(isfull())
return 0;
rear = rear + 1;
queue[rear] = data;
return 1;
}
Se a fila estiver cheia, retorna a zero. Se a fila não estiver cheia, altera-se o ponteiro do
rear para o dado.
Return 1 aponta que o elemento foi inserido com sucesso.
ANOTAÇÕES
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Filas
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
OPERAÇÃO DE DESENFILEIRAMENTO
O acesso a dados da fila é um processo de duas tarefas — acesse os dados para onde a
frente está apontando e remova os dados após o acesso. As etapas são tomadas para exe-
cutar a operação de desenfileiramento:
O rear continuará apontando para o mesmo lugar. O front aponta para A, mas ao fazer dequeue,
front apontará para B. O dado que está na posição de A é ignorado e o valor de A é retomado.
15m
A operação de dequeue não só retoma o valor, mas também move o ponteiro frontal.
dequeue
int dequeue() {
if(isempty())
return 0;
int data = queue[front];
front = front + 1
return data;
}
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Filas
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Verifica se a fila está vazia. Se estiver vazia, retorna a zero; se não estiver, pega o dado
apontado pelo front, incrementa front em 1 e retorna o dado que foi buscado de queue[front].
DIRETO DO CONCURSO
1. (2014/FAFIPA/UFFS/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO) Acerca dos mo-
delos clássicos de Estruturas de Dados, aquela que define que os primeiros elementos
a serem inseridos são os primeiros elementos a serem removidos (first in, first out) é
classificada como:
a. Vetor.
b. Árvore AVL.
c. Árvore binária.
d. Pilha.
e. Fila.
COMENTÁRIO
A fila é classificada como first in, first out. A pilha é classificada como last in, first out.
COMENTÁRIO
Empilhamento e desempilhamento também são denominados, respectivamente, como en-
queue e dequeue. PUSH e POP são operações da pilha.
GABARITO
1. e
2. E
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
ANOTAÇÕES
www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
Árvores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ÁRVORES I
Introdução
Árvore é representada por nós conectados por arestas. O nó é o ponto, enquanto a aresta
são ponteiros que representam outros nós.
Árvore binária é uma estrutura de dados especial usada para fins de armazenamento de
dados. O nó pode ter um filho, dois filhos ou nenhum filho.
Uma árvore binária possui uma condição especial de que cada nó pode ter no máximo
dois filhos (grau 2).
Uma árvore binária possui os benefícios de um vetor ordenado e de uma lista ligada, pois
a pesquisa é tão rápida quanto em um vetor ordenado e as operações de inserção ou exclu-
são são tão rápidas quanto na lista ligada.
5m
Na árvore binária, na medida em que os dados são inseridos, eles continuam ordenados.
Há também a possibilidade da lista ligada, que é mais simples, podendo incrementar ou eli-
minar elementos na lista sem afetar a memória. Todavia, em oposição ao que ocorre em lista
tradicional, não é possível acessar o elemento direito no index.
ANOTAÇÕES
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Árvores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A estrutura de dados Árvore é uma estrutura que usa ponteiros para representar os nós
filhos, ou seja, trata-se de uma estrutura dinâmica.
A estruturas de dados Árvore não é linear, ou seja, os elementos que as compõem não
estão armazenados de forma sequencial e também não estão todos encadeados como em
uma lista. Note ainda que em uma árvore não existe o conceito de index. Logo, para ter
acesso a um elemento é preciso passar por todos os anteriores.
Em uma estrutura de dados Árvore cada elemento armazena um tipo de dado e ponteiros
para o elemento à esquerda e à direita, o que permite a inserção dos valores na árvore de
forma recursiva.
Características recursivas são interessantes, pois simplifica as operações, mas com um
custo de memória muito alto.
Árvore binária: os elementos menores estão à esquerda e os maiores à direita.
Intuitivamente, a operação na busca binária será mais rápida. E a busca binária em lista
ligada não é possível, pois é preciso percorrer todos os elementos para se chegar ao meio.
10m
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Árvores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Termos importantes
15m
• Caminho – Caminho refere-se à sequência de nós ao longo das bordas de uma árvore;
• Raiz – O nó na parte superior da árvore é chamado raiz. Existe apenas uma raiz por
árvore e um caminho do nó raiz para qualquer nó;
• Pai – Qualquer nó, exceto o nó raiz, tem uma borda para cima em relação a um nó
chamado pai;
• Filho – O nó abaixo de um determinado nó conectado por sua borda descendente é
chamado de nó filho;
• Folha – O nó que não possui nenhum nó filho é chamado de nó folha;
• Subárvore – Representa os descendentes de um nó;
• Visitar – Refere-se à verificação do valor de um nó quando o controle está no nó;
• Atravessar – Significa passar pelos nós em uma ordem específica;
ANOTAÇÕES
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Árvores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Quando o número é menor, ele estará à esquerda. E quando o número é maior, ele estará
à direita.
Implementação do Nó em C
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Árvores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ÁRVORES II
Operações Básicas
As operações básicas que podem ser executadas em uma estrutura de dados da árvore
de pesquisa binária são as seguintes:
Essa operação é um pouco mais complicada. Ao remover um nó, não é como numa lista
ligada, em que, simplesmente, será passado o apontamento do elemento posterior para o ele-
mento anterior. Nesse caso, quando o nó tiver dois filhos, não é possível juntá-los em um só.
Inserção
A primeira inserção cria a árvore. Depois, sempre que um elemento for inserido, localize
primeiro seu local apropriado. Comece a procurar no nó raiz e, se os dados forem menores
que o valor da chave, procure o local vazio na subárvore esquerda e insira o dado. Caso con-
trário, procure o local vazio na subárvore direita e insira o dado.
Estas duas propriedades devem se manter, para que os outros algoritmos continuem fun-
cionando: ter, no máximo, dois filhos por nós e valores menores estão à esquerda e valores
maiores estão à direita.
5m
ANOTAÇÕES
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Árvores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Busca
Remoção
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Árvores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
15m
removeraiz (arvore r) {
no *p, *q;
if (r->esq == NULL) {
q = r->dir;
free (r);
return q;
ANOTAÇÕES
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Árvores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
}
p = r; q = r->esq;
while (q->dir!= NULL) {
p = q; q = q->dir;
}
DIRETO DO CONCURSO
1. (COSEAC/UFF/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO/2019) Em relação
à estrutura de dados árvore, avalie se são verdadeiras (V) ou falsas (F) as afirmati-
vas a seguir.
I – O número de nível mais alto de uma árvore é conhecido como grau de uma árvore.
II – Quando um nó possui grau zero, diz-se que ele é um nó terminal ou folha.
III – Árvores são estruturas de dados estáticas em que os dados possuem uma ordem
pré-definida, os elementos são dispostos de acordo com uma hierarquia e existe um
nó principal conhecido como raiz.
ANOTAÇÕES
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Árvores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
Termos importantes
Grau — O número de subárvores de um nó é o grau do nó. O grau da árvore é o maior valor
de grau de nó entre todos os nós da árvore.
I – O número de nível mais alto de uma árvore é conhecido como grau de uma árvore —
Introdução
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Árvores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Em uma estrutura de dados Árvore cada elemento armazena um tipo de dado e ponteiros
para o elemento à esquerda e à direita, o que permite a inserção dos valores na árvore de
forma recursiva;
III – Árvores são estruturas de dados estáticas em que os dados possuem uma ordem
pré-definida, os elementos são dispostos de acordo com uma hierarquia e existe um nó
principal conhecido como raiz.
20m
GABARITO
1. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Árvores III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ÁRVORES III
ÁRVORES
Travessia
O travessia é um processo de visitar todos os nós de uma árvore e também pode impri-
mir seus valores.
Como todos os nós são conectados por meio de arestas (links), sempre começamos a
partir do nó raiz (cabeça).
Ou seja, não podemos acessar aleatoriamente um nó em uma árvore.
Existem diversas maneiras que usamos para atravessar uma árvore:
• Em ordem;
• Pré-ordem;
• Pós-ordem;
• Por nível.
Travessia Em Ordem
Nesse método a subárvore esquerda é visitada primeiro, depois a raiz e depois a subár-
vore direita.
Devemos sempre lembrar que cada nó pode representar uma subárvore em si.
Se uma árvore binária de pesquisa for atravessada em ordem, a saída produzirá valores-
-chave classificados em uma ordem crescente.
ANOTAÇÕES
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Árvores III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Árvores III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Travessia Em Pré-ordem
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Árvores III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Travessia em Pós-ordem
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Árvores III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Em uma árvore binária, o percurso por nível é um percurso denominado “breadth first
search” (BFS) ou em português, busca em largura, a qual seria não recursiva por natureza.
Este percurso utiliza uma fila ao invés de pilha para armazenar os próximos 2 nodos que
devem ser pesquisados (filho à esquerda e à direita).
Exemplo 1
20m
ANOTAÇÕES
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Árvores III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Exemplo 2
DIRETO DO CONCURSO
1. (2009/CESPE/ANAC/TÉCNICO ADMINISTRATIVO – INFORMÁTICA) A travessia em
pré-ordem em árvore binária inicialmente percorre a subárvore à esquerda (em pré-or-
dem), passa pela raiz e finaliza na subárvore à direita (também em pré-ordem).
COMENTÁRIO
Item errado, pois, na pré-ordem, o nó raiz é visitado primeiro, depois a subárvore esquerda
e, finalmente, a subárvore direita.
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Árvores III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
I – Um percurso em pré-ordem seria: { Ada, Bia, Cris, Lia, Ana, Mel, Rosa, Rita, Val, Sol,
Lua, Lina}
II – Um percurso em ordem simétrica seria: {Val, Sol, Rosa, Rita, Mel, Lua, Lina, Lia, Cris,
Bia, Ana, Ada}
III – Um percurso em nível seria: {Lina, Ana, Lua, Ada, Lia, Sol, Cris, Rita, Val, Bia,
Mel, Rosa}
IV – Um percurso em pós-ordem seria: {Lina, Ana, Ada, Lia, Cris, Bia, Lua, Sol, Rita, Mel,
Rosa, Val}
COMENTÁRIO
Primeiramente, é preciso montar a ordem binária:
25m
ANOTAÇÕES
www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
Árvores III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Assim:
GABARITO
1. E
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
Árvores IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ÁRVORES IV
ÁRVORES
Árvores AVL
Caso uma árvore binária seja construída a partir de uma lista ordenada teremos algo como:
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Árvores IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Com dados em tempo real, não podemos prever o padrão de dados e suas frequências.
Portanto, surge a necessidade de balancear as árvores de pesquisa existentes.
Criadas por Adelson-Velsky e Landis, as árvores AVL são uma árvore de pesquisa binária
com balanceamento de altura.
A árvore AVL verifica a altura das subárvores esquerda e direita e garante que a diferença
não seja maior que 1. Essa diferença é chamada de fator de equilíbrio.
Aqui vemos que a primeira árvore está balanceada e as próximas duas não estão
balanceadas:
Rotações AVL
Para se balancear, uma árvore AVL pode executar os quatro tipos de rotações a seguir:
• Rotação esquerda;
• Rotação direita;
• Rotação esquerda-direita;
ANOTAÇÕES
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Árvores IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Rotação direita-esquerda.
As duas primeiras rotações são rotações simples e as duas rotações seguintes são rota-
ções duplas. Para termos uma árvore desequilibrada, precisamos pelo menos de uma árvore
de altura 2. Com uma árvore simples, vamos estudar uma a uma as rotações.
Rotação Esquerda
Se uma árvore ficar desequilibrada, quando um nó é inserido na subárvore direita da
subárvore direita, realizamos uma única rotação esquerda:
Rotação Direita
A árvore AVL pode ficar desequilibrada, se um nó for inserido na subárvore esquerda da
subárvore esquerda. A árvore precisa de uma rotação.
O nó desequilibrado se torna o filho certo do filho esquerdo executando uma rotação direita:
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Árvores IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
15m
Rotação Esquerda-Direita
As rotações duplas são uma versão um pouco complexa das versões já explicadas das
rotações. Para entendê-los melhor, devemos tomar nota de cada ação executada durante a
rotação. Vamos primeiro verificar como executar a rotação esquerda-direita.
Uma rotação esquerda-direita é uma combinação de rotação esquerda seguida por rota-
ção direita. Um nó foi inserido na subárvore direita da subárvore esquerda. Isso faz de C um
nó desequilibrado. Esses cenários fazem com que a árvore AVL execute a rotação esquer-
da-direita. Exemplo a seguir.
ANOTAÇÕES
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Árvores IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Rotação Direita-Esquerda
O segundo tipo de rotação dupla é a rotação direita-esquerda. É uma combinação de
rotação direita seguida de rotação esquerda.

ANOTAÇÕES
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Árvores IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (2014/IBFC/TRE-AM/ANALISTA JUDICIÁRIO – ANÁLISE DE SISTEMAS) Quanto ao
Algoritmo e estrutura de dados no caso de árvore AVL (ou árvore balanceada pela al-
tura), analise as afirmativas abaixo, dê valores Verdadeiro (V) ou Falso (F) e assinale a
alternativa que apresenta a sequencia correta de cima para baixo:
20m
�( ) Uma árvore AVL é dita balanceada quando, para cada nó da árvore, a diferença
entre as alturas das suas subárvores (direita e esquerda) não é maior do que um.
�( ) Caso a árvore não esteja balanceada é necessário seu balanceamento através da
COMENTÁRIO
A primeira afirmativa é verdadeira, pois a árvore AVL verifica a altura das subárvores es-
querda e direita e garante que a diferença não seja maior que 1.
ANOTAÇÕES
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Árvores IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A segunda também é verdadeira, pois as duas primeiras rotações são rotações simples e
as duas rotações seguintes são rotações duplas.T
COMENTÁRIO
A inserção do elemento 30 causaria a seguinte reação:
ANOTAÇÕES
www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
Árvores IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ANOTAÇÕES
www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
Árvores IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GABARITO
1. d
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 9
TECNOLOGIA DA INFORMAÇÃO
Vetores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
VETORES I
Referências
 Introdução
ANOTAÇÕES
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Vetores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Introdução
Vetor é um contêiner que pode conter um número fixo de itens e esses itens devem ser
do mesmo tipo (Estrutura de Dados Homogênea).
5m
A maioria das estruturas de dados utiliza vetores para implementar seus algoritmos.
A seguir estão os termos importantes para entender o conceito de vetor:
Representação
Obs.: é importante lembrar que o fato de o índice começar com 1 é algo que varia de uma
linguagem de programação para outra. A maioria das linguagens começa a conta-
gem com o 0, contudo, nos algoritmos, em geral se começa com 1.
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Vetores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
OPERAÇÕES BÁSICAS
Travessia
15m
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Vetores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Inserção
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Vetores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
20m
Exclusão
Exclusão refere-se à remoção de um elemento existente e à reorganização de todos os
elementos remanescentes.

ANOTAÇÕES
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Vetores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Pesquisa
A pesquisa, dado um array, visa descobrir se um elemento existe em uma dada posição
ou não. O algoritmo abaixo mostra uma pesquisa sequencial:
ANOTAÇÕES
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Vetores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Atualização
A atualização visa trocar o valor de um elemento.
25m
www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
Vetores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (2010/CESPE/BANCO DA AMAZÔNIA/TECNOLOGIA DA INFORMAÇÃO – ANÁLISE
DE SISTEMAS)
www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
Vetores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
Item correto, pois o cálculo que será realizado é:.
COMENTÁRIO
Item correto, pois vetor é um contêiner que pode conter um número fixo de itens e esses
itens devem ser do mesmo tipo (Estrutura de Dados Homogênea).
Além disso, Structs, também conhecidas como Registros, definem tipos de dados que
agrupam variáveis sob um mesmo tipo de dado.
30m
A ideia de usar uma struct é permitir que, ao armazenar os dados de uma mesma entidade,
isto possa ser feito com uma única variável.
Por exemplo, se for preciso armazenar a altura, o peso e a idade de uma pessoa, pode-se
criar uma struct chamada Pessoa e agrupar os dados em um único tipo de dado.
Uma vez que armazena vários tipos de dados distintos, é considerada uma Estrutura de
Dados Heterogênea.
GABARITO
1. C
2. C
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 9
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
VETORES II
LISTAS
Referências

ANOTAÇÕES
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Listas Encadeadas
Uma lista encadeada é uma representação de uma sequência de objetos, todos do
mesmo tipo, na memória RAM (random access memory) do computador.
Cada elemento da sequência é armazenado em uma célula da lista: o primeiro elemento
na primeira célula, o segundo na segunda, e assim por diante.
Uma lista encadeada (linked list – lista ligada) é uma sequência de células; cada célula
contém um objeto (todos os objetos são do mesmo tipo) e o endereço da célula seguinte.
Cada célula é um registro que pode ser definido assim:
5m
Obs.: o vetor é bastante útil e tem um acesso aleatório bastante rápido. No entanto, ele
possui uma limitação grave, que é o fato de não ser possível incluir mais elemen-
tos além do que foi determinado no início. A inclusão de mais um elemento em um
array depende, portanto, da alocação de um outro vetor com um tamanho maior e
transferir os valores de um vetor para o outro, isso para cada novo elemento que
se deseja inserir. Isso torna as coisas lentas. Assim, a lista ligada é uma alternativa
para situações em que se deseja a inserção rápida de elementos. Todavia, a lista
ligada apresenta uma desvantagem, pois é muito caro realizar o acesso aleatório a
algum elemento.
Representação
A lista encadeada pode ser visualizada como uma cadeia de nós, onde cada nó aponta
para o próximo nó:
ANOTAÇÕES
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: vale lembrar que, no caso de um vetor, quando se declara uma quantidade grande
de elementos com o intuito de fazer o uso na medida da necessidade, gera-se um
problema, pois o custo de memória inicial será alto. Já em uma lista encadeada é
diferente, pois a alocação da memória ocorre na medida em que os elementos são
inseridos.
Recursividade
Listas são estruturas eminentemente recursivas.
ANOTAÇÕES
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Para tornar isso evidente, basta fazer a seguinte observação: se le é uma lista não vazia
então le->prox também é uma lista.
Muitos algoritmos sobre listas encadeadas ficam mais simples quando escritos em estilo
recursivo.
Exemplo: a seguinte função recursiva imprime o conteúdo de uma lista encadeada le:
15m
Operações Básicas:
• Inserção – Insere um elemento no início da lista;
• Exclusão – Exclui um elemento da lista;
• Imprimir – Exibe a lista completa;
• Pesquisar – Pesquisa um elemento usando a chave fornecida.
ANOTAÇÕES
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Inserção
Obs.: percebe-se que o custo computacional é menor nessa operação de inserção se com-
parado ao custo de um vetor.
Esta função recebe uma lista encadeada le com cabeça e insere na lista uma nova célula
imediatamente antes da primeira que contém y.
Se nenhuma célula contém y, insere a nova célula no fim da lista. O conteúdo da nova
célula é x.
ANOTAÇÕES
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Exclusão
20m

Esta função recebe uma lista encadeada le com cabeça e remove da lista a primeira
célula que contiver y, se tal célula existir.
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Pesquisa
ANOTAÇÕES
www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (2012/CESPE/BANCO DA AMAZÔNIA CARGO/TÉCNICO CIENTÍFICO – ADMINIS-
TRAÇÃO DE DADOS) As listas duplamente encadeadas diferenciam-se das listas sim-
plesmente encadeadas pelo fato de, na primeira, os nós da lista formarem um anel com
o último elemento ligado ao primeiro da lista.
COMENTÁRIO
Quem faz a ligação entre o primeiro elemento e o último elemento é a lista encadea-
da circular.
COMENTÁRIO
Não há tamanho fixo, pois são permitidas operações de inclusão e exclusão.
25m
www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
a) Na realidade, isso acontece na lista encadeada circular.
b) A estrutura de dados é dinâmica.
c) Os elementos estão dispersos na memória física.
d) O disposto no item está correto.
e) Na realidade, na lista ligada ocorre justamente o contrário.
GABARITO
1. E
2. d
3. d
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Algoritmos de Busca
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ALGORITMOS DE BUSCA
Referências
Introdução
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Algoritmos de Busca
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Imagine ter que encontrar uma palavra em um dicionário que não está organizado. O tra-
balho seria imenso, por isso é importante que as informações estejam organizadas para que
o algoritmo de busca funcione rapidamente.
Certos métodos de organizar dados tornam o processo de busca mais eficiente. Algorit-
mos de ordenação estão relacionados aos algoritmos de busca, pois agilizam o processo de
encontrar as informações necessárias.
Como a operação de busca é uma tarefa muito comum em computação, o conhecimento
de métodos é um passo importante para a formação de um bom programador.
10m
Um algoritmo de busca é aquele que aceita um argumento e tenta encontrar o registro
cuja chave seja este argumento.
É possível que a busca de determinado elemento não tenha sucesso, ou seja, talvez não
exista nenhum registro dentro da tabela com esse argumento como chave.
Nesse caso, o algoritmo pode retornar um “registro nulo”.
Como estamos falando de algoritmos, não estamos falando em implementações específi-
cas em determinada linguagem. Para cada linguagem de programação vai existir uma forma
que será retornada.
15m
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Algoritmos de Busca
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Busca Sequencial em C
Note que a pesquisa sequencial funciona para pesquisas não ordenadas, pois varre o
vetor do início ao fim. Porém seu custo é O(n), porque quanto maior for (n) maior será o
custo, ou seja, o custo é diretamente proporcional ao número de elementos no vetor.
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Algoritmos de Busca
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
No pior caso (caso em que a chave não é encontrada), são necessárias “n” comparações
quando as chaves estão desordenadas.
No caso médio, N/2 comparações se as chaves estiverem ordenadas, pois se para a
busca assim que uma chave maior do que a procurada é encontrada.
20m
Uma vez que o algoritmo percorre a lista e percebe que o elemento que está sendo per-
corrido é maior que o elemento pretendido, já é possível parar a pesquisa.
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Algoritmos de Busca II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ALGORITMOS DE BUSCA II
Em geral, ao se aplicar um algoritmo de busca sobre uma lista não ordenada, o algoritmo
terá problemas na hora de sua execução. É importante lembrar que alguns algoritmos fun-
cionam para listas ordenadas e não ordenadas, mas outros apenas para listas ordenadas.
ATENÇÃO
A busca sequencial funciona tanto para lista ordenada quanto para não ordenada.
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Algoritmos de Busca II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Busca Ordenada
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Algoritmos de Busca II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Isso acontece pois sabemos que determinada chave está ausente numa lista classificada
em ordem ascendente de chaves assim que se encontra uma chave maior que o argumento.
Existe uma tabela auxiliar, chamada tabela de índices, além do próprio arquivo ordenado.
Essa tabela faz o registro dos índices dos registros mais acessados na tabela principal.
Cada elemento na tabela de índices contém uma chave (kindex) e um indicador do regis-
tro no arquivo que corresponde a kindex.
Faz-se a busca a partir do ponto indicado na tabela, sendo que a busca não precisa ser
feita desde o começo.
Pode ser implementada como um vetor ou como uma lista encadeada.
O indicador da posição na tabela pode ser um ponteiro ou uma variável inteira.
Se a tabela for muito grande, pode-se ainda usar a tabela de índices secundária.
O índice secundário é um índice para o índice primário.
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Algoritmos de Busca II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Vantagens:
• Os itens na tabela poderão ser examinados sequencialmente sem que todos os regis-
tros precisem ser acessados;
• O tempo de busca diminui consideravelmente.
Desvantagens:
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Algoritmos de Busca II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (2010/CESPE/Banco da Amazônia/Técnico Científico/Tecnologia da Informação/Admi-
nistração de Dados) A pesquisa sequencial é aplicável em estruturas não ordenadas.
COMENTÁRIO
É necessário lembrar que a pesquisa sequencial pode ser realizada sobre dados não
ordenados.
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Algoritmos de Busca II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
A busca sequencial possui um laço de repetição que tenta identificar o elemento procurado.
Perceba que o algoritmo dado possui dois laços. O algoritmo nem chega a retornar
nada, mas apenas imprime o resultado. Esse é um algoritmo que faz a ordenação e não
uma busca.
Busca Sequencial em C
GABARITO
1. C
2. E
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Busca Binária
O método mais eficiente de pesquisar uma lista ordenada sem usar índice ou tabelas
auxiliares é a busca binária. É interessante notar que a busca binária é realizada em uma
lista ordenada.
Em termos básicos, o argumento é comparado à chave do elemento do meio da tabela.
Se forem iguais, a busca terminará com sucesso. Caso contrário, a metade superior ou a
metade inferior da tabela deverá ser pesquisada de modo semelhante.
A busca binária pode ser definida recursivamente.
Entretanto, é possível que a sobrecarga associada à recursividade a torne inadequada
para uso em situações práticas nas quais a eficiência é uma consideração primordial. Apesar
de a recursividade nos trazer soluções com bastante elegância, ela é pesada computacional-
mente em relação ao gasto de memória.
5m
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Uma pesquisa binária que busque o número 47 encontrará o número 14 na primeira cha-
mada. Na segunda chamada, ela encontrará o número 45. Na terceira chamada, ela encon-
trará o número 47.
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
10m
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Tabela de Hash/Espalhamento
É uma estrutura de dados que armazena dados de maneira associativa. Essa estrutura
associa uma chave a um índice.
Em uma tabela de hash, os dados são armazenados em um formato de vetor, em que
cada valor de dados tem seu próprio valor de índice exclusivo.
O acesso aos dados se torna muito rápido se conhecermos o índice dos dados desejados.
Assim, torna-se uma estrutura de dados na qual as operações de inserção e pesquisa
são muito rápidas, independentemente do tamanho dos dados.
A tabela de hash usa um vetor como meio de armazenamento e usa a técnica de hash
para gerar um índice no qual um elemento deve ser inserido ou a partir do qual ele deve ser
localizado.
É necessário entender que o hashing é uma técnica para converter um intervalo de valo-
res-chave em um intervalo de índices de um vetor.
Pode-se usar o módulo operador para obter uma variedade de valores-chave.
Por exemplo, uma tabela de tamanho 20 e os seguintes itens devem ser armazenados,
onde os itens estão no formato chave/valor.
Pra cada chave, há uma função de hashing que devolve um índice.
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
20m
As colisões ocorrem quando dois elementos colidem para a mesma posição do vetor.
Existem dois métodos básicos para tratar colisões de espalhamento.
A primeira técnica, chamada reespalhamento, requer o uso de uma função de espalha-
mento secundária sobre a chave de espalhamento do item.
A função de reespalhamento é aplicada sucessivamente até ser encontrada uma posição
vazia onde o item possa ser inserido.
Se a posição de espalhamento do item estiver ocupada durante uma pesquisa, a função
de reespalhamento será usada novamente para achar o item.
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A segunda técnica, chamada encadeamento, forma uma lista ligada de todos os itens
cujas chaves se espalharam nos mesmos valores.
Durante a busca, essa pequena lista ligada é percorrida sequencialmente, procurando a
chave desejada.
Essa técnica requer a inclusão de um campo de ligação adicional em cada posição
da tabela.
Encadeamento
Qualquer função que leva qualquer chave no intervalo 0..M-1 de índices serve como
função de espalhamento.
Mas uma tal função só é eficiente se espalhar as chaves pelo intervalo de índices de
maneira razoavelmente uniforme.
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Por exemplo, se as chaves são números inteiros e todas são múltiplos de 100 (ou seja,
todas terminam com 00) então v % 100 é uma péssima função de espalhamento (causará
muitas colisões).
Uma boa função de espalhamento é essencial para garantir boa performance em tabelas
de espalhamento.
Uma função de espalhamento não adequada para as chaves em questão tende a degra-
dar o desempenho geral da tabela de espalhamento.
Um requisito básico para garantir o bom desempenho da função de espalhamento é que
ela deve prover uma distribuição uniforme dos valores de espalhamento.
Uma distribuição não uniforme tende a aumentar o número de colisões assim como o
custo associado para resolvê-las.
25m
DIRETO DO CONCURSO
1. (2019/IDECAN/IF-PB/Professor/Informática) Basicamente, existem dois métodos de
pesquisa em um vetor de números, a Busca Linear e a Busca Binária. A Busca Binária
é mais eficiente do que a Busca Linear, mas ela só funciona se o vetor estiver ordena-
do. Assinale a alternativa que indique a ordem de complexidade do pior caso da Busca
Binária em um vetor de n números ordenados.
a. O(n)
b. O(n log n)
c. O(log n)
d. O(1)
e. O(n^2)
COMENTÁRIO
Cada comparação na busca binária reduz o número de possíveis candidatos por um fa-
tor de 2. Sendo assim, o número máximo de comparações de chave é aproximadamente
log2n. Sendo assim, podemos afirmar que o algoritmo de busca é O(log n).
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
b. a busca por interpolação é mais adequada quando existe uma distribuição não uni-
forme nas chaves.
c. a busca sequencial possui tempo médio da ordem de log2N (log N na base 2).
d. a pesquisa binária possui uma quantidade máxima de buscas da ordem de N/2.
e. o hashing é considerado tanto um método de busca quanto um método de ordenação.
COMENTÁRIO
A busca binária é o método mais eficiente de pesquisar uma lista ordenada sem usar índice
ou tabelas auxiliares é a busca binária. Em termos básicos, o argumento é comparado à
chave do elemento do meio da tabela. Se forem iguais, a busca terminará com sucesso.
Caso contrário, a metade superior ou a metade inferior da tabela deverá ser pesquisada
de modo semelhante.
Em relação à busca por interpolação, se as chaves estiverem uniformemente distribuídas
dentro da lista, a pesquisa por interpolação pode ser ainda mais eficiente do que a binária.
O algoritmo é o mesmo da pesquisa binária, adotando-se a fórmula abaixo para o cálculo
da variável “meio” (que neste caso não será obrigatoriamente o meio da tabela):
meio = ini + ((fim-ini)*(chave-v[ini])) / (v[fim]-v[ini]).
O número de comparações em uma busca sequencial dependerá de onde o registro com
a chave do argumento aparece na tabela. Se o registro for o primeiro na tabela, só será
efetuada uma comparação. se o registro for o último a tabela, serão necessárias “n” com-
parações. Se for igualmente provável que o argumento apareça em qualquer posição de-
terminada da tabela, uma busca de sucesso exigirá (em média) (n + 1)/2 comparações, e
uma busca sem êxito exigirá “n” comparações. Em qualquer caso, o número de compara-
ções será O(n).
É importante lembrar que cada comparação na busca binária reduz o número de possíveis
candidatos por um fator de 2. Sendo assim, o número máximo de comparações de cha-
ve é aproximadamente log2n. Sendo assim, podemos afirmar que o algoritmo de busca
é O(log n).
A Tabela de Hash ou Espalhamento é uma estrutura de dados que armazena dados de
maneira associativa. Em uma tabela de hash, os dados são armazenados em um formato
de vetor, em que cada valor de dados tem seu próprio valor de índice exclusivo. O acesso
aos dados se torna muito rápido se conhecermos o índice dos dados desejados. Assim,
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
torna-se uma estrutura de dados na qual as operações de inserção e pesquisa são muito
rápidas, independentemente do tamanho dos dados.
GABARITO
1. c
2. e
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Algoritmos de Busca IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ALGORITMOS DE BUSCA IV
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Algoritmos de Busca IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A cada passo, garante-se que nenhuma outra parte da árvore contém a chave
sendo buscada.
O procedimento para quando:
• O nó com v é encontrado;
• Senão, chega-se a NULL.
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Algoritmos de Busca IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Essa busca é um pouco parecida com a busca binária, no entanto existe uma caracte-
rística interessante: inserir elementos na árvore é mais rápido do que inserir em uma lista
ordenada e manter sua ordenação.
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Algoritmos de Busca IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
10m
A remoção de nó com um filho é realizada excluindo o nó pai. Nesse caso, o nó filho sobe
para a posição do pai.
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Algoritmos de Busca IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O tempo necessário para pesquisar em uma árvore de busca binária varia entre O(n) e
O(log n), dependendo da estrutura da árvore. Lembre-se de que O(n) é o custo computacio-
nal da busca sequencial, por outro lado, O(log n) é o tempo da busca binária. É importante
notar que a busca pode ser mais ou menos eficiente a depender da estrutura da árvore.
Se os registros forem inseridos em ordem classificada, a árvore resultante conterá todas
as ligações esquerdas (ou direitas) nulas, de modo que a busca da árvore se reduzirá a uma
busca sequencial.
15m
Entretanto, se os registros forem inseridos de modo a ser alcançada uma árvore balan-
ceada, aproximadamente log n comparações serão suficientes para recuperar um elemento.
DIRETO DO CONCURSO
1. (2010/CESPE/BANCO DA AMAZÔNIA/TECNOLOGIA DA INFORMAÇÃO/ANÁLISE DE
SISTEMAS) Em uma árvore binária de busca, como em toda árvore binária, todos os
nós têm grau máximo igual a 2. Entretanto, nem toda árvore binária pode ser conside-
rada uma árvore binária de busca.
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Algoritmos de Busca IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
Uma árvore binária é uma estrutura de dados de árvore na qual cada nó tem no máximo
dois filhos, chamados de filho esquerdo e filho direito.
Árvore Binária de Buscas é construída de tal forma que, para cada nó:
É necessário lembrar que nem toda árvore binária pode ser considerada uma árvore biná-
ria de busca.
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Algoritmos de Busca IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A estrutura de pilha é semelhante a uma pilha de pratos, em que o último elemento inserido
é o primeiro a ser retirado.
Em relação à eficiência das operações de árvore de busca binária, o tempo necessário
para pesquisar em uma árvore de busca binária varia entre 0(n) e O(log n), dependendo
da estrutura da árvore.
Se os registros forem inseridos em ordem classificada, a árvore resultante conterá todas as
ligações esquerdas (ou direitas) nulas, de modo que a busca da árvore se reduzirá a uma
busca sequencial.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Algoritmos de Busca IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Entretanto, se os registros forem inseridos de modo a ser alcançada uma árvore balance-
ada, aproximadamente log n comparações serão suficientes para recuperar um elemento.
GABARITO
1. C
2. c
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ALGORITMOS DE ORDENAÇÃO I
Referência
Introdução
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Termos importantes
• Ordem crescente: diz-se que uma sequência de valores está em ordem crescente se
o elemento sucessivo for maior que o anterior. Por exemplo, 1, 3, 4, 6, 8, 9 estão em
ordem crescente, pois cada elemento seguinte é maior que o elemento anterior;
• Ordem decrescente: diz-se que uma sequência de valores está em ordem decres-
cente se o elemento sucessivo for menor que o atual. Por exemplo, 9, 8, 6, 4, 3, 1 estão
em ordem decrescente, pois cada elemento seguinte é menor que o elemento anterior;
• Ordem não crescente: diz-se que uma sequência de valores está em ordem não
crescente, se o elemento sucessivo for menor ou igual ao seu elemento anterior na
sequência. Essa ordem ocorre quando a sequência contém valores duplicados. Por
exemplo, 9, 8, 6, 3, 3, 1 estão em ordem não crescente;
• Ordem não decrescente: diz-se que uma sequência de valores está em ordem não
decrescente se o elemento sucessivo for maior ou igual ao seu elemento anterior na
sequência. Essa ordem ocorre quando a sequência contém valores duplicados. Por
exemplo, 1, 3, 3, 6, 8, 9 estão em ordem não decrescente.
15m
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Esse algoritmo não é adequado para grandes conjuntos de dados, pois sua complexi-
dade média e no pior caso é de Ο(n²) em que n é o número de itens.
Note, no exemplo acima: na lista, 14 < 33, mudando o valor comparativo. No segundo
passo, 33 não é menor do que 27, portanto, faz-se a troca. Em seguida, 27 é menor do que
33, repetindo o valor.
O valor de 33 < 35, o que está ordenado. No caos de 35 por 10, é preciso realizar a troca,
mantendo o 35.
Por seu turno, nos quadrados verdes, os valores estão flutuando, começando desordena-
dos e partindo para as suas posições, flutuando.
Implementação do algoritmo:
20m
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A classificação de bolha tem uma complexidade média, no pior dos casos, de О(n2 ), em
que n é o número de itens que estão sendo classificados.
Os algoritmos de classificação mais práticos têm uma complexidade média ou pior, subs-
tancialmente melhor, geralmente O(n log n);
Mesmo outros algoritmos de classificação О (n²), como a classificação por inserção geral-
mente são mais rápidos que a classificação por bolhas e não são mais complexos;
Portanto, a classificação por bolhas não é um algoritmo de classificação prático.
A única vantagem significativa que a classificação de bolhas tem sobre a maioria dos
outros algoritmos, mesmo o quick sort, mas não a inserção, é a capacidade de detectar se a
lista é classificada com eficiência é incorporada ao algoritmo.
Quando a lista já está classificada (melhor caso), a complexidade da classificação de
bolhas é apenas O(n).
Por outro lado, a maioria dos outros algoritmos, mesmo aqueles com melhor complexi-
dade de caso médio, executam todo o processo de classificação no conjunto e, portanto, são
mais complexos;
No entanto, a classificação por inserção não apenas compartilha essa vantagem, mas
também apresenta um desempenho melhor.
A classificação de bolhas deve ser evitada no caso de grandes coleções.
Não será eficiente no caso de uma coleção com ordem inversa;
DIRETO DO CONCURSO
1. (CESGRANRIO/TRANSPETRO/ANALISTA DE SISTEMAS JÚNIOR/2011) O algoritmo
Bubble Sort é popular, mesmo que ineficiente. Usando-se esse algoritmo para ordenar
uma tabela, alocada sequencialmente, em ordem crescente contendo os números [5, 4,
1, 3, 2] serão feitas:
a. 10 comparações e 8 trocas
b. 10 comparações e 9 trocas
c. 10 comparações e 10 trocas
d. 16 comparações e 9 trocas
e. 16 comparações e 10 trocas
ANOTAÇÕES
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
25m COMENTÁRIO
Abaixo, a cada traço amarelo (com conjunto de números) há uma troca, apresentando o C
como comparação e o T como troca.
www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
Bubble Sort – Desempenho
A classificação de bolha tem uma complexidade média, no pior dos casos, de О(n²), em
que n é o número de itens que estão sendo classificados.
Os algoritmos de classificação mais práticos têm uma complexidade média ou pior, subs-
tancialmente melhor, geralmente O (n log n).
Mesmo outros algoritmos de classificação О (n²), como a classificação por inserção, geral-
mente são mais rápidos que a classificação por bolhas e não são mais complexos. Portan-
to, a classificação por bolhas não é um algoritmo de classificação prático;
GABARITO
1. a
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ALGORITMOS DE ORDENAÇÃO II
ALGORITMOS DE ORDENAÇÃO
São métodos para organizar coisas. Ex.: métodos para organizar as cartas de um baralho
bagunçado. Cada uma das maneiras de organizar as cartas é um algoritmo diferente.
Funcionamento
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
5m
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Algoritmo
FUNÇÃO INSERTION_SORT (A[], tamanho)
VARIÁVEIS i, j, eleito
PARA i <- 1 ATÉ (tamanho-1) FAÇA
eleito <- A[i];
j <- i-1;
ENQUANTO ((j>=0) E (eleito < A[j])) FAÇA
A[j+1]:= A[j];
j:=j-1;
FIM_ENQUANTO
A[j+1] <- eleito;
FIM_PARA
FIM
Implementação em C
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
Ordenação por Inserção
À medida que a sub-lista ordenada anda em direção à direita, ela captura cada elemento
e o coloca na posição correta da lista. Esse é o principal conceito que você deve entender.
10m
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Esse algoritmo não é adequado para grandes conjuntos de dados, pois suas complexida-
des média e pior dos casos é de Ο(n²), onde n é o número de itens;
Funcionamento
Perceba que essa lista cresce em direção à direita, até tomar conta de todo o vetor, no
entanto, sem modificação. Ou seja, ela aumenta da esquerda para a direita, selecionando o
menor elemento que esteja à direita.
A Insertion Sort pegava o próximo elemento e o inseria na posição correta. O Selection
Sort seleciona o menor elemento na sub-lista desordenada e o coloca como o maior ele-
mento da sub-lista ordenada.
ANOTAÇÕES
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Implementação em C
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. CESGRANRIO/PETROBRAS/ANALISTA DE SISTEMAS JÚNIOR/PROCESSOS DE
NEGÓCIO/2018) Um programador construiu uma função para ordenar vetores de intei-
ros por meio do algoritmo de ordenação por inserção (insertion sort). A versão iterativa
desse algoritmo possui dois loops aninhados. Suponha que esse programador tenha
inserido, imediatamente antes do incremento da variável de controle do loop mais exter-
no, uma chamada de uma função para percorrer e exibir o conteúdo do vetor que está
sendo ordenado. O trecho de código a seguir ilustra como essa chamada é feita.
for (int i = 1; i < vetor.length; i++){
/* Os demais comandos que implementam o algoritmo de ordenação por inserção de-
vem substituir essas linhas com comentários
*/
exibeVetor(vetor);
}
A Figura abaixo exibe o vetor que foi passado como parâmetro em uma chamada da
função de ordenação.
78 12 35 1 17 4 43 11 17 1
COMENTÁRIO
i=0 78 12 35 1 17 4 43 11 17 1
i=1 12 78 35 1 17 4 43 11 17 1
i=2 12 35 78 1 17 4 43 11 17 1
ANOTAÇÕES
www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
i=3 1 12 35 78 17 4 43 11 17 1
20m
COMENTÁRIO
Implementação em C
void selection_sort(int num[], int tam) {
int i, j, min, aux;
for (i = 0; i < (tam-1); i++) {
min = i;
for (j = (i+1); j < tam; j++) {
if(num[j] < num[min])
min = j;
}
ANOTAÇÕES
www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
if (num[i]!= num[min]) {
aux = num[i];
num[i] = num[min];
num[min] = aux;
}
}
}
COMENTÁRIO
Por alguma razão desconhecida, a banca começou a fazer a ordenação da direita para
esquerda (do fim para o começo), o que não é muito comum nesse algoritmo.
P0 (15,11,16,18,23,5,10,22,21,12)
P1 (15,11,16,18,12,5,10,22,21,23)
P2 (15,11,16,18,12,5,10,21,22,23)
P3 (15,11,16,18,12,5,10,21,22,23)
P4 (15,11,16,10,12,5,18,21,22,23)
P5 (15,11,5,10,12,16,18,21,22,23)
GABARITO
1. d
2. a
3. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
www.grancursosonline.com.br 9
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Funcionamento
A lista é dividida no meio. Em seguida, cada uma das sub-listas é dividida no meio, até
chegar aos elementos.
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Cada uma das listas que representa os elementos atômicos é uma lista ordenada.
5m
Imagine que há duas listas de números ou duas pilhas de cartas ordenadas (viradas para
cima). Como gerar uma pilha única das duas ordenadas? Por meio da intercalação: você
deve pegar as duas pilhas de maneira ordenada. Nesse caso, a terceira pilha também estará
ordenada. Para que isso dê certo, as duas pilhas devem estar ordenadas.
Algoritmo
01. mergesort(A[0...n - 1], inicio, fim)
02. | se(inicio < fim)
03. | | meio ← (inicio + fim) / 2 //calcula o meio
04. | | mergesort(A, inicio, meio) //ordena o subvetor esquerdo 05. | | mergesort(A, meio +
1, fim) //ordena o subvetor direito
06. | | merge(A, inicio, meio, fim) //funde os subvetores esquerdo e direito
07. | fim_se
08. fim_mergesort
Além disso, observe:
01. merge(A[0...n - 1], inicio, meio, fim)
02. | tamEsq ← meio - inicio + 1 //tamanho do subvetor esquerdo
03. | tamDir ← fim - meio //tamanho do subvetor direito 04. | inicializar vetor Esq[0...
tamEsq - 1] 05. | inicializar vetor Dir[0...tamDir - 1]
ANOTAÇÕES
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Implementação em C
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
comAux++;
com2++;
}
// Move os elementos de volta para o vetor original
for(comAux = comeco; comAux <= fim; comAux++){
vetor[comAux] = vetAux[comAux-comeco];
}
free(vetAux);
}
Essa ordenação não é considera in-place, isto é, para conseguir fazer a ordenação, é
preciso mais memória.
O Merge Sort é mais performático, porém gasta mais memória. Além disso, a recursivi-
dade também causa grande consumo de memória.
Ordenação Shell
É um algoritmo de classificação altamente eficiente e baseia-se no algoritmo de classi-
ficação de inserção. Esse algoritmo evita grandes mudanças, como no caso da inserção,
se o valor menor estiver na extrema direita e precisar ser movido para a extrema esquerda.
Ocorre que ele usa a ordenação por inserção em elementos amplamente espaçados, pri-
meiro para classificá-los e depois classifica os elementos menos espaçados. Ademais, ele é
bastante eficiente para conjuntos de dados de tamanho médio, pois sua complexidade média
e o pior dos casos depende da sequência de intervalos:
ANOTAÇÕES
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O(N1.2) para a sequência 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023;
O(N(log2N)²) para a sequência 1, 2, 3, 4, 6, 9, 8, 12, 18, 27, 16, 24, 36, 54, 81.
15m
Essa ordenação não tem um custo O(N) bem definido. No caso da Shell Sort, o seu custo
não é bem definido, o qual depende da característica da lista. O custo pode ser muito alto
ou muito baixo. Nesse contexto, essa ordenação pode não ser muito interessante em alguns
casos, pois, se seu custo varia tanto, não se sabe quanto tempo ela durará exatamente.
VANTAGENS E DESVANTAGENS
Vantagens:
• Shell sort é uma ótima opção para arquivos de tamanho moderado;
• Sua implementação é simples e requer uma quantidade de código pequena.
Desvantagens:
• O tempo de execução do algoritmo é sensível à ordem inicial do arquivo;
• O método não é estável.
Funcionamento
Intervalo de 4
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Intervalo de 1
www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Implementação em C
DIRETO DO CONCURSO
1 (CCV-UFC/UFC/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO/2019) Para realizar a
ordenação de um vetor de inteiros contendo n números, foi utilizado um algoritmo de ordena-
ção baseado na estratégia de dividir para conquistar e na divisão e ordenação recursiva das
partes do vetor, obtendo um tempo de execução O(n log n). Qual das opções abaixo contém
20m
o algoritmo de ordenação descrito?
a) Shell Sort
b) Quick Sort
c) Merge Sort
d) Bucket Sort
e) Insertion Sort
COMENTÁRIO
Existem vários métodos que são do tipo “dividir para conquistar”, no entanto, o mais emble-
mático é o algoritmo de Merge Sort.
• A ordenação por intercalação é uma técnica de classificação baseada na técnica de
dividir e conquistar;
ANOTAÇÕES
www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
a) Merge sort
b) Insertion sort
c) Bubble sort
d) Quick sort
e) Selection sort
COMENTÁRIO
O insertion sort, o bubble sort e o selection sort são bem parecidos; eles possuem custos
muito parecidos: O(N²)
Uma característica do Merge Sort é a seguinte:
• A pior complexidade do tempo sendo (n log n).
GABARITO
1. c
2. a
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 9
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ALGORITMOS DE ORDENAÇÃO IV
QUICKSORT
Algoritmo
Obs.: percebe-se que ocorre chamada recursiva. Há, ainda, custo de memória adicional.
ANOTAÇÕES
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Implementação em C
Obs.: o Quicksort é um algoritmo rápido e muito eficiente, sendo utilizado em casos reais.
HEAPSORT
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Heap Binário
10m
Inicialmente, é necessário definir uma árvore binária completa. Uma árvore binária com-
pleta é uma árvore binária na qual todos os níveis, exceto possivelmente o último, são com-
pletamente preenchidos e todos os nós ficam o mais à esquerda possível.
Um Heap Binário é uma Árvore Binária Completa, na qual os itens são armazenados em
uma ordem especial, de forma que o valor em um nó pai seja maior (ou menor) que os valo-
res em seus dois nós filhos.
O primeiro é chamado como heap máximo e o último é chamado heap mínimo. O heap
pode ser representado por árvore ou vetor binário. Como uma pilha binária é uma árvore
binária completa, ela pode ser facilmente representada, pois o vetor e a representação base-
ada em vetores são eficientes em termos de espaço.
Se o nó pai estiver armazenado no índice I, o filho esquerdo poderá ser calculado em 2 *
I + 1 e o filho direito em 2 * I + 2 (assumindo que a indexação comece em 0).
COMPLEXIDADE
Complexidade O(n log n) no pior e médio caso. Mesmo tendo a mesma complexidade no
caso médio que o QuickSort, o HeapSort acaba sendo mais lento que algumas boas imple-
mentações do QuickSort. Porém, além de ser mais rápido no pior caso que o QuickSort,
necessita de menos memória para executar.
QuickSort necessita de um vetor O(log n) para guardar as estruturas enquanto o Heap-
Sort não necessita de um vetor auxiliar.
ANOTAÇÕES
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Algoritmo
• Dado um vetor V de n elementos, transformar o vetor em um heap;
• Pegar a posição V[1] (ou seja, o maior elemento) e trocar de posição com V[max];
• Repetir o processo com um array formado pelos elementos V[1],..., V[n-1].
Implementação em C
15m
DIRETO DO CONCURSO
1. (2011/CESGRANRIO/PETROBRAS/ANALISTA DE SISTEMAS JÚNIOR – ENGENHA-
RIA DE SOFTWARE) A ordenação é um problema muito importante para os desen-
volvedores de software. Para implementá-la, existem vários algoritmos que já foram
amplamente estudados, como o BubbleSort, o QuickSort e o MergeSort. Uma das ca-
racterísticas estudadas desses algoritmos é o tempo de execução, que, usualmente, é
medido através da notação O (Big-Oh). Sobre esses conceitos, considere as afirmati-
vas abaixo.
ANOTAÇÕES
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
I – O tempo de pior caso do algoritmo QuickSort é de ordem menor que o tempo médio
do algoritmo Bubblesort.
II – O tempo médio do QuickSort é O(n log2n), pois ele usa como estrutura básica uma
árvore de prioridades.
III – O tempo médio do QuickSort é de ordem igual ao tempo médio do MergeSort.
COMENTÁRIO
Para responder essa questão é importante observar a seguinte tabela comparativa:

ANOTAÇÕES
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
II – ( ) Neste método, são usados, inicialmente, os elementos da lista que são inseridos
em um heap binário crescente. Em seguida, são feitas sucessivas remoções do menor
elemento do heap, colocando os elementos removidos do heap de volta na lista.
III – ( ) Neste método, a lista é dividida em duas metades. Essas metades são ordenadas
recursivamente e depois são intercaladas. Para tanto, faz-se uso das variáveis i e j
para percorrer a metade esquerda e a metade direita, respectivamente. Em cada ite-
ração, compara-se o elemento na posição i com o elemento na posição j. O menor
deles é copiado para um vetor auxiliar. Esse procedimento é repetido até que uma
das duas metades tenha sido totalmente copiada para o vetor auxiliar.
IV – ( ) Neste método, os elementos da lista são movidos para as posições adequadas
de forma contínua. Se um elemento está inicialmente numa posição i e, para que a
lista fique ordenada, ele deve ocupar a posição j, então ele terá que passar por todas
as posições entre i e j. Em cada iteração do método, percorre-se a lista a partir de
seu início, comparando cada elemento com seu sucessor, trocando-os de posição se
houver necessidade.
V – ( ) Neste método, a lista é dividida em parte esquerda e parte direita, sendo que
os elementos da parte esquerda são todos menores do que os elementos da parte
direita. Em seguida, as duas partes são ordenadas recursivamente.
VI – ( ) Neste método, considera-se que a lista está dividida em parte esquerda, já orde-
nada, e parte direita, em possível desordem. Além disso, os elementos da parte
esquerda são todos menores ou iguais aos elementos da parte direita. Cada iteração
consiste em escolher o menor elemento da parte direita (pivô) e trocá-lo com o pri-
meiro elemento da parte direita. Com isso, a parte esquerda aumenta, pois passa a
incluir o pivô, e a parte direita diminui.
VII – ( ) Neste método, considera-se que a lista está dividida em parte esquerda, já orde-
nada, e parte direita, em possível desordem. Inicialmente, a parte esquerda contém
apenas o primeiro elemento da lista. Cada iteração consiste em colocar o primeiro
elemento da parte direita (pivô) na posição adequada da parte esquerda, de modo
que a parte esquerda continue ordenada.
www.grancursosonline.com.br 7
TECNOLOGIA DA INFORMAÇÃO
Algoritmos de Ordenação IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
I – Shellsort.
II – Heapsort.
III – Mergesort.
IV – Bubblesort.
V – Quicksort.
VI – Selectsort.
VII – Insertsort.
GABARITO
1. c
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
É interessante aprender este tema até mesmo antes de aprender uma linguagem orien-
tada a objetos. Na aula, serão dados exemplos no código JAVA, porém, esses conceitos se
aplicam a qualquer linguagem.
Bibliografia
https://docs.oracle.com/javase/tutorial/java/concepts/
Como a Oracle é uma fonte oficial, é importante o aluno se atentar para a documentação,
pois muitas provas são elaboradas com base nesse conteúdo.
Introdução
"Programação Orientada a Objetos (também conhecida pela sua sigla POO) é um modelo
de análise, projeto e programação de software baseado na composição e interação entre
diversas unidades chamadas de objetos". Em outras palavras, se refere a todas as camadas
de desenvolvimento do software.
As linguagens de baixo nível possuem poucos modelos, porém, com o passar do tempo,
foram sendo criados modelos para que seja possível representar o problema dentro do sis-
tema computacional.
5m
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O que é um objeto?
• Os objetos são fundamentais para entender a tecnologia orientada a objetos;
• Objetos do mundo real compartilham duas características: todos eles têm estado e
comportamento.
O carro, por exemplo, possui um estado em que é possível medir a quantidade de com-
bustível no tanque, a velocidade, quantidade de passageiros etc., e para interagir com esse
estado, haverá funções, chamadas de métodos do objeto. Para alterar a quantidade de com-
bustível no tanque, o método é abastecer o carro, e a medida que o carro se locomover, o
nível de combustível será reduzido. Nesse sentido, a cor, por exemplo, consiste em uma pro-
priedade constante do veículo, pois não é possível alterar.
Por exemplo, sobre um cliente, é possível ter o nome, CPF e demais dados, o que já dá
início à modelagem daquele cliente.
ANOTAÇÕES
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Qualquer objeto que será analisado terá campos (estados) e métodos (comportamentos).
Eles estão localizados no centro, pois normalmente não se alteram, a operação dos objetos
ocorre por meio dos métodos, que assim irão refletir em alterações nos campos.
Por exemplo: batimento cardíaco.
Objeto é uma pessoa e há os batimentos cardíacos por minuto. Não é possível simples-
mente ordenar que a pessoa acelere os seus batimentos, mas isso pode ser ocasionado por
exercícios físicos.
Desse modo, em geral, se altera a propriedade de algum objeto através de algum método.
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Benefícios
• Modularidade: o código-fonte de um objeto pode ser escrito e mantido independente-
mente do código-fonte de outros objetos;
Por exemplo, é como se a bicicleta tivesse duas alavancas para troca de marcha. Eventu-
almente, serão gerados problemas. No começo dos desenvolvimento de softwares, era isso
que ocorria, havia várias propriedades distribuídas e diversos métodos poderiam alterá-las
diretamente.
Quando foram divididos em modos mais fechados, percebeu-se mais controle sobre as
alterações, logo, uma melhora.
Por exemplo, a troca de marcha da bicicleta possui um processo para ocorrer, e se tem
somente um método para que isso seja realizado. Dessa forma, praticamente não se sabe
diretamente os procedimentos de funcionamento, porém, se sabe que as marchas estão
sendo alteradas.
Como os sistemas ficaram maiores, com muitas linhas de códigos, é importante que seja
possível reaproveitar esses códigos desenvolvidos.
15m
Por exemplo: transferir um módulo utilitário que calcula CPF de um programa para outro.
Esse aspecto se assemelha a peças de computadores, por exemplo, que são passiveis
de substituição.
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Classe
• Muitos objetos podem ser do mesmo tipo;
– Por exemplo: vários carros da mesma marca e modelo.
• Podem existir milhares de outras bicicletas, todas da mesma marca e modelo. Cada
bicicleta foi construída a partir do mesmo conjunto de plantas e, portanto, contém os
mesmos componentes;
• Em termos orientados a objetos, dizemos que sua bicicleta é uma instância da classe
de objetos conhecidos como bicicletas;
• Uma classe é o plano a partir do qual objetos individuais são criados;
Outro exemplo é pensar na classe como uma forma de bolo, em que são feitos vários
bolos com o mesmo formato.
Em suma, a classe é como se fosse a forma dos objetos, enquanto e o bolo em si, isto é,
o objeto, é a instância.
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Interface
• Os objetos definem sua interação com o mundo externo por meio dos métodos
que expõem;
– Por exemplo: frear ou acelerar a bicicleta.
• Métodos formam a interface do objeto com o mundo exterior;
• A implementação de uma interface permite que uma classe se torne mais formal sobre
o comportamento que ela promete fornecer;
• Interfaces formam um contrato entre a classe e o mundo exterior, e este contrato é
aplicado em tempo de compilação pelo compilador;
Aqui, há uma interface de bicicletas, com vários métodos: mudar a cadência, marcha,
acelerar e aplicar freios. Não existe uma explicação de como a implementação deve ser feita,
como numa marca de carros, em que há uma interface de carros apesar das variações.
O carro, nesse caso, é quase como uma interface, o Toyota Corolla, por exemplo, se
torna uma classe de carros, e o Toyota Corolla visto na rua se torna uma instância da classe.
A interface está num nível superior, não existe implementação, como cada classe de carro,
em que se sabe que ele pode acelerar e frear, contudo, cada um possuirá um mecanismo
específico.
ANOTAÇÕES
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Desse modo, uma classe pode ser uma implementação de uma interface, sendo neces-
sário realizar tudo o que ordena a interface e funções adicionais. Os carros, por exemplo,
precisam frear e acelerar, e alguns possuem a câmera de ré e sensor de estacionamento,
elementos adicionais.
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
ANOTAÇÕES
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Encapsulamento
• O ato de empacotar ao mesmo tempo dados e objetos é denominado encapsulamento;
• O objeto esconde seus dados de outros objetos e permite que os dados sejam aces-
sados por intermédio de seus próprios métodos;
• Isso é chamado de ocultação de informações (information hiding);
Obs. 1: Quando o objeto não permite que as suas propriedades possam ser alteradas dire-
tamente, a não ser através de métodos pré-definidos, ele está ocultando ou encap-
sulando a informação.
Obs. 2: As linguagens, em geral, não proíbem que se tenha acesso à determinada proprie-
dade. A priori, ela pode ser alterada, o que é chamado de propriedade pública. Entre-
tanto, principalmente nas linguagens Java, isso não é considerado uma boa prática,
porque desfavorece o processo de encapsulamento.
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Uma classe que possui métodos que encapsulam variáveis (não é possível alterar
diretamente as variáveis a não ser que seja através desses métodos).
Interface X Herança:
• A Interface não possui uma implementação, apenas um conceito (ex.: o conceito de
um carro);
• A Herança possui uma classe básica (como se fosse uma fôrma). A título de demons-
tração, podemos utilizar o exemplo de um carro. Determinado carro possui um modelo/
classe básica, e também outros modelos diferentes, os quais possuem algumas das
características do modelo básico e outras a mais. Ou seja, esses modelos herdam
tanto a implementação quanto algumas características do modelo básico, e ainda
acrescentam coisas a mais (o modelo básico já é uma implementação).
ANOTAÇÕES
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Exemplificação gráfica:
Código:
class MountainBike extends Bicycle {
// novos campos e métodos definindo
// uma mountain bike irão aqui
}
Polimorfismo
• Uma operação de um objeto qualquer pode assumir vários comportamentos depen-
dendo da chamada recebida, tratando e devolvendo respostas ao chamador;
• Poli = Muitos; Morphos = Formas;
• Polimorfismo = "múltiplas formas";
• Portanto, o polimorfismo ocorre quando um objeto tem um comportamento diferente
para uma mesma ação.
ANOTAÇÕES
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Exemplo 1: Todo carro possui o método “buzinar”. Em qualquer carro que entrarmos,
podemos acionar esse método e, ainda, a forma de acionarmos o método “buzinar”, ou seja,
a interface, também será a mesma. Entretanto, o som emitido será diferente, conforme o
modelo do carro.
Exemplo 2: Imagine que temos uma coleção de animais. Todos são animais, todos pos-
suem o método “falar”, e todos possuem uma interface que, ao ser acionada, emitirá o som
da fala. Porém, uma vez que pertencem a classes de animais diferentes, esse som emitido
também será diferente.
10m
TIPOS DE ASSOCIAÇÃO
Associação
• A associação de classes indica quando uma classe tem um tipo de relacionamento
"tem um" com outra classe como, por exemplo, uma pessoa tem um carro e isso indica
que a classe Pessoa tem uma associação com a classe Carro (o relacionamento é
lateral, ou seja, possuem uma associação, mas a existência de um independe da
existência do outro);
ANOTAÇÕES
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Esse tipo de relacionamento entre classes é importante, porque define como as clas-
ses (propriedades) interagem entre elas nas aplicações.
Agregação
• Indica que uma das classes do relacionamento é uma parte ou está contida em outra
classe (ou seja, essa parte que está contida não existe sem a outra);
• Sendo assim, pode-se dizer que seria uma união de classes.
Obs.: A venda não existe sem comprador, nem sem o vendedor, nem sem o produto, pois
a venda é o resultado da união dessas classes.
15m
ANOTAÇÕES
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Composição
• Um relacionamento com características todo por parte onde existe um entendimento
entre todas partes desta forma, se o todo não existir, as partes também não existirão;
• Um exemplo de composição é o pé: Um pé é composto por dedos. Os dedos compõem
o pé. Não há lógica em existir um dedo sem o pé, porém pode-se ter um pé sem um
ou mais dedos.
GRAUS DE DEPENDÊNCIA
Coesão
• Coesão é a indicação do relacionamento dentro do módulo;
• Coesão mostra a força funcional relativa do módulo;
• A coesão é um grau (qualidade) para o qual um componente/módulo se concentra em
uma única coisa;
• Ao projetar, você deve se esforçar para obter alta coesão, ou seja, um componente/
módulo coeso focado em uma única tarefa com pouca interação com outros módulos
do sistema;
• Coesão é o tipo de extensão natural de ocultação de dados;
• A coesão é um conceito intra-módulo.
ANOTAÇÕES
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Acoplamento
• Acoplamento é a indicação das relações entre os módulos;
• O acoplamento mostra a independência relativa entre os módulos;
• O acoplamento é um grau ao qual um componente/módulo é conectado aos
outros módulos;
• Ao projetar, você deve se esforçar para ter um baixo acoplamento, ou seja, a depen-
dência entre os módulos deve ser menor;
• A criação de campos privados, métodos privados e classes não públicas fornece um
acoplamento flexível;
• O acoplamento é um conceito inter-módulo.
20m
DIRETO DO CONCURSO
1. (QUADRIX/CRM-PR/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO/2018) Acerca da
análise orientada a objetos, julgue o item subsequente. Com o polimorfismo, é possí-
vel que uma operação seja implementada, em uma classe-filha, de forma diferente da
classe-pai.
COMENTÁRIO
Vide conceito de poliformismo desta aula.
ANOTAÇÕES
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Conceitos de Orientação a Objetos II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
Vide conceito de herança desta aula.
GABARITO
1. C
2. C
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
TESTES DE SOFTWARE
As disciplinas de testes podem ser divididas em uma parte mais teórica e outra mais prá-
tica. Para a teórica, é importante decorar alguns conceitos.
Bibliografia
Esses livros têm tradução para o português, não versam somente sobre testes e as
bancas geralmente tiram as questões conceituais a partir dessa bibliografia.
Obs.: é importante saber a diferença entre verificação e validação, que são conceitos bem
parecidos, mas não iguais. Processos V&V = testes.
1. Atende aos requisitos comerciais e técnicos que orientam seu design e desen-
volvimento;
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
software ou faz-se a conta na mão, para não ter perigo de ter algum erro e se verifica: 2+2 =
4. Esse é um dado de teste, uma massa de teste.
Faz-se um software que simula a entrada do 2, depois se pressiona o botão + e se inclui
o outro 2 na calculadora do Windows e tenta-se verificar se a saída daquele programa real-
mente correspondeu ao valor que se tinha armazenado.
O teste do software será outro software, dentro do mesmo software ou uma parte do sof-
tware, um módulo do software que executará funções pré-determinadas com valores pré-de-
terminados e esperados e irá comparar se quando se executa o programa aqueles resultados
esperados serão os obtidos.
10m
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Em geral, os defeitos não são permitidos. Sempre que acontecem, devem ser corrigidos.
Verificação
Validação
Essa é uma parte um pouco mais difícil de ser automatizada ou de ter uma implementa-
ção, porque é um nível de abstração muito alto para ser testado automaticamente.
É um requisito do software: ele faz o que é esperado? Ele foi feito corretamente? O sof-
tware de calculadora é realmente uma calculadora? Não é um paintbrush do Windows?
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Defeito
Outro conceito muito importante: falha, defeito, erro, bug, que em geral, tem sido cobrado.
O defeito é um erro na codificação. Através da execução da fase de verificação e valida-
15m
ção (que é a fase de teste) pode-se verificar que há erro.
Conceitos Básicos
Erro (engano)
• Brecha em um componente ou sistema que pode fazer com que este falhe ao desem-
penhar sua função.
• Por erro ou engano, podemos inicializar variáveis de forma incorreta, acessar valores
inexistentes em estruturas de dados, realizar conversões entre tipos de dados incom-
patíveis, dentre outras, introduzindo assim, defeitos no código-fonte.
• Pensando na etapa de elicitação de requisitos, os defeitos são funcionalidades espe-
cificadas de forma incorreta ou incompleta, por exemplo.
Isso pode acontecer até na fase de elicitação de requisitos. Ocorreu um engano, uma
falha de entendimento e isso gerou um defeito, que já está codificado no software.
Curiosamente, esse defeito pode se apresentar ou não.
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Falha
Essas fases ou níveis, em geral, abrangem o escopo daquilo que está sendo testado.
Começa-se do menor escopo, que é o teste de unidade. Dependendo do nível (fase) do teste,
ele pode ser executado por uma ou outra equipe.
20m
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
É interessante que os testes mais avançados de integração sejam feitos por outras equi-
pes, pois na atividade do cotidiano, pode-se ficar cego pelos próprios defeitos, pelas próprias
falhas. Isso evita que se coloquem vícios.
Exemplo: ao se fazer um TCC, é importante entregar para uma outra pessoa fazer a revi-
são, pois olhou-se tanto o conteúdo que foi produzido que se fica míope, pois se acostumou
com aquele defeito. Com o software, ocorre a mesma coisa.
Um exemplo de vício é quando se sabe que uma caixa de texto não pode ter um valor
negativo e naturalmente não se digita nenhum valor negativo, pois já se sabe que na imple-
mentação isso não será aceito. Um testador externo vai justamente digitar um texto, um valor
negativo para tentar fazer o sistema quebrar.
O teste de unidade testa a menor parte do sistema. O método, a unidade, o menor pos-
sível e geralmente é automatizado e feito pelo próprio testador.
Teste de Integração
Teste de Sistema
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Teste de Aceitação
Aqui, é praticamente o final, para verificar se haverá aceitação por parte do usuário final.
Tipos de Testes
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Tipos de Testes
Dependendo do nível de teste, de seu tipo e do que será testado, haverá um escopo dife-
rente (obrigação de testar um ou outro elemento) pela equipe que for testar.
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Por isso é de caixa preta: simplesmente verá se quando se dá uma entrada, alguma coisa
acontece dentro do software e terá que ter uma saída específica.
• Tal tipo de teste é indicado para detectar erros de interface, de comportamento e/ou
desempenho, podendo ser aplicado em todas as fases de testes (unidade, integração,
sistema e aceitação).
• Uma dificuldade dessa técnica, por questões de tempo e recurso, é testar todas as
entradas possíveis.
Por ser uma técnica de caixa preta, na qual não se está vendo o código-fonte, talvez não
se saiba que há caminhos a serem percorridos e acaba-se por não testar esses caminhos.
www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O PULO DO GATO
Caixa preta e branca são temas muito recorrentes em provas.
Teste de Regressão
Exemplo: havia soma, multiplicação na calculadora. Incluiu-se raiz quadrada. Será que
todas as operações anteriores continuarão funcionando? Faz-se, então, um teste de regres-
são para se saber se nenhuma funcionalidade anterior foi quebrada.
• Consiste em aplicar, antes e depois da alteração, todos os testes que já foram aplica-
dos nas versões anteriores. Por ter essa natureza de repetição, torna-se imprescindí-
vel que seja adotada uma ferramenta de automação de testes. Esta técnica pode ser
bem aplicada nas fases de testes de unidade, de integração e de sistema.
Teste de Carga
• O teste de carga é uma técnica usada para avaliar os limites operacionais do software.
• Geralmente, as medições são tomadas com base na taxa de transferência de dados
da carga de trabalho e no tempo de resposta da transação.
• As variações na carga de trabalho normalmente incluem a emulação das cargas de
trabalho médias e máximas que ocorrem dentro de tolerâncias operacionais normais.
• A aplicação dessa técnica é indicada durante as fases de testes de integração e
de sistema.
É aplicada uma carga teste no sistema para que se possa verificar se o sistema terá per-
formance, se responderá em um tempo adequado.
ANOTAÇÕES
www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Teste de Estresse
Teste de Usabilidade
• O teste de usabilidade é uma técnica que visa avaliar o sistema do ponto de vista do
usuário final.
• Nesse teste vários fatores são levados em consideração, dentre eles: os fatores huma-
nos, a estética (as cores estão agradáveis?), os manuais, a facilidade de uso etc.
• Esses testes permitem identificar problemas de usabilidade e observar o comporta-
mento dos usuários durante a utilização do sistema, por isso são testes realizados na
fase de testes de aceitação.
Teste de Segurança
www.grancursosonline.com.br 12
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Existem várias técnicas que estão associadas a determinadas fases ou níveis de testes.
COMENTÁRIO
a) Teste de estresse;
Faz-se a regressão para verificar se não houve nenhuma quebra depois de se incluir algo.
GABARITO
1. C
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 13
DESENVOLVIMENTO DE SISTEMAS
Revisão de Código
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
REVISÃO DE CÓDIGO
Esse processo de revisão de código basicamente é um trabalho em conjunto, com mais
de um desenvolvedor, que vai analisar aquele código que foi escrito por um terceiro. Pode-se
fazer uma analogia a uma redação de jornal, por exemplo, em que um (a) repórter escreve
a matéria e a passa para um revisor, que marca o que deve ser alterado e devolve para tais
correções. Durante a escrita de código ocorre, portanto, um processo semelhante a esse.
O code review também é conhecido como peer code review, o que é diferenciado por
algumas bancas e bibliografias, enquanto por outras não. Basicamente, o peer review é de
algum lateral e o code review, quando ocorre essa diferenciação, é de analistas com mais
senioridade. Se fosse em um jornal, o peer review (lateral) seria algum colega do lado revisar
o texto e o code review seria um revisor de texto de fato.
Assim, os colegas programadores se reúnem de forma consciente para verificar se há
algum tipo de erro de código de uma ou outra pessoa, e isso tem se mostrado um processo
interessante que agiliza o processo de desenvolvimento de software como poucas práticas.
Existem algumas ferramentas de software para revisão de códigos por pares, mas é
importante entender que essa não é uma ferramenta, em si, sendo mais um processo, um
conceito de trabalhar. Abordar-se-á os modelos de revisão que podem ser feitos com o colega
ao lado ou através do software, que é a mais comum atualmente; quem trabalha em empresa
e tem um gitlab ou github, quando é feito um envio de código, existe um momento em que se
pode ir comentando o código do colega.
O software é escrito por seres humanos, assim como um texto de um jornal, sendo assim
sujeito a inúmeras falhas. Os desenvolvedores de software geralmente se acostumam e con-
fiam muito nas ferramentas de teste, que, por sua vez, também não são perfeitas. A revisão
de código, então, ajuda os desenvolvedores a entender também a base de código e a apren-
der novas tecnologias e técnicas para aumentar suas habilidades.
5m
As revisões, além de contribuírem bastante com o compartilhamento de conhecimento
dentro da equipe, também podem economizar dinheiro, principalmente por detectar os bugs.
Embora essas sejam grandes preocupações no desenvolvimento de software, as revisões
de código também oferecem um retorno mais centrado no ser humano, que é incentivar os
programadores a conversar com os outros colegas, trocar experiências e conhecimento. Às
vezes, um colega resolve o problema de uma determinada forma e outro dá um feedback
dizendo, por exemplo, como ele poderia fazer, que determinada coisa pode dar um problema
de escalabilidade ou de concorrência etc.; principalmente quando é um analista júnior, mais
novato, ele pode não saber identificar o problema.
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Revisão de Código
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Desenvolvimento Ágil
A revisão de código se encaixa no desenvolvimento ágil, que é uma tendência hoje das
equipes de desenvolvimento; cada equipe pode se beneficiar bastante com esse processo,
10m
independentemente da metodologia de desenvolvimento.
A revisão de código também varia em quão minuciosa ela é. Por exemplo, quando se
trata de uma indústria aeronáutica ou espacial, essa revisão de código é extremamente minu-
ciosa, sendo cada linha de código analisada. No caso de softwares comerciais, por outro
lado, a revisão não é tão criteriosa assim.
É importante que a revisão de código seja descentralizada, ou seja, que não haja um
ponto único, apenas um colega que a faça, pois isso tornaria essa revisão mais morosa.
www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Revisão de Código
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Compartilhar Conhecimento
Melhores Estimativas
Uma estimativa é basicamente estimar o esforço que será necessário para desenvolver
aquele software. Em um ambiente sem revisão de código, em que não há compartilhamento
do conhecimento sobre a base de código, a estimativa é muito individual, de cada colega que
implementou.
Com a revisão de código, como outros colegas já compartilharam o conhecimento, existe
mais possibilidade de aquelas outras pessoas opinarem e terem uma previsão melhor. O revi-
sor compartilha esse conhecimento com o desenvolvedor original de toda a base de código,
então, mesmo havendo um revisor centralizado, ele saberá melhor como está o andamento
do projeto.
www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Revisão de Código
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Tópico de e-mail
Uma das primeiras maneiras de revisar um código, praticamente extinta hoje, é essa.
Assim que um determinado trecho de código está pronto para revisão, o arquivo é enviado
aos colegas apropriados por e-mail para que cada um deles revise assim que seu fluxo de
trabalho permitir.
Essa abordagem é bastante flexível e adaptável para as técnicas e equipes e permite que
várias pessoas debatam, mas pode acontecer de ficar um pouco enrolado, com discussões
a respeito de algum tópico do código que acabam desvirtuando um pouco.
Pair Programming
É aquela programação por pares, em que dois colegas trabalham em conjunto na mesma
base de código.
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Revisão de Código
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Como uma das características do Extreme Programming (XP), essa abordagem para
escrever software coloca os desenvolvedores lado a lado, trabalhando juntos no mesmo
código e, assim, verificando o trabalho uns dos outros à medida que avançam.
Essa técnica pode usar mais recursos em termos de tempo e de pessoal do que outros
métodos, o que a torna por vezes não ideal.
Quando o código estiver pronto, basta encontrar um colega qualificado para se sentar em
sua estação de trabalho (ou ir até a dele) e revisar seu código, enquanto explica a eles por
que o escreveu, da maneira que fez.
Essa é uma abordagem um pouco mais informal e leve, que não deixa rastreamento.
Essa é a maneira mais atual e, em geral, a mais recomendada. Com o surgimento do git,
principalmente do github e do gitlab, essas ferramentas têm um processo de pull request, que
consiste em enviar uma mudança para ser avaliada e introduzida na base de código, sendo
possível também inserir comentários, inclusive na linha de código. Essa é uma maneira
assíncrona, sem necessidade de parar o colega naquele momento, mas depende de se ter
uma ideia ou um gerenciamento de base de código para ser feita.
As ferramentas de software resolvem muitas das limitações das abordagens anteriores,
rastreando os comentários dos colegas e as soluções propostas para os defeitos em uma
sequência clara e coerente, permitindo que as revisões ocorram de forma assíncrona e não
local, emitindo notificações para o codificador original quando novas revisões chegam, e
mantendo todo o processo em andamento com eficiência, sem reuniões e sem que ninguém
precise sair de suas mesas para contribuir.
Acompanhando o Progresso
• As linhas de código (LOC) sob revisão devem ser inferiores a 200, não excedendo
400, pois qualquer coisa maior sobrecarrega os revisores e eles param de desco-
brir defeitos;
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Revisão de Código
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• O tempo total de revisão deve ser inferior a 50 minutos, não devendo exceder a 90
minutos, para evitar que se torne cansativo;
• Espere taxas de defeito em torno de 15 por hora.
Assim como a automação de teste se tornou cada vez mais sofisticada e a arma predo-
minante de escolha para equipes de teste, também parece provável que a revisão de código
por pares assistida por ferramenta, com o tempo, suplantará as outras formas “leves” como
a metodologia mais apropriada e inclusiva disponível.
25m
DIRETO DO CONCURSO
1. (FCC/TJ-PE/TÉCNICO JUDICIÁRIO/PROGRAMADOR DE COMPUTADOR/2012) São
práticas eficientes para revisão de código, EXCETO:
a. Revisar código por, no máximo, 90 min por vez.
b. Revisar até 500 linhas de código por hora.
c. Adotar revisões de código com auxílio de ferramentas.
d. Revisar até 1000 linhas de código por vez.
e. Decidir antecipadamente os objetivos do processo de revisão de código e como
medir sua efetividade.
COMENTÁRIO
Se o ideal é revisar o código por no máximo 90 minutos, e considerando a alternativa “b”,
que dispõe em 500 linhas de código por hora, em 90 minutos, então, seriam revisadas 750
linhas de código. Essa informação acaba conflitando com a da alternativa “d” e o bom sen-
so ajuda a responder, apesar de essas métricas variarem nas bibliografias.
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Revisão de Código
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
• A revisão não dificulta, e sim facilita a manutenção do código.
• Se tratando de um software aeronáutico, por exemplo, o esforço gasto para a execução
das etapas de revisão pode não ser tão pequeno.
• É possível haver um peer programming onde a revisão pode ser feita por colegas no mes-
mo nível de senioridade.
• A análise dinâmica é feita com o código em execução; a alternativa “e” se refere à análi-
se estática.
• De fato, se encontram mais problemas na fase inicial do ciclo de vida de um software, o
que evita a detecção no final. Quanto antes esses erros e problemas forem encontrados,
30m
menor será o custo de correção.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Revisão de Código
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GABARITO
1. d
2. a
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
DEVOPS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DEVOPS
Este é um tema atual, com menos de dez anos de história na TI; por isso, não há uma
bibliografia extremamente formal sobre o assunto. O assunto também não é tão formal. Isso
confere um pouco de dificuldade, pois não se sabe como as bancas vão abordar o tema nas
questões. É necessário estudar o tema, ver uma série de abordagens e entender o conceito
fundamental para ser possível tirar uma nota boa.
O símbolo acima é do DevOps. É o símbolo do infinito. É um ciclo infinito, em que há
planejamento, criação, verificação, empacotação, entrega, configuração, monitoração e volta
para o planejamento. Hoje em dia, fala-se muito de software desenvolvendo de forma cíclica,
e não naquele modelo de cascata (tudo planejado primeiro; depois, tudo construído; tudo
testado; tudo entregue), o qual tem uma série de deficiências e está sendo substituído gra-
dativamente pelo modelo cíclico incremental, no qual pequenas entregas vão sendo feitas e
testadas e o software vai recebendo ajustes conforme é desenvolvido.
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
DEVOPS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Referências
https://devops.com/
https://newrelic.com/devops/what-is-devops
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
DEVOPS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Introdução
Obs.: anteriormente (e ainda hoje), havia (há) uma separação muito nítida nas empresas
entre a equipe que desenvolve um software e a equipe que cuida da operação da
quele software. Essa divisão entre as equipes não é ideal. O DevOps tenta juntar
esses dois papeis em um papel ou colocar as pessoas mais juntas naquele software.
Obs.: o termo mais assertivo na literatura é a “cultura de DevOps”, pois ele vai além das
ferramentas. Apesar de existirem ferramentas, ele é mais relacionada a uma cultura
na empresa.
• “O DevOps representa uma mudança na cultura de TI, com foco na entrega rápida de
serviços de TI através da adoção de práticas ágeis e enxutas no contexto de uma
abordagem orientada ao sistema. O DevOps enfatiza as pessoas (e a cultura) e pro-
cura melhorar a colaboração entre as operações e as equipes de desenvolvimento.
As implementações do DevOps utilizam tecnologia - especialmente ferramentas de
automação que podem alavancar uma infraestrutura cada vez mais programável e
dinâmica da perspectiva do ciclo de vida.” Gartner
Obs.: com o DevOps, o desenvolvedor precisa se preocupar com todo ciclo de vida do sof-
tware, e não apenas com a parte de desenvolvimento.
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
DEVOPS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• É importante ressaltar que o significado do DevOps foi ampliado para ser um termo
genérico para os processos, cultura e mentalidade usados para reduzir o ciclo de vida
de desenvolvimento de software, usando iterações rápidas de feedback para fornecer
recursos, correções e atualizações com mais frequência.
Obs.: portanto, é o oposto daquele processo de cascata. É preciso se preocupar com o ciclo
mais amplo a fim de reduzir o ciclo de correção de software.
• Apesar do tom mítico de algumas das histórias sobre suas origens, o DevOps não foi
criado de uma só vez. Em vez disso, as sementes do DevOps foram plantadas há
muito tempo e foram cultivadas por especialistas em TI com visão de futuro em várias
disciplinas. Os dois precursores principais do DevOps são:
10m
- Gerenciamento de sistemas corporativos (ESM): muitas das pessoas envolvi-
das na definição inicial do DevOps eram administradores de sistema. Esses espe-
cialistas em operações trouxeram as principais práticas recomendadas do ESM
para o DevOps, incluindo gerenciamento de configuração, monitoramento do sis-
tema, provisionamento automatizado e a abordagem da cadeia de ferramentas;
- Desenvolvimento ágil: o DevOps pode ser interpretado como uma consequên-
cia do Agile – o desenvolvimento ágil de software prescreve uma estreita cola-
boração de clientes, gerenciamento de produtos, desenvolvedores e, às vezes,
controle de qualidade para preencher as lacunas e iterar rapidamente para um
produto melhor. O DevOps reconhece que a entrega de serviços e como o apli-
cativo e os sistemas interagem também são uma parte fundamental da proposta
de valor para o cliente e, portanto, a equipe de produto precisa incluir essas pre-
ocupações como um item de nível superior. Nesta perspectiva, o DevOps está
simplesmente estendendo os princípios do Agile além dos limites do código para
todo o serviço entregue.
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
DEVOPS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Por um lado, os usuários corporativos exigem mudanças – novos recursos, novos ser-
viços, novos fluxos de receita – o mais rápido possível.
• Ao mesmo tempo, eles também querem um sistema estável e livre de falhas e
interrupções.
• Isso cria um problema no qual as empresas sentem que precisam escolher entre entre-
gar mudanças rapidamente e lidar com um ambiente de produção instável ou manter
um ambiente estável, porém obsoleto.
• Nenhuma das opções é aceitável para os executivos da empresa. E nenhum dos dois
cenários permite que uma empresa forneça as melhores soluções possíveis para seus
clientes.
15m
• Os desenvolvedores estão de acordo em disponibilizar software cada vez mais rápido -
afinal, é isso que eles normalmente são contratados para realizar.
• A operação, por outro lado, sabe que mudanças rápidas, sem as devidas salvaguardas,
pode desestabilizar o sistema, o que vai diretamente contra o seu estatuto.
• O DevOps foi criado para resolver esse dilema, integrando todos os associados ao
desenvolvimento e implantação de software – usuários de negócios, desenvolvedores,
engenheiros de teste, engenheiros de segurança, administradores de sistemas entre
outros, em um único fluxo de trabalho altamente automatizado.
• O DevOps prevê um foco compartilhado: entrega rápida de software de alta qualidade
que atenda a todos os requisitos do usuário, mantendo a integridade e a estabilidade
de todo o sistema.
• Para que estes objetivos sejam atingidos, várias ações têm que ser tomadas:
- definir expectativas e prioridades;
- colaborar dentro e entre as equipes na solução de problemas;
- automatizar processos comuns e repetitivos para liberar tempo para trabalhos de
nível superior;
- integrar o feedback ao trabalho, medindo tudo o que é movido para a produção;
- compartilhar os dados com todos os envolvidos para promover uma cultura mais
eficaz de trabalhar bem em conjunto em diferentes habilidades e conhecimentos
especializados.
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
DEVOPS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• As empresas costumam falar sobre mudar para o DevOps, contratar SREs (System
Reliability Engineering) e se tornar mais ágeis, mas como esses termos se relacionam?
- Agile e Lean é como as equipes interagem, com ciclos de desenvolvimento curtos
e feedback rápido. O Agile se concentra na cultura e é independente de quais
ferramentas são usadas;
20m
Obs.: hoje em dia, foca-se mais em um ciclo curto, para que os problemas e os erros sejam
verificados de uma forma mais rápida.
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
DEVOPS
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: portanto, tanto do lado técnico para o lado humano quanto do lado humano para o
lado técnico, há o funcionamento do DevOps.
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
DevOps II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DEVOPS II
Devops é uma tema recente e, por isso, tem alguns desafios, principalmente relacionado
à falta de bilbiografia formal sobre o assunto, além de um banco de questões que não é
tão grande.
Percebe-se que ele está ligado a várias atividades e práticas atuais do mundo da tecno-
logia da informação. Não é apenas um processo técnico, mas também um processo humano.
Em geral, fala-se que o DevOps precisa partir do processo humano para chegar nas ferra-
mentas, e no contrário.
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
DevOps II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Colaboração
Automação
5m
Integração contínua
• Uma pedra angular do DevOps é a integração contínua (CI), uma técnica projetada e
nomeada por Grady Booch que mescla continuamente as atualizações de código-fonte
de todos os desenvolvedores de uma equipe em uma linha principal compartilhada.
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
DevOps II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Essa fusão contínua impede que a cópia local de um projeto de software de um desen-
volvedor vá muito longe, à medida que novos códigos são adicionados por outras pes-
soas, evitando conflitos catastróficos de mesclagem.
Obs.: quanto mais integrado o desenvolvimento, melhor será para apresentar os proble-
mas o mais rápido possível e evitar que esses problemas cresçam e tomem propor-
ções absurdas.
Teste contínuo
• O teste contínuo cria um sistema central de decisão que ajuda a avaliar o risco comer-
cial que cada aplicativo apresenta para sua organização.
• Aplicado de forma consistente, orienta as equipes de desenvolvimento para atender
às expectativas dos negócios e fornece visibilidade aos gerentes para tomar deci-
sões informadas sobre o trade-off, a fim de otimizar o valor comercial de um release
candidate.
10m
Entrega contínua
ATENÇÃO
É importante saber a diferença entre integração contínua e entrega contínua.
Obs.: uma estratégia para implantar o DevOps é olhar cada uma das disciplinas e começar
a implantá-las parcialmente.
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
DevOps II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Monitoramento contínuo
Obs.: é preciso monitorar o software para detectar a falha e conseguir fazer uma correção
o mais rápido possível.
Concluindo
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
DevOps II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (2018/CESPE/STJ/TÉCNICO JUDICIÁRIO/SUPORTE TÉCNICO) Julgue o item se-
guinte, a respeito de DevOps e das disposições constantes da NBR ISO/IEC 27002.
Apesar de ser um processo com a finalidade de desenvolver, entregar e operar um sof-
tware, o DevOps é incompatível com a aplicação de métodos ágeis como o Scrum ou,
ainda, com o uso de ferramentas que permitam visualizar os fluxos do processo.
COMENTÁRIO
É totalmente o contrário. O método ágil ajuda e faz parte do DevOps.
GABARITO
1. E
2. C
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GITFLOW
O que é o Gitflow?
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Em geral, o Gitflow pode ser utilizado em projetos com ciclo de lançamento agendado e
para a prática de DevOps com entrega contínua.
Como funciona
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• A ferramenta que auxilia a trabalhar com o Gitflow é o plugin chamado “git flow init”.
Esse plugin permitirá comandos mais simples.
• Por exemplo, ao dar o comando “$ git flow init”, ele inicializará o repositório e irá criar
uma branch chamada “main”, uma branch chamada “develop”, e irá incluir o pre-
fixo desejado.
• Para “feature branches”, é “feature/”; para “release branches”, “release/”; para “hotfix”,
“hotfix/” etc.
• É comum trabalhar com este plugin para diminuir a quantidade de comandos.
10m
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Ramificações de Recurso
• Cada recurso deve residir na sua própria ramificação. A ramificação será enviada para
o repositório central, entretanto, a orientação do Gitflow é que as ramificações partam
da “develop”.
• Isso porque outro profissional pode entregar algo na “develop” e, para outro profissio-
nal desenvolver, ele deve capturar o que está na branch de desenvolvimento.
• Portanto, as branches de recursos se originam da branch “develop”.
Para criar a “feature”, há duas opções: o comando “git checkout develop” ou “git flow fea-
ture start feature_branch”. Duas linhas de comando podem ser resumidas em somente uma.
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Quando um profissional terminar o código que está desenvolvendo, ele deve entregá-lo
na branch “develop”. Se não houver o plugin, é necessário voltar para “git checkout develop”
e fazer um “git merge feature_branch”; se houver plugin, utiliza-se o comando “git flow feature
finish feature_branch”.
Ramificações de lançamento
Uma vez que a ramificação de “develop” cria recursos suficientes para implantação, é
necessário bifurcar, fazer o check-out da branch “develop”, criar uma branch “release” e come-
çar o próximo ciclo de lançamento. Na branch de “release”, serão aplicados apenas alguns
“patches”. Ao finalizar, será feito um merge com a “master” e será iniciado o lançamento.
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Após o check-out do “develop” e da “release” – por exemplo, como “git checkout -b rele-
ase/0.1.0”, é feito comando “$ git flow release start 0.1.0”. Assim, inicia-se a branch “release”.
A “release” será implementada e poderá ser dado um check-out da branch “main” e feito
um “merge” da “release” quando ela estiver pronta – ou utilizar o comando do Gitflow, “git flow
release finish ‘0.1.0’”.
Ramificações de hotfix
15m
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O “hotfix” é utilizando quando é necessário fazer uma correção. É feita uma bifurcação da
“main” (azul) e a “hotfix” (laranja) é criada. É possível haver diversas “features”.
Exemplo
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Faz o check-out da “main”, cria a branch “develop” e uma “feature”. Após codificar, vai para
a “develop”, faz o merge da “develop” na “feature” e na “main”, e depois apaga a “feature”.
Resumo
DIRETO DO CONCURSO
1. (2021/INSTITUTO AOCP/CÂMARA DE TERESINA-PI/ANALISTA DE INFORMÁTICA)
Jaqueline é uma analista que planeja utilizar Git e Gitflow em seu projeto. Assinale a
alternativa que apresenta uma prática inconsistente com esse processo.
a. Realizar um commit na branch develop.
b. Criar um Pull Request para a branch develop.
c. Criar uma feature branch.
d. Criar uma hotfix branch.
e. Criar uma release branch.
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
20m
a. Os commits não são feitos na branch develop ou na main.
b. Quando o analista terminar o código, ele irá mandar um “pull request” para que seja acei-
to o merge no develop.
c. A implementação do código dos analistas, por padrão, é feito na feature branch.
d. Quando há um problema na main, é criada uma hotfix.
e. Criar uma branch de entrega é comum.
COMENTÁRIO
b. O git clone irá clonar e inicializar.
c. Refere-se ao commit.
d. Refere-se ao Git fetch.
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O comando indicado em
a. II faz com que o arquivo trf4css seja incluído na lista dos que terão versões controladas.
b. III faz com que todos os arquivos do sistema sofram um reset para a versão inicial ou
versão zero.
c. V lista todos os ataques de segurança da informação, ou seja, modificações não auto-
rizadas, que os arquivos do sistema sofreram.
d. I faz com que todos os hiperlinks da página regrasfichalimpa.html sejam monitora-
dos pelo Git.
e. IV salva o estado atual de todos os arquivos e apresenta sua listagem indicada como
“primeira etapa do projeto do sistema”.
COMENTÁRIO
a. “trfcss/” é uma pasta, pois possui uma barra no final.
b. Git add irá adicionar para fazer o commit.
c. O git log é para fazer o log dos comandos do Git.
Foi criada uma pasta e dois arquivos, “touch oi” e “touch tchau”. O git commit é “git commit
-m ‘primeira etapa do projeto do sistema’”. Ele mostra a mensagem e os arquivos incluídos.
25m
ANOTAÇÕES
www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GABARITO
1. a
2. a
3. e
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 11
TECNOLOGIA DA INFORMAÇÃO
Ansible
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANSIBLE
• Ansible
– O Ansible é um mecanismo open source de automação de TI que automatiza provi-
sionamento, gerenciamento de configurações, implantação de aplicações, orques-
tração e muitos outros processos de TI;
10m
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Ansible
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Além de executar esses módulos, uma possibilidade é executar comandos que são cha-
mados de ad-hock:
Material:
• Comandos ad-hoc
– O Ansible pode ser usado para executar comandos ad-hoc:
• Playbooks
– Os Ansible Playbooks são usados para orquestrar processos de TI;
– Um playbook é um arquivo YAML contendo uma ou mais plays e é usado para definir
o estado desejado de um sistema;
– Um módulo do Ansible, por sua vez, é um script autônomo que pode ser usado
dentro do Ansible Playbook;
– As plays consistem em um conjunto ordenado de tarefas a serem executadas em
hosts selecionados no arquivo de inventário do Ansible.;
– As tarefas são componentes da play que chamam os módulos do Ansible. Em uma
play, as tarefas são executadas na ordem em que são escritas.;
– As variáveis são um conceito do Ansible que permite alterar a execução dos
playbooks;
– As variáveis são usadas para verificar diferenças entres os sistemas, como versões
dos pacotes e caminhos dos arquivos;
– As coleções são um formato de distribuição para conteúdos do Ansible que pode
incluir playbooks, funções, módulos e plugins;
30m
ANOTAÇÕES
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Ansible
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Ansible II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANSIBLE II
• Gerenciamento de Configuração
– O gerenciamento de configuração é um processo de manutenção consistente em
sistemas, servidores e softwares;
– Quando usado como uma ferramenta de gerenciamento de configuração, o Ansible
serve para armazenar e auxiliar na manutenção do estado atual dos sistemas;
– As ferramentas de gerenciamento de configuração fazem alterações e implantações
com mais agilidade e removem a possibilidade de erro humano ao mesmo tempo
que tornam o gerenciamento do sistema mais previsível e escalável;
– Elas também ajudam a acompanhar o estado dos recursos e evitam que seja neces-
sário repetir tarefas.
5m
• Provisionamento
– O Ansible pode ser usado para provisionar a infraestrutura subjacente do ambiente,
dos hosts e hipervisores virtualizados, dos dispositivos de rede e dos servidores
bare-metal;
– Ele também pode instalar serviços, agregar hosts de processamento e provisionar
recursos, serviços e aplicações na nuvem;
– É possível usar um Ansible Playbook para descrever o estado desejado da infraes-
trutura e, em seguida, provisioná-la com o Ansible;
– Codificar a infraestrutura por um playbook permite que se provisione o mesmo
ambiente várias as vezes.
ANOTAÇÕES
www.grancursosonline.com.br 1
TECNOLOGIA DA INFORMAÇÃO
Ansible II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Implantação
– A automação da implantação é essencial para possibilitar a adoção de práticas de
DevOps e o gerenciamento de um pipeline de CI/CD;
10m
– Um pipeline de implantação tem pelo menos três etapas principais: criação, teste e
implantação;
– Esse pipeline possibilita a automação do processo de implantação e transfere o
código rapidamente entre os estágios de alocação e implantação;
– O Ansible implanta aplicações de várias camadas com confiança e consistência
usando apenas um framework comum;
– Com os playbooks, pode-se configurar os serviços necessários e os artefatos da
aplicação.
• Orquestração
– A orquestração possibilita automatizar processos ou fluxos de trabalho que incluem
várias etapas em diferentes sistemas;
– A orquestração de nuvem pode ser usada para provisionar ou implantar servidores,
atribuir capacidade de armazenamento, criar máquinas virtuais, gerenciar redes,
entre outras tarefas;
– É possível orquestrar as implantações de aplicações e o gerenciamento e configura-
ção de servidores com uma ferramenta como o Ansible.
Um ponto importante é que o Ansible atua na parte de segurança, mostrando sua capa-
cidade de se espalhar por várias áreas diferentes do software. Veja como o processo ocorre:
• Automação da Segurança
ANOTAÇÕES
www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Ansible II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Terminologia
15m
– Control Node: a máquina em que o Ansible está instalado, responsável pela execu-
ção do provisionamento nos servidores que o usuário está gerenciando;
– Inventory: um arquivo INI que contém informações sobre os servidores que o usuário
está gerenciando;
– Playbook: um arquivo YAML contendo uma série de procedimentos que devem ser
automatizados;
– Task: um bloco que define um único procedimento a ser executado, por exemplo:
instalar um pacote;
– Module: um módulo normalmente abstrai uma tarefa do sistema, como lidar com
pacotes ou criar e alterar arquivos. O Ansible possui diversos módulos integrados,
mas o usuário também pode criar módulos personalizados;
– Role: um conjunto de playbooks, modelos e outros arquivos relacionados, organiza-
dos de maneira predefinida para facilitar a reutilização e o compartilhamento;
– Play: um provisionamento executado do início ao fim é chamado de play;
– Facts: variáveis globais que contêm informações sobre o sistema, como interfaces
de rede ou sistema operacional;
– Handlers: usados para acionar alterações no status do serviço, como reiniciar ou
recarregar um serviço.
ANOTAÇÕES
www.grancursosonline.com.br 3
TECNOLOGIA DA INFORMAÇÃO
Ansible II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O PULO DO GATO
Tais terminologias são importantes, pois costumam ser cobradas em provas.
Para entender o funcionamento do Ansible, é necessário ver o formato da Task, do Playbook,
as Variables, os Loops, os Condicionais, os Templates e os Handlers.
• Formato da Task
– name: esta é uma task
• Formato do Playbook
– hosts: all
become: true
tasks:
- name: Update apt-cache
apt: update_cache=yes
- name: Install Vim
• Variables
– hosts: all
become: true
vars:
package: vim
tasks:
- name: Install Package
www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Ansible II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Loops
– name: Install Packages
become: true
vars:
packages: [ ‘vim’, ‘git’, ‘curl’ ]
tasks:
– name: Install Package
• Condicionais
– name: Shutdown Debian Based Systems
• Condicionais
– name: Check if PHP is installed
register: php_installed
command: php -v
ignore_errors: true
– name: This task is only executed if PHP is installed
debug: var=php_install
ANOTAÇÕES
www.grancursosonline.com.br 5
TECNOLOGIA DA INFORMAÇÃO
Ansible II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
when: php_installed|success
– name: This task is only executed if PHP is NOT installed
• Templates
30m
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot {{ doc_root }}
<Directory {{ doc_root }}>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
– name: Change default Apache virtual host
template:
src: vhost.tpl
dest: /etc/apache2/sites-available/000-default.conf
• Handlers
handlers:
– name: restart apache
template:
src: vhost.tpl
ANOTAÇÕES
www.grancursosonline.com.br 6
TECNOLOGIA DA INFORMAÇÃO
Ansible II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
dest: /etc/apache2/sites-available/000-default.conf
notify: restart apache
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
�A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
TERRAFORM
• O Terraform é uma ferramenta de infraestrutura como código (IaC) que permite criar,
alterar e versões de infraestrutura com segurança e eficiência;
• Isso inclui componentes de baixo nível, como instâncias de computação, armazena-
mento e rede, bem como componentes de alto nível, como entradas DNS, recursos
SaaS etc.;
• O Terraform pode gerenciar provedores de serviços existentes e soluções internas per-
sonalizadas;
O Terraform é uma ferramenta para construir e alterar a sua infraestrutura de uma forma
segura, eficiente e reprodutiva, ou seja, é possível criar a solução.
O que acontecia constantemente era a criação de infraestrutura manual e não era possí-
vel a sua reprodução, visando evitar esse tipo de problema sugiram uma série de ferramen-
tas como Ansible, além do Terraform.
IaC
www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
WS, em seguida desistir e usar no Google Cloud, Amazon ou qualquer outro, apenas levando
os scripts de Terraform, logicamente com alguma adaptação, mas no geral, com êxito.
5m
O principal ponto do Terraform é declarar como será a estrutura e a ferramenta que
dispõe sobre quais as soluções que devem ser adotadas para materializar essa infraestru-
tura, ou seja, é uma linguagem que poderia ser classificada como declarativa, em que se
declara o que se quer e as envia para o outro lado com a infraestrutura, utilizando as ferra-
mentas necessárias.
Instalação
www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Baixa e executa os scripts e com isso ele conseguirá gerar. A distribuição do Terraform
consiste em um arquivo binário que será baixado e executado, não há dependências e pode
ser executado diretamente na pasta.
Projeto
Acessa a pasta home, cria uma pasta, entra na pasta e escreve o artigo “main.tf” que
é uma convenção do Terraform e utilizará uma sintaxe proprietária para definir o arquivo.
Nesse caso foi utilizada um provider, versão maior que 1.4. Deve-sed declarar o arquivo e
conteúdo como “Hello, Terraform” e o nome “hello.txt”.
Na pasta onde o arquivo foi criado será dado o comando “terraform init”. Em seguida
haverá três passos para execução do terraform: Init, plan, e apply.
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O comando “terraform plan” é uma execução em teste, que mostra quais os passos serão
verificados pelo terraform, é uma espécie de preview do que acontecerá quando for de fato
executado.
10m
O comando “terraform apply” é responsável por executar e deve ser confirmada com
“yes”, em seguida há a criação do arquivo e a confirmação de que o “plano foi completado
com sucesso”.
www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Caso alguma alteração já tenha sido realizada, por exemplo, a adição do foo no arquivo
“hello.txt” e em seguida a execução do “terraform plan” novamente.
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Haverá a informação que o arquivo será criado e venha a ser posteriormente alterado
ou apagado, o terraform tentará restaurar, ou seja, possui uma certa estratégia de manter
aquele determinado estado.
Como no caso de arquivo, o provider não possui suporte para modificação, portanto, apa-
gará o arquivo alterado e criará novamente.
Conceitos Gerais
Providers
www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Insere um provider e ele executa de uma forma mais automática. Vai baixar o provider
automaticamente no registro a partir da internet e com base nesse recurso, determinado pro-
jeto, poderá utilizar alguns plugins que serão fornecidos com essa finalidade.
Alguns providers integrados fazem parte do próprio binário e ao ser instalado já traz
alguns plugins.
Algumas vezes será preciso reconfigurar os providers, a depender do provider e da utili-
zação, nesse caso é o “kubernetes”
Resources
• No Terraform, um recurso é qualquer coisa que possa ser um destino para operações
CRUD no contexto de um determinado provider;
• Alguns exemplos são uma instância do EC2, um Azure MariaDB ou uma entrada DNS;
Há a definição do recurso com seu respectivo id e tipo de instância, além de alguns outros
recursos.
15m
Um outro exemplo:
www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Note que não é apenas uma questão de instância de máquina, no exemplo acima existe
uma instância de computador, mas também é possível que se tenha algum recurso, como,
por exemplo, redes com suas respectivas configurações.
Assim, o recurso, não necessariamente, é uma máquina computacional, pode ser recurso
de rede ou outros recursos que estão disponíveis.
Count e for_each
• Os meta argumentos count e for_each nos permitem criar várias instâncias de qual-
quer recurso;
• A principal diferença entre eles é que count espera um número não negativo, enquanto
for_each aceita uma lista ou mapa de valores;
Note que no exemplo abaixo existe um count.index e será possível ocorrer um iteração.
Ou a partir de um mapa (string) com a variável instâncias, em que percorrerá cada uma
variável de instâncias repetirá a tag da instância onde será inserido o each.key.
Dessa forma, o count e o for_each são utilizados para repetir uma sequência de objetos,
de comandos. Enquanto o count aceita números o for_each aceita uma lista de valores
www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Fontes de dados
De forma em que é possível saber sobre as informações existentes, muito embora não
seja possível criá-las ou alterá-las, muito importante para evitar alguns bugs.
Mesmo possuindo algumas características de programação e linguagem de programa-
ção, as principais características do terraform são muito mais ligadas a infraestrutura, como,
por exemplo, em não permitir a alteração de valores.
A fonte de dados do exemplo acima foi extraída da fonte de dados “ubuntu”, onde será
possível consultar esse registro e buscar as informações.
Estado
Por exemplo, se declarar algum recurso no projeto, executando esse comando do terra-
form, ele armazenará o identificador. Assim, o objeto principal do arquivo do estado é forne-
cer essas informações sobre os recursos já existentes.
ANOTAÇÕES
www.grancursosonline.com.br 9
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O ponto importante sobre o arquivo de estado é que ele contém as informações confi-
denciais, por exemplo, inclui senhas iniciais utilizadas para criar o banco de dados, chaves
privadas etc.
O backend padrão é o local que utilizará um arquivo e pode ser alterado o local de
armazenamento.
Módulos
• Os módulos do Terraform são o principal recurso que nos permite reutilizar definições
de recursos em vários projetos ou simplesmente ter uma melhor organização em um
único projeto;
Pode ser feita uma divisão de módulos, ou seja, ao invés de ser feito um arquivo gigan-
tesco sobre o terraform, será dividido em arquivos menores e um arquivo servirá de refe-
rência para outro. Assim, o módulo será apenas um diretório contendo um ou mais arquivos
de definição de recursos, mesmo quando se insere todos os arquivos em um único arquivo
diretório, ainda é utilizado o módulo sem nenhum subdiretório.
No exemplo abaixo está referenciando um módulo no subdiretório “networking” que é a
parte de rede.
ANOTAÇÕES
www.grancursosonline.com.br 10
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Variáveis de Entrada
• Uma vez definido, podemos usar variáveis em expressões usando o prefixo var:
A questão das variáveis juntamente com a questão de modularização, formam uma fer-
ramenta bastante poderosa em que é possível parametrizar grande parte desse ambiente.
Valores de Saída
• Um módulo pode definir blocos de saída que expõem um subconjunto dos recur-
sos criados:
Depois de criado, para extrair a informação por meio de um dumping para armazenar
alguma informação que seja importante, como, por exemplo, o IP da máquina.
Variáveis Locais
• Variáveis locais funcionam como variáveis padrão, mas seu escopo é limitado ao
módulo onde são declaradas;
ANOTAÇÕES
www.grancursosonline.com.br 11
DESENVOLVIMENTO DE SISTEMAS
Terraform
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Workspaces
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
www.grancursosonline.com.br 12
DESENVOLVIMENTO WEB
Programação - Shell Script
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
SHELL SCRIPT
A Shell Script é uma programação diferente do convencional: não serve para fazer sites
ou um programa no Windows, mas tem outras utilidades.
Referências Bibliográficas
https://www.gnu.org/software/bash/manual/bash.html
Há várias formas de SHELL, mas, no geral, as Bancas vão muito para o lado do BASH.
O manual acima indicado é o oficial dos comandos do BASH.
Introdução
Um script de shell é um programa de computador projetado para ser executado pelo shell
Unix / Linux, que pode ser um dos seguintes:
• Bourne Shell
• C Shell
• Korn Shell
• GNU Bourne-Again Shell
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Programação - Shell Script
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O SHELL SCRIPT nada mais é do que a união de uma série de comandos num arquivo
só, com a extensão.SHSHELL.
No caso do LINUX ele tem no sistema de permissões de arquivo, uma permissão espe-
cial para execução.
No geral, o que será feito?
Se transformará o arquivo num SHELL SCRIPT (arquivo de texto com a extensão.SH),
com um SHMODE, ou se alterará o modo do arquivo para um modo que permita a execução
daquele arquivo que funcionará como se fosse um programa nativo do computador.
Os scripts de SHELL têm várias construções obrigatórias que informam ao ambiente de
SHELL o que fazer e quando fazer;
5m
O SHELL SCRIPT é uma linguagem de programação real, completa com variáveis, estru-
turas de controle e assim por diante;
Não importa o quão complicado um SCRIPT seja, ainda é apenas uma lista de comandos
executados sequencialmente;
Há uma sequência de comandos, mas o SHELL SCRIPT é um pouco mais do que isso
porque ele não tem apenas o “lista, copia” numa sequência, na verdade, ele tem instru-
ções com poder semântico muito parecido com as linguagens de programações tradicionais,
como JAVA.
Ele tem comandos de repetição, estruturas de decisão que dão um poder na linguagem
semelhante ao poder de uma linguagem de programação tradicional, até porque no próprio
SHELL do LINUX ele tem esses comandos disponíveis para serem utilizados.
Isso significa que será devolvido um site em SHELL SCRIPT?
Talvez até pudesse ser desenvolvido, mas não seria muito apropriado porque não é uma
linguagem que tenha domínio específico.
O SHELL SCRIPT está envolvido com procedimentos da máquina, por exemplo, fazer um
BACKUP, uma rotina administrativa de limpeza de pastas ou cópias, algum procedimento de
uma linha de comando que se queira repetir várias vezes numa série de arquivos de entrada.
O SHELL SCRIPT é utilizado para rotinas do sistema operacional e não como um pro-
grama tradicional, mesmo que seja num programa de linha de comando, de uma maneira
geral, não se utiliza o SHELL SCRIPT por algumas razões:
Ele não é muito performático no sentido de linguagem e, também, porque a sintaxe dele
é um pouco trabalhosa.
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Programação - Shell Script
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Se alguém for tentar fazer um site utilizando SHELL SCRIPT, o trabalho será imenso
porque as estruturas de construção dele não são muito voltadas para esse uso.
Exemplo:
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Programação - Shell Script
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
PROMPT DO SHELL
Exemplo:
$ date (comando do sistema que pode ser seguido por outras palavras que são chama-
das de PARÃMETROS).
De uma maneira geral os parâmetros são definidos no Manual daquele comando.
Quando se trabalha com o SHEL SCRIPT este também pode aceitar argumentos.
15m
Exemplo:
$ date (comando do sistema que pode ser seguido por outras palavras que são chama-
das de PARÃMETROS).
sáb, 29 de jun de 2000 20:24:40
TIPOS DE SHELL
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Programação - Shell Script
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O SHELL UNIX original foi escrito em meados da década de 1970 por Stephen R. Bourne;
O SHELL BOURNE foi o primeiro SHELL a aparecer nos sistemas UNIX;
SHELL SCRIPTS
Não existe o passo de compilação como nas linguagens tradicionais como JAVA e PASCAL.
SHELL SCRIPT é um arquivo de texto que é salvo e executado.
Isso traz vantagens e algumas desvantagens.
A COMPILAÇÃO é um passo importante em várias linguagens porque ela consegue
detectar erro de sintaxe, erros na estrutura, fazer verificações de segurança.
Os SCRIPTS são muito poderosos – há vários exemplos na Internet de gente que ao
apagar os SCRIPTS acaba apagando o sistema inteiro.
Por outro lado, o fato de não ser compilado gera uma facilidade muito grande de criação
e edição, de uma forma muito prática e pouco burocrática.
#!/bin/sh
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Programação - Shell Script
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Isso informa ao sistema que os comandos que seguem devem ser executados pelo
shell Bourne. É chamado de shebang porque o símbolo # é chamado de HASH e o
símbolo! é chamado de BANG;
Esses símbolos podem ser alterados para outros interpretadores e poderiam ser feitos
SCRIPTS em outras linguagens alterando um interpretador.
COMENTARIO
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Programação - Shell Script
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
NOMES DE VARIÁVEIS
• _ALI
• TOKEN_A
• VAR_1
• VAR_2
• 2_VAR
• –VARIAVEL
• VAR1–VAR2
• VAR_A!
A razão pela qual você não pode usar outros caracteres como!, * ou - é que esses carac-
teres têm um significado especial para o SHELL;
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Programação – Shell Script II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
SHELL SCRIPT
DEFININDO VARIÁVEIS
nome_variavel=valor_variavel
• Por exemplo:
NOME=”Maria da Silva”
No SHELL SCRIPT não é necessário declarar previamente uma variável, informar o tipo
da variável: a linguagem é menos burocrática – simplesmente se associa um valor com um
identificador (nome da variável) e, assim, a variável é criada. Como a linguagem é scriptada,
ela fará isso no tempo de execução.
• O exemplo acima define a variável NOME e atribui o valor “Maria da Silva” a ela. Vari-
áveis desse tipo são chamadas de variáveis escalares. Uma variável escalar pode
conter apenas um valor por vez;
• O SHELL permite que se armazene qualquer valor desejado em uma variável.
Por exemplo:
VAR1=”Maria da Silva”
VAR2=100
ACESSANDO VALORES
• Para acessar o valor armazenado em uma variável, deve-se prefixar seu nome com o
sinal de dólar ($);
• Por exemplo, o SCRIPT, a seguir, acessará o valor da variável definida NOME e o
imprimirá na STDOUT (saída padrão):
#!/bin/sh
NOME=”Maria da Silva”
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Programação – Shell Script II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
echo $NOME
Maria da Silva
O SHELL fornece uma maneira de marcar variáveis como somente leitura usando o
comando readonly. Depois que uma variável é marcada como somente leitura, seu valor
não pode ser alterado;
5m
Por exemplo, o SCRIPT a seguir gera um erro ao tentar alterar o valor de NOME:
#!/bin/sh
NOME=”Maria da Silva”
readonly NOME
NOME=”Marcus de Paula”
echo $NOME
./teste.sh: 4:./teste.sh: NOME: is read only
EXCLUINDO VARIÁVEIS
• Excluir uma variável faz com que o SHELL remova a variável da lista de variáveis que
ela rastreia. Após excluir uma variável, não será possível acessar o valor armazenado
na variável;
• Para remover uma variável utiliza-se o comando UNSET:
#!/bin/sh
NOME=”Maria da Silva”
unset NOME
echo $NOME
O SCRIPT não imprime nada. Não se pode usar o comando UNSET para excluir variáveis
marcadas como readonly;
Não se pode fazer o UNSET de variáveis que sejam marcadas como readonly.
10m
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Programação – Shell Script II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
TIPOS DE VARIÁVEIS
Quando um SHELL está em execução, três tipos principais de variáveis estão presentes:
• Variáveis locais: Uma variável local é uma variável presente na instância atual do
SHELL. Não está disponível para programas iniciados pelo SHELL. Elas são definidas
no prompt de comando;
• Variáveis de ambiente: Uma variável de ambiente está disponível para qualquer pro-
cesso filho do SHELL. Alguns programas precisam de variáveis de ambiente para
funcionar corretamente. Geralmente, um SCRIPT DE SHELL define apenas as variá-
veis de ambiente necessárias para os programas que são executados;
• Variáveis Shell: Uma variável SHELL é uma variável especial que é definida pelo
SHELL e é requerida pelo SHELL para funcionar corretamente. Algumas dessas vari-
áveis são variáveis de ambiente, enquanto outras são variáveis locais;
DIRETO DO CONCURSO
COMENTÁRIO
#!/bin/sh
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Programação – Shell Script II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Isso informa ao sistema que os comandos que seguem devem ser executados pelo
SHELL BOURNE. É chamado de SHEBANG porque o símbolo # é chamado de HASH
e o símbolo! é chamado de BANG.
15m
COMENTÁRIO
VARIÁVEIS ESPECIAIS
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Programação – Shell Script II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
#!/bin/sh
echo “Nome do arquivo: $0”
echo “Primeiro Parâmetro: $1”
echo “Segundo Parâmetro: $2”
echo “Valores unidos: $@”
echo “Valores unidos: $*”
echo “Número de parâmetros: $#”
$./teste.sh Maria da Silva
Nome do arquivo:./teste.sh
Primeiro Parâmetro: Maria
Segundo Parâmetro: da
Valores unidos: Maria da Silva
Número de parâmetros: 3
PARÂMETROS ESPECIAIS $* e $@
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Programação – Shell Script II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• No entanto, o parâmetro especial “$*” pega a lista inteira como um argumento com
espaços, e o parâmetro especial “$@” pega a lista inteira e a separa em argumentos
separados;
#!/bin/sh
for TOKEN in “$*”
do
echo $TOKEN
done
$./teste.sh Maria da Silva
Maria da Silva
Parâmetros Especiais $* e $@
#!/bin/sh
GABARITO
1. E
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Programação – Shell Script III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
SHELL SCRIPT
Status de Saída
ARRAYS
• Uma variável de SHELL é capaz de manter um único valor. Essas variáveis são cha-
madas de variáveis escalares;
• O Shell suporta um tipo diferente de variável chamado ARRAY (também chamado de
VETOR ou MATRIZ) que pode conter vários valores ao mesmo tempo. ARRAYS forne-
cem um método de agrupar um conjunto de variáveis. Em vez de criar um novo nome
para cada variável que é necessária, você pode usar uma única variável de ARRAY
que armazena várias outras variáveis;
5m
• Todas as regras de nomenclatura para variáveis são aplicáveis ao nomear ARRAYS;
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Programação – Shell Script III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Por exemplo, se quisermos armazenar vários nomes em nosso script poderíamos ter o
seguinte código:
NOME01=”João”
NOME02=”Paulo”
NOME03=”Pedro”
NOME04=”Luiz”
NOME05=”Maria”
• Podemos usar um único ARRAY para armazenar todos estes nomes. Para atribuir um
valor a um índice de um ARRAY fazemos:
nome_array[index]=valor
• Aqui nome_array é o nome da matriz, index é o índice do item no ARRAY que você
deseja definir e valor é o valor que você deseja definir para esse item;
${nome_array[index]}
Aqui nome_array é o nome do array, e index é o índice do valor a ser acessado:
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Programação – Shell Script III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
#!/bin/sh
NOME[0]= “João”
NOME[1]= “Paulo”
NOME[2]= “Pedro”
NOME[3]= “Luiz”
NOME[4]= “Maria”
echo “Primeiro índice: ${NOME[0]}”
echo “Segundo índice: ${NOME[1]}”
$./teste.sh
Primeiro índice: João
Segundo índice: Paulo
• Você pode acessar todos os itens em um array de uma das maneiras a seguir:
${nome_array[*]}
${nome_array[@]}
#!/bin/sh
NOME[0]=”João”
NOME[1]=”Paulo”
NOME[2]=”Pedro”
NOME[3]=”Luiz”
NOME[4]=”Maria”
echo “Primeira forma: ${NOME[*]}”
echo “Segunda forma: ${NOME[@]}”
$./teste.sh
Primeira forma: João Paulo Pedro Luiz Maria
Segunda forma: João Paulo Pedro Luiz Maria
DIRETO DO CONCURSO
1. (2010/FCC/TRT-8ª REGIÃO/PA E AP/ANALISTA JUDICIÁRIO/TECNOLOGIA DA IN-
FORMAÇÃO) A variável $# indica num script BOURNE SHELL
a. o número de argumentos passados na linha de comando.
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Programação – Shell Script III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
Variáveis Especiais
$0 – O nome do arquivo do SCRIPT atual.
$n – Corresponde aos argumentos com os quais um SCRIPT foi chamado. Onde n é um
número decimal positivo correspondente à posição de um argumento (o primeiro argumen-
to é $1, o segundo argumento é $2 e assim por diante);
$# – O número de argumentos fornecidos para um SCRIPT;
$* – Retorna todos os argumentos em uma única STRING;
$@ – Retorna uma lista com todos os argumentos;
$? – O status de saída do último comando executado;
$$ – O número do processo do SHELL atual. Para SCRIPTS DE SHELL, esse é o ID do
processo sob o qual eles estão sendo executados;
$! – O número do processo do último comando de segundo plano;
COMENTÁRIO
Status de Saída
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Programação – Shell Script III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Alguns comandos retornam status de saída adicionais por motivos específicos. Por
exemplo, alguns comandos diferenciam os tipos de erros e retornam vários valores de
saída, dependendo do tipo específico de falha.
GABARITO
1. a
2. E
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 5