Você está na página 1de 260

DESENVOLVIMENTO WEB

Programação Estruturada
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

PROGRAMAÇÃO ESTRUTURADA

Em geral, nos editais cobram-se a programação estruturada orientada a objetivos, além


da programação funcional. O conteúdo dessa aula será focada na 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

O processamento é onde o computador entra. Exemplo: operação matemática com ope-


ração de dados: 1 + 1 (operandos); resultado de 1 + 1 é o processamento dos dados, dando
uma saída como resultado a operação, a saber, 2.

Algoritmos
O computador é composto por duas partes:
• Hardware: Partes físicas;
• Software: Programas.

Exemplo para memorizar: o hardware é o que se “chuta” – parte física; e o software é o


que se “xinga” quando se está com raiva – parte abstrata.
Quando queremos escrever um software para realizar determinado tipo de processa-
mento de dados, devemos escrever um programa e, para que o computador compreenda e
execute esse programa, devemos escrevê-lo usando uma linguagem que tanto o computador
quanto o desenvolvedor de software entendam (linguagem de programação).
Nos computadores mais remotos, antes da década de 50, o código era escrito em lingua-
gem de máquina, bem próximo ao que os processadores compreendiam. Obviamente que
os softwares ficam mais complexos, e com o passar das décadas os códigos começaram a
ANOTAÇÕES

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.

• Um programa, que é o resultado final, é a codificação de um algoritmo (nível mais alto)


em uma determinada linguagem de programação.
• Um algoritmo é um conjunto de passos finitos que devem ser seguidos para que certo
objetivo seja alcançado.

Exemplo: algoritmo para remover a lâmpada queimada:


1. Posicione a escada debaixo da lâmpada;
2. Suba na escada até que a lâmpada possa ser alcançada;
3. Gire a lâmpada no sentido anti-horário, até que ela se solte;
4. Retire a lâmpada.

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.

• Sequência: implementa os passos de processamento necessários para descrever


qualquer programa. O programa é executa em uma certa ordem lógica que o compu-
tador executa.
• Seleção: especifica a possibilidade de selecionar o fluxo de execução do processa-
mento baseado em ocorrências lógicas. Trata-se da possibilidade de haver uma ava-
liação de uma expressão lógica, observando um resultado final.

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.

• Iteração: permite a execução repetitiva de segmentos do programa. Existe uma quan-


tidade de passos a serem aplicados com determinada lógica. Assim, uma série de
comandos serão executados de forma repetida, de acordo com determinada condição.

Em provas, as bancas podem cobrar questões muito conceituais. Daí a importância de


estudar os conceitos acima.

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

Em geral, a cláusula GO TO não é vista como uma boa prática de programação.


A programação estruturada pressupõe a eliminação ou minimização do uso de GO TO.
Nessa época, a programação utilizava bastante o GOTO. Exemplo: mesmo com uma
sequência de instruções era possível retornar para outra orientação de forma arbitrária: “se
ocorrer o evento X, volte ao passo 2”.
Essa ação tornava o código de difícil manutenção. Diante disso, a programação estrutura
surge para dirimir esses problemas, por meio de estruturas para a utilização do GOTO.
20m

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.

Exemplo comparativo: em equações matemáticas, o “x” costuma ser tido como


uma variável.

Identificadores
Representam os nomes das variáveis, dos programas, constantes, rotinas, entre outros.
Exemplo: f(x) é o mesmo que função, na matemática.

Regras básicas para formação de identificadores:


• Caracteres permitidos: números, letras maiúsculas ou minúsculas e o caractere
sublinhado "_";
• O primeiro caractere dever ser sempre uma letra ou o caractere sublinhado;
• Não são permitidos caracteres em branco e caracteres especiais;
• Não é possível utilizar palavras reservadas nos identificadores, ou seja, palavras que
pertencem à linguagem de programação utilizada linguagem de programação utilizada.
• Não é possível utilizar um comando. Exemplo: Comando “Se”.
ANOTAÇÕES

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

• Numérico: Representam números inteiros e decimais;


• Lógico: Representam dados booleanos (verdadeiro/falso);
• Literal ou Caractere: Representam cadeias de caracteres (strings).

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

Acima, o algoritmo começa com “ALGORITMO” e termina do “FIM_ALGORITMO”. Entre


estes há o bloco de código.

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

É importante atentar que, a depender da linguagem a se utilizar, algumas linguagens dife-


renciam maiúsculas de minúsculas.
ANOTAÇÕES

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

Obs.: algumas linguagens utilizam comumente o sinal “=”.

�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

Comandos de Entrada e Saída (E/S)


No processamento, observa-se a entrada de dados, o processamento e a saída de dados.
Entrada e saída de informações são essenciais, pois sem elas o cálculo não poderá ser feito.

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.

Estrutura Condicional (seleção)


Essa estrutura é conhecida também como estrutura de decisão ou de seleção, ela se
caracteriza pela execução de determinados códigos de programação dependendo da vera-
cidade de uma condição.

Exemplo: se chover, leve o guarda-chuva. O comando “leve o guarda-chuva” está subor-


dinado a uma condição. Já no caso do exemplo “se chover, leve o guarda-chuva. Se não
chover, leve o filtro solar”, observa-se um caso positivo e o comando do “SE + NÃO”.

Estrutura Condicional Simples


SE – condição
ENTÃO – comando

O “SE” é um booleano, sendo avaliado como TRUE ou FALSE.


ANOTAÇÕES

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ão executados o comando1, comando2 e comando3.


Exemplo: se chover, leve o guarda-chuva e a capa de chuva. O bloco começa com
INÍCIO e termina com FIM (a depender da literatura). Aqui, observa-se uma condição e diver-
sos blocos, sendo executados se a condição for verdadeira.

Estrutura Condicional Composta


SE condição
ENTÃO comando1
SENÃO comando2

Na estrutura composta, além do ENTÃO há o SENÃO. Exemplo: “Se chover, leve o


guarda-chuva, senão leve a capa de chuva.”

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

Se a condição for verdadeira, serão executados o comando1 e o comando2, caso con-


trário, serão executados o comando3 e o comando4.

Da mesma forma que na estrutura condicional simples há blocos associados, na estru-


tura composta também se tem.

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

 Obs.: no exemplo acima se observa a declaração da variável N1, N2 e M NUMÉRICO. O


comando ESCREVA apresentará uma tela no computador virtual para quem opera o
programa.

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.

Aninhamento de estruturas de decisão


Todos os blocos podem ser aninhados.

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”.

Estrutura de seleção múltipla ESCOLHA-CASO


A estrutura ESCOLHA-CASO (em inglês SWITCH-CASE), é uma alternativa quando se
tem várias estruturas de decisão aninhadas. Isto é, quando outras verificações são feitas
caso a anterior tenha falhado.

A proposta da estrutura ESCOLHA-CASO é permitir ir direto no bloco de código dese-


jado, dependendo do valor de uma variável de verificação.

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

A depender da operação matemática que o usuário digitou, verificar-se-á o resultado no


código. Diante disso, é possível realizar vários aninhamentos de “SE”, mas o código ficará de
difícil leitura e manutenção.
ANOTAÇÕES

5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Observe abaixo a mesma operação do exemplo acima com o ESCOLHA-CASO:

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

Caso não tratado na estrutura (OUTROCASO)


Existe uma opção a mais nessa estrutura, justamente para tratar quando o valor da vari-
ável não é equivalente a nenhum valor informado como opção nos CASOs, ou seja, é um
"OUTROCASO".

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

resultado ← numero1 - numero2


CASO "*" FAÇA
resultado ← numero1 * numero2
CASO "/" FAÇA
resultado ← numero1 / numero2
OUTROCASO
ESCREVA "Operação inválida"
FIM

O programa está se preparando para receber um valor não esperado. Assim, o


OUTRO-CASO envia uma mensagem para o usuário avisando-o que a mensagem não foi
20m compreendida.

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

Estrutura de Repetição PARA


Esta estrutura de repetição é utilizada quando se sabe previamente o número de vezes
em que um trecho do algoritmo deve ser repetido:

PARA I ← valor_inicial ATÉ valor_final FAÇA


comando1

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:

PARA I ← valor_inicial ATÉ valor_final FAÇA


INÍCIO
comando1
comando2
FIM

O comando1 e o comando2 serão executados utilizando a variável I como controle, cujo


conteúdo vai variar do valor inicial até o valor final, de 1 em 1, incrementando automatica-
mente. Exemplo:

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.

Exemplo de caso mais elaborado para calcular um número fatorial:

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.

Estrutura de Repetição ENQUANTO


Essa estrutura de repetição é utilizada quando não se sabe o número de vezes em que
um trecho do algoritmo deve ser repetido, embora também possa ser utilizada quando se
sabe esse número.

ENQUANTO condição FACA comando1.


Enquanto a condição for verdadeira, o comando1 será executado.

ENQUANTO condição FACA


INÍCIO
comando1
comando2
FIM
ANOTAÇÕES

9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Enquanto a condição for verdadeira, o comando1 e o comando2 serão executados.

O “ENQUANTO” pode ser também estruturado em blocos. É importante que o comando1


e comando2 façam algo para alterar a condição, a fim de não entrar em looping infinito.

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

Estrutura de Repetição REPITA


A diferença entre a estrutura ENQUANTO e a estrutura REPITA é que na estrutura REPITA
os comandos serão repetidos pelo menos uma vez, já que a condição se encontra no final.

REPITA
comando1
comando2
ATÉ condição

Enquanto a condição for falsa, o comando1 e o comando2 serão executados. No


momento em que a condição for verdadeira, o código parará.

ALGORITMO
DECLARE J NUMÉRICO
J←1
REPITA
ESCREVA J
J←J+1
ATÉ J > 10
FIM_ALGORITMO

 Obs.: quando J passar o valor de 10, o código parará.

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

Acima, o bloco será executado até que o usuário digite 0.

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

PROGRAMAÇÃO ESTRUTURADA III

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]

Obviamente que a utilização de vetor ou matriz dependerá do caso e da utilidade quanto


ao dado. Exemplo: em um programa que multiplica uma matriz por outra matriz, o uso da
matriz é essencial.
10m

Carregando uma Matriz


PARA I ← 1 ATÉ 3 FAÇA
INÍCIO
PARA J ← 1 ATÉ 5 FAÇA
INÍCIO
LEIA X[I, J]
FIM

Obs.: acima, nota-se um looping dentro do outro, podendo popular a matriz.

Registros
Registros são estruturas que podem agregar diferentes informações. Dessa maneira,
podem ser feitas diferentes combinações, gerando novos tipos de dados.

O registro é o primeiro movimento no sentido de criar tipos de dados que a linguagem de


programação não forneça.

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.

Quando o programa se torna mais elaborado, há uma necessidade de criação de tipos de


dados (muitas vezes customizados), e o registro é a forma mais básica para tanto. Exemplo:
registro de um aluno com nome, idade, data de nascimento, CPF.

É importante destacar que a implementação do registro variará de uma linguagem para


outra. Mas, de forma geral, segue-se um padrão.
15m

DECLARE conta[3] REGISTRO (num, saldo NUMÉRICO, nome LITERAL)

O registro declarado é um vetor 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.

Na computação, o arquivo é em geral utilizado para manter a persistência de dados.


Exemplo: feito um processamos, gerou-se um grande número de dados de respostas. É pos-
sível pegar esses dados e estruturá-los em registros, e persistir os registros no computador,
de forma que possam ser lidos depois (eventualmente) por uma outra execução de programa.
ANOTAÇÕES

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.

Assinale, a seguir, o comando representado nesse fluxograma.


a. SE... ENTÃO.
b. SELECIONE... CASO.
c. ENQUANTO... FAÇA.
d. REPITA... ATÉ QUE.
e. SE... ENTÃO... SENÃO.

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

Sub-Rotinas (Programação Modularizada)


Sub-rotinas são blocos de instruções que realizam tarefas específicas.

De fato, ao se escrever um código de programa que se alonga bastante, notam-se linhas


de códigos repetidos ou muitos trechos que podem ser utilizados em outros programas a
serem desenvolvidos. Para reaproveitar essas linhas de códigos, utilizam-se sub-rotinas.

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.

Ex.: o programador escreve um código de calcule fatorial. Em outro programa, o progra-


mador precisará de um código que calcule o fatorial. Neste caso, o programador separará
o código em blocos, mesmo que para utilizar em seu próprio programa, para evitar cópias
que possam gerar erros. Esses blocos escritos são guardados, atribuídos a um identificador,
sendo eles acionados quantas vezes forem necessárias.

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.

O programa que chama uma sub-rotina ("chamador") é temporariamente suspenso e


o controle é passado para a rotina, que é executada. Ao terminar a sub-rotina, o controle
retorna para o programa que realizou a chamada ("chamador").

Ou seja, são os blocos separados da rotina principal e nomeados. Na medida em que se


executa os programas principais, os blocos serão chamados, passando o controle para os
blocos até terminar a execução. Exemplo: um programa que calcula o fatorial fará a leitura do
valor passado pelo usuário, chamando eventualmente a sub-rotina que calcula o fatorial, cal-
culando e devolvendo o valor, e, em seguida, o controle volta para o seu programa principal.
25m
ANOTAÇÕES

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).

Funções embutidas podem ser utilizadas diretamente em expressões. Por exemplo, o


comando: hipotenusa ← sqrt(cateto1^2 + cateto2^2).

Na maioria das linguagens de programação, há a chamada biblioteca básica, que possui


as funções matemáticas mais comuns, além de uma série de funções que se repetem em
vários programas.

Essas funções são utilizadas em expressões como se fossem simplesmente variáveis


comuns. E como variáveis comuns, as funções têm (ou retornam) um único valor.

É responsabilidade do programador fornecer os argumentos (ou parâmetros) necessá-


rios para a função efetuar seus cálculos.

Exemplo: hipotenusa ← sqrt(cateto1^2 + cateto2^2). Antes de a função ser passada para


o sqrt (raiz quadrada), calcula-se o valor interno “(cateto1^2 + cateto2^2)”, enviando para o
sqrt o valor já calculado. Todo esse bloco terá a mesma função como se fosse uma variável,
sendo atribuída ao valor de hipotenusa.

A utilização de funções afeta o fluxo de controle em um programa.

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.

Após a execução da função com os parâmetros fornecidos, o controle retorna ao ponto


de chamada da função, com o valor calculado pela função.
ANOTAÇÕES

7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Programação Estruturada III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Exemplo de como se utiliza as funções embutidas e entregues pela linguagem de


programação:
ALGORITMO
DECLARE X, Y, VALOR NUMÉRICO
X – ← -10
Y ← 16
VALOR ← ABS(X) + SQRT(Y)
ESCREVA VALOR
FIM

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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.

ALGORITMOS E ESTRUTURA DE DADOS


• Referências

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Heaps

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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}.

Dentre os HEAPS há duas categorias principais: o heap máximo e o heap mínimo.

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

void max_heapify(int Arr[], int i, int N) {


int left = 2 * i// filho da esquerda
int right = 2 * i +1// filho da direita
if (left <=N and Arr[left] > Arr[i])
largest = left;
else
largest = i;
if (right <= N and Arr[right] > Arr[largest])
largest = right;
if (largest!= i) {
swap(Arr[i], Arr[largest]);
max_heapify(Arr, largest, N);
}
}

Como 8 é maior que 4, então 8 é trocado por 4 e max_heapify é executado novamente


em 4, mas em posição diferente. Agora, na etapa 2, 6 é maior que 4, então 4 é trocado por 6 e
obteremos um heap máximo, como agora 4 é um nó folha, portanto, uma chamada adicional
para max_heapify não criará nenhum efeito no heap. Agora, como podemos ver, podemos
manter o maxheap usando a função max_heapify.
15m

Construindo um Heap Máximo


Agora vamos dizer que temos N elementos armazenados no vetor Vet indexado de 1 para
N. No momento, eles não estão seguindo a propriedade max heap. Portanto, podemos usar
a função max_heapify para fazer um heap máximo fora do vetor.
ANOTAÇÕES

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Heaps

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

void build_maxheap(int Arr[]) {


for (int i = N / 2; i >= 1; i--)
{ max_heapify(Arr, i, N);
}
}
Pode-se pegar qualquer vetor numérico, considera-se que ele é um heap, atravessa-se
esse vetor utilizando-se a função max_heapify, que transformará esse vetor que não é um
heap num heap, mantendo-se aquelas propriedades de Nó ali ordenado.

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.

void min_heapify(int Arr[], int i, int N) { int left = 2 * i;


int right = 2 * i + 1;
int smallest;
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Heaps

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

if (left <= N and Arr[left] < Arr[i])


smallest = left;
else
smallest = i;
if (right <= N and Arr[right] < Arr[smallest])
smallest = right;
if (smallest!= i) {
swap(Arr[i], Arr[smallest]);
min_heapify(Arr, smallest, N);
}
}

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:

void build_minheap (int Arr[ ]) {


for( int i = N/2; i >= 1; i--) {
min_heapify (Arr, i);
}
}
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Heaps

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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?

a. O maior valor é guardado no nó raiz.


b. Os nós filhos possuem valores menores do que os nós pais.
c. Os nós pais possuem valores menores do que os nós filhos.
d. É uma estrutura de dados organizada como uma árvore de qualquer ordem.
e. Uma min heap pode ser organizada por meio de uma árvore binária desbalanceada.

20m
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Heaps

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMENTÁRIO
Heap mínimo

a. O MENOR valor é guardado no nó raiz.


b. Os nós filhos possuem valores MAIORES do que os nós pais.
c. Os nós pais possuem valores menores do que os nós filhos.
d. É uma estrutura de dados organizada obedecendo a uma ordem.
e. Uma min heap pode ser organizada por meio de uma árvore binária balanceada.
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.

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

e.

COMENTÁRIO
Criar uma heap max a partir do vetor abaixo.

a. O 30 é maior do que 20.


b. É um heap max.
c. É um heap max. O valor 15 não está presente no vetor acima.
d. O 15 é maior do que 10 e está abaixo.
e. Está na parte debaixo o 50.

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

PILHAS

Pilhas é um tópico de algoritmos e estrutura de dados.

REFERÊNCIAS

As referências para pilhas e estruturas de dados é “Estruturas de dados usando C” de


Tenenbaum e o resumo disponível no site tutorialspoint.
O livro de Tenenbaum é um conteúdo profundo demais para o assunto de pilhas, que
pode ser estudado de forma completa com conteúdos resumidos, o que otimiza o tempo.

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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

As operações da pilha podem envolver inicializar a pilha, usá-la e, em seguida, descartá-


-la. As operações básicas da pilha são:
• push() — Empurra (armazena) um elemento na pilha;
• pop() — Remove (acessa) um elemento da pilha.
No entanto, na implementação de computação de uma pilha, são necessárias mais ope-
rações. Para usar uma pilha com eficiência, precisamos também poder verificar o status da
pilha. Para isso são implementadas as seguidas funcionalidades:
• peek() — obtém o elemento de dados do topo da pilha, sem removê-lo;
O peek também existe para a fila.
• isFull() — verifica se a pilha está cheia;
Quando se trabalha com vetor, principalmente, a pilha terá um tamanho fixo. Ao fazer um
push (empilhar), é importante o algoritmo verificar se a pilha está cheia, pois, se estiver, não
será possível empilhar mais elementos.
• isEmpty() — verifica se a pilha está vazia.
Antes de fazer a operação de pop, deve-se verificar se a pilha não está vazia e remover
o elemento. Se a pilha estiver vazia, não retorna o pop, mas sim algum tipo de erro ou indi-
cativo de que a pilha está vazia.
Sempre é mantido um ponteiro para o último elemento colocado na pilha. No caso da fila,
tem-se um ponteiro apontando para o final da fila e outro apontando para o início. Já na pilha
o ponteiro indica apenas o topo, pois se trabalha com operação em um lado da estrutura de
dados. Como esse ponteiro sempre representa o topo da pilha é, portanto, denominado top.
O ponteiro superior fornece o valor máximo da pilha sem removê-lo.
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Pilhas

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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

A implementação da função isempty() na linguagem de programação C é um pouco dife-


rente. Inicia-se o topo em -1, pois o índice no vetor começa em 0. Portanto, verifica-se se o
topo está abaixo de zero ou -1 para determinar se a pilha está vazia.
15m
Na maioria das linguagens de programação, o índice inicial do vetor começa no zero, e
não no 1. Nesse caso, verificar-se-á se o top é igual a -1, ou seja, se a pilha está vazia.

www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Pilhas

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

push

O processo de colocar um novo elemento de dados na pilha é conhecido como Operação


Push. A Operação de Push envolve uma série de etapas:
• Etapa 1 — Verificar se a pilha está cheia;
• Etapa 2 — Se a pilha estiver cheia, produz um erro e sai;
• Etapa 3 — Se a pilha não estiver cheia, incrementa para cima para apontar para o pró-
ximo espaço vazio;
• Etapa 4 — Adiciona o elemento de dados ao local da pilha, onde a parte superior está
apontando;
• Etapa 5 — Retorna sucesso.
Na operação de push, principalmente se estiver trabalhando com vetor de tamanho fixo,
é preciso verificar se a pilha está cheia.
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Pilhas

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

De acordo com a imagem, o elemento E move o top para cima.

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

O acesso ao conteúdo ao removê-lo da pilha é conhecido como Operação Pop.


Em uma implementação de vetor, o elemento de dados não é realmente removido, em
vez disso, top é decrementado para uma posição mais baixa na pilha para apontar para o
próximo valor.
Não é preciso apagar, de fato, o dado. Move-se o top uma unidade para baixo e o ele-
mento será sobrescrito na próxima operação de inserção. Esse pequeno ajusto, de certa
forma, adiciona um pouco de performance no sistema, porque seria uma operação pratica-
mente inútil, pois, posteriormente haverá um sobrescrito.
Mas, na implementação de lista ligada, pop(), na verdade, remove o elemento de dados
e desaloca o espaço de memória.
Uma operação Pop pode envolver as seguintes etapas:
• Etapa 1 — Verifica se a pilha está vazia;
• Etapa 2 — Se a pilha estiver vazia, produz um erro e sai;
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Pilhas

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• 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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

2. (2010/CESGRANRIO/PETROBRAS/ANALISTA DE SISTEMAS JÚNIOR — ENGENHA-


RIA DE SOFTWARE) Uma sequência desordenada de números armazenada em um
vetor é inserida em uma árvore AVL. Após a inserção nesta árvore, é feito um percurso
em ordem simétrica (em ordem) e o valor de cada nó visitado é inserido em uma pilha.
Depois de todos os nós serem visitados, todos os números são retirados da pilha e
apresentados na tela.

A lista de números apresentada na tela está


a. Ordenada ascendentemente de acordo com os números.
b. Ordenada descendentemente de acordo com os números.
c. Na mesma ordem do vetor original.
d. Na ordem inversa do vetor original.
e. Ordenada ascendentemente de acordo com sua altura na árvore.

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

Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

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.

São retirados os elementos do topo na seguinte ordem: 3, 2 e 1. Ou seja, a lista de núme-


ros apresentada na tela está eles ordenada descendentemente de acordo com os números.
25m

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

As estruturas de dados é a base para o aprendizado de banco de dados e outras estrutu-


ras mais elaboradas. As filas é um tópico de algoritmos e estruturas de dados.

REFERÊNCIA

São referências dessa matéria o livro de Tenenbaum e alguns resumos encontrados no


tutorials point. O material de Tenenbaum é considerado profundo demais, mas os materiais
mais curtos acabam atendendo o aprendizado muito bem.

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

A estrutura é fechada, como se fosse um cano, onde só se opera pelas extremidades.


Como nas pilhas, uma fila também pode ser implementada usando vetores, listas ligadas,
ponteiros e estruturas. O vetor possui um tamanho fixo após a instanciação, mas a fila também
poderia ser programada usando uma lista ligada, que possui um cumprimento mais dinâmico.

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:

• enqueue() — adicionar (armazenar) um item à fila;


• dequeue () — remover (acessa) um item da fila.

São necessárias mais funções para tornar a operação da fila acima mencionada efi-
ciente. Estas são:

• peek() — pega o elemento na frente da fila sem removê-lo;

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.

• isfull () — verifica se a fila está cheia;


• isempty() — verifica se a fila está vazia.

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:

• Etapa 1 — Verifique se a fila está cheia;


• Etapa 2 — Se a fila estiver cheia, produz erro de estouro e sai;
• Etapa 3 — Se a fila não estiver cheia, aumente o ponteiro traseiro para apontar para o
próximo espaço vazio;

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

• Etapa 5 — Retorne o sucesso.

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:

• Etapa 1 — Verifique se a fila está vazia;


• Etapa 2 — Se a fila estiver vazia, produz um erro de fluxo insuficiente e sai;
• Etapa 3 — Se a fila não estiver vazia, acessa os dados para onde a frente está
apontando;
• Etapa 4 — Incremente o ponteiro frontal para apontar para o próximo elemento de
dados disponível;
• Etapa 5 — Retorne com sucesso.

Não é necessário apagar o elemento, ele simplesmente será movido.

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.

2. (2013/CESPE/SEGESP-AL/PERITO CRIMINAL-TECNOLOGIA DA INFORMAÇÃO)


Julgue o item a seguir, com relação a estruturas de dados.
As duas operações básicas de uma fila são o empilhamento e o desempilhamento, tam-
bém denominadas, respectivamente, PUSH e POP.

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

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 7
TECNOLOGIA DA INFORMAÇÃO
Árvores I
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ÁRVORES I

Em termos de referências, a mais tradicional é o livro Estruturas de Dados Usando C, de


Tenenbaum.

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

Raiz é o no inicial, no topo, não possuindo nó pai.


Pai é assim chamado por tem nós filhos.
Irmão são os filhos do mesmo pai na árvore: exemplo 54 e 76 são irmão se filhos de 72.
Folha é elemento que não possui filhos.
Subárvore é o conjunto de nós, pertencentes do 17, por exemplo.
O nível corresponde os níveis onde os nós se encontram.
O grau identifica a quantidade de filhos que um nó possui.

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

• Níveis – O nível de um nó representa a geração de um nó. O nó raiz está no nível 0, o


próximo nó filho está no nível 1, o neto está no nível 2 e assim por diante;
• 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;
• Chave – Representa um valor de um nó com base no qual uma operação de pesquisa
deve ser realizada;

Representação da Árvore de Pesquisa Binária

• A árvore Pesquisa Binária exibe um comportamento especial.


• O filho esquerdo de um nó deve ter um valor menor que o valor do pai e o filho direito
do nó deve ter um valor maior que o valor pai.
20m

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

Vamos dar continuidade ao assunto de “Árvores” (estrutura de dados e algoritmos). Na


primeira aula, falamos sobre conceitos básicos (nó, grau e níveis da árvore). Agora, vamos
começar a falar sobre algumas operações possíveis de serem realizadas na árvore.

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:

• Inserir — Insere um elemento em uma árvore/cria uma árvore;


• Pesquisar — pesquisa um elemento em uma árvore;
• Remover — Remove um elemento em uma árvore;

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ó.

• Travessia em pré-ordem — Atravessa uma árvore de maneira pré-ordem;


• Travessia ordenada — Atravessa uma árvore de maneira ordenada;
• Travessia em pós-ordem — Atravessa uma árvore de maneira pós-ordem;

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

Vejamos a implementação do algoritmo de inserção:


insere (arvore r, no *novo) {
if (r == NULL) return novo;
if (r->chave > novo->chave)
r->esq = insere (r->esq, novo);
else
r->dir = insere (r->dir, novo);
return r;
}
No que a inserção é uma chamada recursiva. Não importa quantos elementos há, ele fará
recursivamente até encontrar.

Busca

Sempre que um elemento precisar ser pesquisado, comece a procurar no nó raiz e, se


os dados forem menores que o valor da chave, procure o elemento na subárvore esquerda.
Caso contrário, procure o elemento na subárvore direita. Além disso, siga o mesmo algoritmo
para cada nó.
Note que também haverá uma recursividade. Vejamos como é a implementação:
busca (arvore r, int k) {
if (r == NULL || r->chave == k)
return r;
if (r->chave > k)
return busca (r->esq, k);
else
return busca (r->dir, k);
}
10m

Remoção

Comecemos tratando do caso em que o nó a ser removido é a raiz da árvore. Se a raiz


não tem um dos filhos, basta que o outro filho assuma o papel de raiz. Senão, faça com que
o nó anterior à raiz na ordem e-r-d assuma o papel de raiz.
ANOTAÇÕES

www.grancursosonline.com.br 2
TECNOLOGIA DA INFORMAÇÃO
Árvores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Será mais fácil entender esse algoritmo em sua forma visual:

15m

// Recebe uma árvore não vazia r.


// Remove a raiz da árvore e rearranja a árvore de modo que ela continue sendo
// de busca. Devolve o endereço da nova raiz.

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;
}

// q é nó anterior a r na ordem e-r-d


// p é pai de q
if (p!= r) {
p->dir = q->esq;
q->esq = r->esq;
}
q->dir = r->dir;
free (r);
return q;
}
Suponha, agora, que queremos remover um nó que não é a raiz da árvore. Para remover
o filho esquerdo de um nó x faça:
x->esq = removeraiz (x->esq);
E para remover o filho direito de x faça:
x->dir = removeraiz (x->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

As afirmativas I, II e III são, respectivamente:


a. V, F e V.
b. F, V e F.
c. V, F e F.
d. F, F e F.
e. V, V e F.

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

II – Quando um nó possui grau zero, diz-se que ele é um nó terminal ou folha —


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.
ANOTAÇÕES

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.

Geralmente, percorremos uma árvore para pesquisar ou localizar um determinado item


ou chave na árvore ou para imprimir todos os valores que ela contém.
5m

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

Partimos de A, e seguindo travessia em ordem, passamos para sua subárvore esquerda B.


B também é atravessado em ordem. O processo continua até que todos os nós sejam
visitados. A saída do percurso “em ordem” desta árvore será:
D→B→E→A→F→C→G
10m
ANOTAÇÕES

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

Nesse método de travessia, o nó raiz é visitado primeiro, depois a subárvore esquerda e,


finalmente, a subárvore direita.

Partimos de A, e seguindo percurso pré-ordem, nós primeira visitamos o próprio A e


depois passamos para sua subárvore esquerda B.
B também é percorrido em pré-ordem.
O processo continua até que todos os nós sejam visitados. A saída do percurso de pré-
-ordem desta árvore será:
A→B→D→E→C→F→G

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

Neste método travessia, o nó raiz é visitado por último, daí o nome.


Primeiro, atravessamos a subárvore esquerda, depois a subárvore direita e, finalmente,
o nó raiz.
15m

Partimos de A, e seguindo travessia pós-ordem, nós primeira visitamos a subárvore


esquerda B.
B também é atravessado em pós-ordem.
O processo continua até que todos os nós sejam visitados. A saída do percurso pós-or-
dem desta árvore ser:
D→E→B→F→G→C→A

www.grancursosonline.com.br 4
TECNOLOGIA DA INFORMAÇÃO
Árvores III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Travessia por Nível

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).

Com a saída de uma listagem por nível: 8 3 10 1 6 14 4 7 13.

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.

2. (2006/CESGRANRIO/PETROBRAS/ANALISTA DE SISTEMAS PLENO – ENGENHA-


RIA DE SOFTWARE) Insira as chaves {Lina, Ana, Lia, Ada, Lua, Sol, Cris, Bia, Rita, Mel,
Rosa, Val} em uma árvore binária de busca (considere que a árvore está inicialmente
vazia). Considere agora, a execução dos seguintes percursos sobre a estrutura após a
inserção das chaves.
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

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}

Estão corretos apenas os percursos indicados em:


a. I e II.
b. II e III.
c. I, II e III.
d. I, II e IV.
e. II, III e IV.

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:

I – Item errado, pois, na pré-ordem, o percurso começaria com Lina.


II – Item correto, pois a sequência está em ordem alfabética inversa.
III – Item correto, pois esse seria um percurso aceito.
IV – Item errado, pois, na pós-ordem, a raiz é visitada por último.

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

As árvores binárias de busca são aquelas em que estão ordenados os elementos, à


esquerda do nó estão os elementos menores do que ele e à direita estão os elementos maio-
res. A árvore binária de busca é interessante para ambientes em que ocorra a inserção de
dados de forma constante e se deseja obter uma busca de forma eficiente.
O vetor já oferece essa busca binária, contudo, ele apresenta um problema, visto que a
inserção de dados nele não é muito eficiente. Isso porque o vetor tem um tamanho fixo inicial
e, ao aumentar o seu tamanho, é necessário movê-lo para outra posição de memória.

Árvores AVL
Caso uma árvore binária seja construída a partir de uma lista ordenada teremos algo como:

A estrutura acima é chamada de degenerada.


5m
O desempenho do pior caso da árvore binária de pesquisa é o mais próximo dos algorit-
mos de pesquisa linear, ou seja, O(n).
ANOTAÇÕES

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:

Na segunda árvore, a subárvore esquerda de C tem altura 2 e a subárvore direita tem


altura 0, então a diferença é 2.
Na terceira árvore, a subárvore direita de A tem altura 2 e a esquerda está ausente, então
é 0 e a diferença é 2 novamente.
A árvore AVL permite que a diferença (fator de equilíbrio) seja apenas 1.
Se a diferença na altura das subárvores esquerda e direita for maior que 1, a árvore
deverá ser equilibrada usando algumas técnicas de rotação.
10m

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

rotação simples ou rotação dupla.

Assinale a alternativa correta:


a. F-F
b. F-V
c. V-F
d. V-V

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

2. (2006/CESGRANRIO/DECEA/TÉCNICO DE DEFESA AÉREA E CONTROLE DE TRÁ-


FEGO AÉREO – ANÁLISE DE SISTEMAS) Suponha a seguinte árvore AVL.

A inserção do elemento 30 nessa árvore:


a. aumenta a profundidade da árvore após uma rotação.
b. provoca uma rotação à direita.
c. deixa os nós 02 e 07 no mesmo nível.
d. altera a raiz da árvore (nó 41).
e. torna o nó 33 pai do nó 27.

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

Em suma, provoca uma rotação à direita.

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:

• Elemento – Cada item armazenado em um vetor é chamado de elemento;


• Índice – Cada local de um elemento em um vetor possui um índice numérico, usado
para identificar o elemento.

Representação

Vetores podem ser declarados de diversas formas dependendo da linguagem de progra-


mação, a notação em algoritmo é:
idade:vetor[1..10] de inteiro
Conforme a ilustração acima, a seguir estão os pontos importantes a serem considerados:

• O índice começa com 1;

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.

• O comprimento do vetor é 10, o que significa que pode armazenar 10 elementos;


• Cada elemento pode ser acessado através de seu índice. Por exemplo, podemos
buscar um elemento no índice 6 como 9.
10m

É um conjunto de variáveis do mesmo tipo acessíveis com um único nome.


Armazenadas de forma contínua e ocupando as posições de forma fixas.
Pode-se dizer que vetor é uma matriz unidimensional.
ANOTAÇÕES

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

A seguir estão as operações básicas suportadas por um vetor:

• Travessia – Imprime todos os elementos do vetor, um por um;


• Inserção – Adiciona um elemento ao índice especificado;
• Exclusão – Exclui um elemento no índice especificado;
• Pesquisa – Pesquisa um elemento usando o índice fornecido ou pelo valor;
• Atualização – Atualiza um elemento no índice especificado.

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

A operação de inserção consiste em inserir um ou mais elementos de dados em um vetor;


Com base no requisito, um novo elemento pode ser adicionado no início, no final ou em
qualquer índice do vetor.
Segue uma implementação prática da operação de inserção, na qual adicionamos dados
no final do vetor.

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)

Considere o algoritmo acima, em que M[ ] seja um vetor de valores inteiros e A e B


sejam dois valores inteiros e o primeiro elemento do vetor M esteja localizado na posi-
ção 1, sendo os argumentos passados por referência. Com base nessas informações,
julgue os itens a seguir.
Se X for um vetor com os elementos [1, 2, 4, 8, 16, 32, 64, 128], a chamada da função
func(X,2,6) retornará o valor 62.
ANOTAÇÕES

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 é:.

2. (2010/CESPE/ABIN/OFICIAL TÉCNICO DE INTELIGÊNCIA – ÁREA DE SUPORTE A


REDE DE DADOS) Um array é um conjunto de elementos de tipos homogêneos, ou
seja, todos os seus elementos são do mesmo tipo de dados. Uma estrutura, ou registro,
é um conjunto de elementos heterogêneos, porque seus elementos não são obrigato-
riamente do mesmo tipo de dados.

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

A lista encadeada contém um elemento chamado primeiro.


Cada link carrega um(s) campo(s) de dados e um campo de link chamado a seguir.
Cada link é vinculado ao seu próximo link usando seu próximo link.
O último link carrega um link como nulo para marcar o final da lista.

Tipos de Lista Encadeada:


• Lista encadeada simples – A navegação de itens é apenas para frente;
• Lista duplamente encadeada – Os itens podem ser navegados para frente e para trás;
10m
• Lista encadeada circular – É uma lista duplamente encadeada onde o último item
contém o link do primeiro elemento como próximo e o primeiro elemento tem um link
para o último elemento como anterior.

Endereço de uma lista encadeada


O endereço de uma lista encadeada é o endereço de sua primeira célula.
Se le é o endereço de uma lista encadeada, convém dizer simplesmente que le é uma
lista encadeada.
A lista está vazia (ou seja, não tem célula alguma) se e somente se le == NULL.

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

E aqui está a versão iterativa da mesma função:

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.

2. (2009/COSEAC/DATAPREV/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO –


DESENVOLVIMENTO DE SISTEMAS) Sobre listas encadeadas, é INCORRETO
afirmar que:
a. Os dados são armazenados dinamicamente;
b. São acessadas pelo primeiro nodo da lista;
c. O final da lista faz uma referência para null;
d. Possuem tamanho fixo;
e. Pilhas e filas são versões limitadas de listas encadeadas.

COMENTÁRIO
Não há tamanho fixo, pois são permitidas operações de inclusão e exclusão.
25m

3. (2019/CCV-UFC/UFC/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO) Um dos exem-


plos de estrutura de dados é a lista encadeada simples. Com relação a esse tipo de
lista, é correto afirmar:
a. Possui a característica de que o último elemento da lista possui um ponteiro para o
primeiro elemento da lista.
b. É necessário definir o seu tamanho no momento da sua criação, pois se trata de uma
estrutura de dados estática.
ANOTAÇÕES

www.grancursosonline.com.br 8
TECNOLOGIA DA INFORMAÇÃO
Vetores II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

c. Quando essa estrutura é utilizada, os elementos da lista sempre estarão armazena-


dos sequencialmente na memória física.
d. Na inserção de um novo elemento, é necessário realizar a atualização dos ponteiros
dos elementos envolvidos, não sendo necessário realizar o deslocamento físico dos
elementos.
e. Na recuperação de qualquer elemento da lista, não é necessário percorrer os outros
elementos. Dessa forma, o elemento buscado é acessado diretamente na posição
onde se encontra.

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

O algoritmo de busca é uma maneira de buscar, ou seja, de procurar um elemento dentro


de um conjunto de elementos.

Referências

Esse é um dos livros mais clássicos quando o assunto é estrutura de dados.


5m

Introdução

Um algoritmo de busca é um método para se pesquisar grandes quantidades de dados


e encontrar determinada informação. É importante lembrar que cada vez mais informação é
armazenada em um computador, sendo assim, é importante que os algoritmos sejam otimi-
zados para conseguir encontrar os dados necessários.
ANOTAÇÕES

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.

Busca Sequencial ou Linear

A busca linear é um algoritmo de busca muito simples;


Nesse tipo de busca, é feita uma busca sequencial em todos os itens, um por um;
Cada item é verificado e, se uma correspondência for encontrada, esse item específico
será retornado; caso contrário, a pesquisa continuará até o final da coleta de dados;

15m

É importante saber que essa busca percorre os elementos um a um no sentido da ordem


do vetor ou da lista.
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Algoritmos de Busca
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Eficiência da Busca Sequencial

O número de comparações dependerá de onde o registro com a chave do argumento


aparecer 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” comparações.
Se for igualmente provável que o argumento apareça em qualquer posição determinada
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).

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.

Busca Sequencial em Tabela Ordenada

A eficiência da operação de busca melhora se as chaves dos registros estiverem


ordenadas.
ANOTAÇÕES

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

Reordenação para Melhor Eficiência

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.

Embora seja habitual a recuperação de determinados registros com mais frequência do


que outros, é quase impossível identificar tais registros antecipadamente.
Além disso, a probabilidade de que determinado registro seja recuperado pode mudar
com o passar do tempo.
Sendo assim, seria útil ter um algoritmo que ordenasse continuamente a tabela de modo
que os registros mais acessados fossem deslocados para o início, enquanto os acessados
com menos frequência fossem deslocados para o final.
5m
Mesmo trabalhando com busca sequencial e registros não ordenados, à medida que os
registros forem sendo buscados, o sistema pode movê-los de lugar e colocá-los no início
da lista para um acesso mais rápido. Sendo assim, é possível encontrar cenários em que a
busca sequencial é mais adequada.
Existem dois métodos de busca que fazem essa operação.
Um deles é conhecido como método mover-para-frente. Nesse método, sempre que uma
pesquisa obtiver êxito o registro recuperado será removido de sua atual posição na lista e
colocado no início da lista.
É importante lembrar que o termo “mover-para-frente” significa levar o registro para o
início da lista, pois na próxima busca ele será encontrado com maior eficiência.
O outro método é a transposição, na qual um registro recuperado com sucesso é trocado
pelo registro imediatamente anterior.
Esses dois métodos se baseiam no fenômeno observado de que um registro recuperado
será provavelmente recuperado outra vez.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Algoritmos de Busca II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Avançando tais registros para o início da tabela, as recuperações subsequentes serão


mais eficientes.
O raciocínio do método mover-para-frente é que, como o registro será provavelmente
recuperado mais uma vez, ele deve ser colocado na posição dentro da tabela na qual a recu-
peração seja mais eficiente.
Entretanto, o contra-argumento do método de transposição é que uma única recuperação
não implica necessariamente que o registro será recuperado frequentemente. posicioná-lo
no início da tabela reduzirá a eficiência da busca de todos os outros registros que o precede-
ram anteriormente.
Essas são buscas que dependem do comportamento de utilização do sistema. O mover
para frente adiciona um peso máximo ao registro que tem apenas uma busca. A transposição
é mais equilibrada, pois os registros são lentamente levados para o início da lista à medida
que são buscados.
10m
Avançando um registro apenas uma posição sempre que ele for recuperado, garante-se
que ele avançará para o início da lista apenas se recuperado com frequência.
Para um grande número de solicitações de busca com uma distribuição inalterada de pro-
babilidade, o método de transposição é mais eficiente.
Já o método mover-para-frente dá melhores resultados para um número pequeno a
médio de solicitações e responde mais rapidamente a uma mudança na distribuição da pro-
babilidade.
Por essa razão, o método de mover-para-frente é preferido na maioria das situações que
exige a busca sequencial.

Busca Ordenada

Se a lista estiver em ordem ascendente ou decrescente, várias técnicas poderão ser


empregadas para aumentar a eficiência da operação de busca.
Uma vantagem evidente ao pesquisar uma lista classificada em comparação a uma
não classificada é no caso em que a chave do argumento está ausente.
No caso de uma lista não classificada, são necessárias “n” comparações para detectar
esse fato. No caso de uma lista classificada, só serão necessárias “n/2” comparações (em
média). Na lista ordenada, ao chegarmos no meio da lista, se o elemento não for encontrado,
é possível inferir que o elemento também não será encontrado dali para frente.
ANOTAÇÕES

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.

Busca Sequencial Indexada


15m

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

É importante perceber que, apesar de parecer um algoritmo dispendioso, o computador


trabalha com milhões de registros e isso pode facilitar o seu trabalho.

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:

• A tabela tem que estar ordenada;


• Exige espaço adicional para armazenar a(s) tabela(s) de índices.

Após a inserção ou remoção de elementos da tabela os índices devem ser rearranjados.


20m
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

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.

2. (2018/CESPE/BNB/Especialista Técnico/Analista de Sistema) O algoritmo a seguir


apresenta um exemplo de busca sequencial.
ANOTAÇÕES

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

ALGORITMOS DE BUSCA III

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

É importante lembrar que a recursividade é a possibilidade de um método chamar a


si próprio.
ANOTAÇÕES

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.

Eficiência da Busca Binária

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 chave é aproximadamente log2n.
Sendo assim, podemos afirmar que o algoritmo de busca é O(log n).
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

10m

Busca por Interpolação

Se as chaves estiverem uniformemente distribuídas dentro da lista, a pesquisa por inter-


polaçã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])
Esse código poderá de uma melhor forma e, com isso, é mais eficiente no cálculo da
variável meio.
Se as chaves estiverem uniformemente distribuídas pelo vetor, a busca por interpolação
exigirá uma média de log2(log2 n) comparações e raramente precisará de mais comparações
quando comparada com log2 n da busca binária.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Algoritmos de Busca III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Entretanto, se as chaves não estiverem uniformemente distribuídas, a busca por interpo-


lação poderá apresentar um comportamento médio muito deficiente cujo caso a busca por
interpolação resultará em uma busca sequencial.
15m

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

Boas e más funções de espalhamento

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).

2. (2015/COSEAC/UFF/Técnico de Tecnologia da Informação) Em relação aos algoritmos


de pesquisa em um vetor de N elementos, é correto afirmar que:
a. a pesquisa binária não necessita que o vetor esteja previamente ordenado.
ANOTAÇÕES

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

Árvore Binária de Buscas

É importante notar que a árvore binária de buscas é diferente da árvore de dados. A


árvore binária de buscas é um tipo especial de árvore binária.
É construída de tal forma que, para cada nó:

• Nós com chaves menores estão na sub-árvore esquerda;


• Nós com chaves maiores (ou iguais) estão na sub-árvore direita.

A inserção ou remoção dos nós da árvore deve satisfazer a essa propriedade.


Para a busca de uma chave v na árvore binária de busca:

• Primeiro compare com a raiz;


• Se menor, vá para a sub-árvore esquerda;
• Se maior, para a sub-árvore direita.

Aplica-se o método recursivamente.


5m
ANOTAÇÕES

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.

Inserção em Árvore Binária de Busca

Para inserir um nó na árvore:

• Fazer uma busca com insucesso;


• Alocar um novo nó;
• É necessário saber por qual nó se chegou a NULL:
– Será o pai do novo nó.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Algoritmos de Busca IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

10m

Remoção em Árvore Binária de Busca

Remoção de um nó folha: a exclusão na folha é a mais simples, basta removê-lo da árvore.

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

Na remoção de nó com dois filhos, pode-se operar de duas maneiras diferentes:

• Pode-se substituir o valor do nó a ser retirado pelo valor sucessor (o nó mais à


esquerda da subárvore direita) ou pelo valor antecessor (o nó mais à direita da subár-
vore esquerda), removendo-se aí o nó sucessor (ou antecessor).

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 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ó:

• Nós com chaves menores estão na sub-árvore esquerda;


• Nós com chaves maiores (ou iguais) estão na sub-árvore direita;
• A inserção dos nós da árvore deve satisfazer a essa propriedade.

É 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

2. (2010/CESGRANRIO/PETROBRAS/ANALISTA DE SISTEMAS JÚNIOR/PROCESSOS


DE NEGÓCIOS) Uma lista ordenada de N números é inserida em uma pilha e depois
retirada, sendo que, a cada POP, o elemento retirado é inserido em uma árvore de bus-
ca binária. Após a completa inserção de todos os elementos nesta árvore, são feitas
buscas de números na mesma. O tempo médio de busca de um número nesta árvore é
a. O(1)
b. O(log N)
c. O(N)
d. O(Nlog N)
e. O(N2)
20m

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

Algoritmo de ordenação basicamente se propõe a ordenar uma lista. Exemplo: um bara-


lho misturado que precisa ser ordenado.
Trata-se de um processo que possui várias abordagens distintas, cada qual com o custo
computacional diverso. E mesmo que alguns sejam mais rápidos, todos chegarão no mesmo
final: ordenar a lista.

Referência

Introdução

A ordenação se refere à organização dos dados em um formato específico. Ordenação


não precisa ser numérica, podendo haver uma ordem natural dos elementos. O importante
é que, dentro da lista, todos os elementos estejam obedecendo a ordenação e ser com-
paráveis.
5m
ANOTAÇÕES

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

O algoritmo de classificação especifica a maneira de organizar os dados em uma ordem


específica. As ordens mais comuns estão em ordem numérica (1, 2, 3 etc) ou lexicográfica
(ordem alfabética).
A importância da classificação está no fato de que a pesquisa de dados pode ser otimi-
zada para um nível muito alto, se os dados forem armazenados de maneira classificada.
Em geral, interessa-se na ordenação dos dados para efetuar uma pesquisa mais efi-
ciente. Exemplo disso é que um método de busca ordenada possui uma maior potência em
termos de eficiência.

Ordenação In-place e Not-in-place

Os algoritmos de classificação podem exigir algum espaço extra para comparação e


armazenamento temporário de poucos elementos de dados.
Esses algoritmos não requerem espaço extra e a ordenação ocorre no local, ou por exem-
plo, dentro do próprio vetor.
Isso é chamado de classificação in-place. A classificação por bolha é um exemplo de
classificação in-place. Outro exemplo pode ser visto nas cartas de baralho: imagine juntar as
cartas, misturando-as sem que as cartas saiam das mãos de quem as mistura.
No entanto, em alguns algoritmos de classificação, o programa requer espaço igual ou
superior aos elementos que estão sendo classificados. A classificação que utiliza espaço
igual ou maior é chamada de classificação no-tin-place;
A classificação por mesclagem (merge sort) é um exemplo de classificação not-in-place;
Exemplo: ao embaralhar um baralho, nas mesas a pessoa começa a separar as cartas
por naipes. Com o computador ocorre o mesmo: pode-se separar dados em outras alocações
de memórias para realizar ordenações intermediárias e chegar a uma ordenação final.

Classificação Estável e Não Estável

Se um algoritmo de classificação, depois de classificar o conteúdo, não altera a sequên-


cia de conteúdo repetido que aparece, é chamado de classificação estável.
ANOTAÇÕES

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

Se um algoritmo de classificação, depois de classificar o conteúdo, alterar a sequência de


conteúdo repetido que aparece, é chamado de classificação instável.
10m

Se o 26 azul estava antes do 26 roxo, aquele continuará na mesma ordem.


Imagine que se esteja misturando dois baralhos com cores diferentes e pela face. Se as
cartas que eram iguais não mudaram de lugar ao serem embaralhadas, tem-se uma classi-
ficação estável.
Classificação não estável: no momento de mistura de um baralho de cores distintos, não
há garantia de que as cartas estarão nas mesmas posições originais.
A estabilidade de um algoritmo é importante quando queremos manter a sequência de
elementos originais, como em uma tupla, por exemplo.

Algoritmo de Classificação Adaptativa e Não Adaptativa

Diz-se que um algoritmo de classificação é adaptável, se tirar proveito dos elementos já


‘classificados’ na lista a ser classificada.
ANOTAÇÕES

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

Ao classificar, se a lista de fontes já possui algum elemento classificado, algoritmos adap-


tativos levarão isso em consideração e tentarão não os reordenar.
Um algoritmo não adaptativo é aquele que não leva em consideração os elementos que
já estão classificados.
Eles tentam forçar todos os elementos a serem reordenados para confirmar sua
classificação.
Exemplo da carta: o algoritmo adaptativo observa se as cartas já estão ordenadas. Se
assim estiverem, ele não mais precisará ordenar. Todavia, isso não ocorre com o algoritmo
não adaptativo.

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

Bubble Sort – Classificação por Bolha

A classificação por bolhas é um algoritmo de classificação simples.


Esse algoritmo de classificação é um algoritmo baseado em comparação, no qual cada
par de elementos adjacentes é comparado e os elementos são trocados se não estive-
rem em ordem.
ANOTAÇÕES

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

Bubble Sort – Desempenho

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.

2. (COPESE – UFPI/UFPI/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO/2017) A ideia


da ordenação por bolha (Bubble Sort) é percorrer o vetor de elementos sequencial-
mente e, em cada passagem comparar cada elemento com seu sucessor, fazendo-o
chegar ao topo da sequência. Dado que n é o número de elementos do vetor, a comple-
xidade do pior caso desse algoritmo é
a. O(n)
b. O(n²)
c. O(n+1)
d. O(n log n)
e. O(log n)
ANOTAÇÕES

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

Nesta aula, continuaremos o assunto de “Algoritmos de Ordenação”. Esse é um assunto


bastante interessante, mas que exige muita atenção do candidato. Se você aprender esse
assunto, você conseguirá tirar “de letra” as questões da prova.

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.

Ordenação por Inserção ou Insertion Sort

Este é um algoritmo de classificação baseado em comparação “inplace” estável (não


há necessidade de áreas de memória auxiliar, pois o próprio vetor faz as trocas dentro
dele mesmo).
É mantida uma sub-lista que é sempre ordenada. Por exemplo, a parte inferior de um
vetor é mantida para ser classificada.
Um elemento que deve ser “inserido” nesta sub-lista classificada deve encontrar seu local
apropriado e, em seguida, deve ser inserido lá. Daí o nome da ordenação.
O vetor é pesquisado sequencialmente e itens não classificados são movidos e inseridos
na sub-lista classificada (no mesmo vetor);
Esse algoritmo não é adequado para grandes conjuntos de dados, pois sua complexi-
dade média e no pior caso é de Ο(n²), onde n é o número de itens.

Funcionamento

A lista começa desordenada.


ANOTAÇÕES

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

Vejamos uma lista completa:


ANOTAÇÕES

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

Comparação com Bubble Sort


No Bubble Sort, a cada interação, vários elementos alteram de posição. Observe:

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

void insertionSort(int arr[], int n){


int i, key, j;
for (i = 1; i < n; i++) {
ANOTAÇÕES

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

Ordenação por Seleção


A ordenação por seleção é um algoritmo de classificação não estável simples. Esse algo-
ritmo de ordenação é um algoritmo baseado em comparação “in-place”, em qual a lista é divi-
dida em duas partes, a parte classificada na extremidade esquerda e a parte não classificada
na extremidade direita.
Inicialmente, a parte classificada está vazia e a parte não classificada é a lista inteira.
O menor elemento é selecionado da matriz não classificada e trocado pelo elemento mais
à esquerda, e esse elemento se torna parte da matriz classificada. Esse processo continua
movendo o limite da matriz não classificada por um elemento para a direita.
ANOTAÇÕES

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

O menor elemento da sub-lista à direita foi selecionado e colocado na posição.

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

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;
}
if (num[i]!= num[min]) {
aux = num[i];
num[i] = num[min];
num[min] = aux;
}
}
15m

Ordenação por Seleção ou Selection Sort


ANOTAÇÕES

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

O que será exibido no console quando o valor da variável i for igual a 3?


a. 1 1 11 12 17 4 17 35 43 78
b. 1 12 4 17 11 17 1 35 43 78
c. 1 1 4 78 17 35 43 11 17 12
d. 1 12 35 78 17 4 43 11 17 1
e. 1 1 4 11 17 35 43 78 17 12

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

2. (CS-UFG/UFG/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO/2019) Seja o vetor A


com n elementos (n>5), cujo primeiro elemento está na posição 1 e o último está na posi-
ção n. O algoritmo a seguir, que está escrito em pseudocódigo, busca ordenar o vetor A:
para i = 1 até n–1, faça
min = i
para j = i+1 até n, faça
se A[j] < A[min], então
min = j
fim-se
fim-para
temp = A[i]
A[i] = A[min]
A[min] = temp
fim-para
Essencialmente, o pseudocódigo refere-se ao algoritmo:
a. ordenação por seleção.
b. ordenação por inserção.
c. ordenação por bolha.
d. Quicksort.

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;
}
}
}

3. (CESGRANRIO/PETROBRAS/ANALISTA DE SISTEMAS JÚNIOR/PROCESSOS DE


NEGÓCIO/2018) Dada a sequência numérica (15,11,16,18,23,5,10,22,21,12) para or-
denar pelo algoritmo Selection Sort, qual é a sequência parcialmente ordenada depois
de completada a quinta passagem do algoritmo?
a. [15, 11, 16, 18, 12, 5, 10, 21, 22, 23]
b. [15, 11, 5, 10, 12, 16, 18, 21, 22, 23]
c. [15, 11, 16, 10, 12, 5, 18, 21, 22, 23]
d. [10, 11, 5, 12, 15, 16, 18, 21, 22, 23]
e. [12, 11, 5, 10, 15, 16, 18, 21, 22, 23]

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

ALGORITMOS DE ORDENAÇÃO III

Vamos dar continuidade ao assunto “Algoritmos de Ordenação”, que é bastante interes-


sante e relativamente bem cobrado nas provas, com questões de nível médio de dificuldade.
Nas primeiras aulas, vimos algoritmos de ordenação mais simples, porém pouco eficien-
tes, como Bubble Sort, Insertion Sort e Selection Sort.
A partir desta aula, começaremos a falar sobre algoritmos mais eficientes e rápido e, con-
sequentemente, um pouco mais complicados de serem implementados.

Ordenação por Intercalação / Merge Sort


A ordenação por intercalação é uma técnica de classificação baseada na técnica de divi-
dir e conquistar. A pior complexidade do tempo é (n log n), que é melhor do que os algoritmos
de inserção, de seleção e de bolha.
Primeiro divide-se o vetor em metades iguais e depois as combina de maneira ordenada.
Como o algoritmo usa a recursividade, há um alto consumo de memória e tempo de execu-
ção, tornando esta técnica não muito eficiente em alguns problemas.
Apesar de possuir uma boa performance, por ter que utilizar recursividade, ela acaba
gastando muita memória (monta uma pilha de chamadas muito alta).

Funcionamento
A lista é dividida no meio. Em seguida, cada uma das sub-listas é dividida no meio, até
chegar aos elementos.

Em seguida, as sub-listas são unidas e intercaladas de forma ordenada.

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

06. | para i ← 0 até tamEsq – 1


07. | | Esq[i] ← A[inicio + i] //elementos do subvetor esquerdo
08. | fim_para
09. | para j ← 0 até tamDir – 1
10. | | Dir[j] ← A[meio + 1 + j] //elementos do subvetor direito
11. | fim_para
12. | idxEsq ← 0 //índice do subvetor auxiliar esquerdo
13. | idxDir ← 0 //índice do subvetor auxiliar direito
14. | para k ← inicio até fim
15. | | se(idxEsq < tamEsq)
16. | | | se(idxDir < tamDir)
17. | | | | se(Esq[idxEsq] < Dir[idxDir])
18. | | | | | A[k] ← Esq[idxEsq]
19. | | | | | idxEsq ← idxEsq + 1
20. | | | | senão
21. | | | | | A[k] ← Dir[idxDir] 22. | | | | | idxDir ← idxDir + 1
23. | | | | fim_se
24. | | | senão
25. | | | | A[k] ← Esq[idxEsq]
26. | | | | idxEsq ← idxEsq + 1
27. | | | fim_se
28. | | senão
29. | | | A[k] ← Dir[idxDir]
30. | | | idxDir ← idxDir + 1
31. | | fim_se
32. | fim_para
33. fim_merge
10m
ANOTAÇÕES

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

void mergeSort(int vetor[], int comeco, int fim){


if (comeco < fim) {
int meio = (fim+comeco)/2;
mergeSort(vetor, comeco, meio);
mergeSort(vetor, meio+1, fim);
merge(vetor, comeco, meio, fim);
}
Ademais, perceba o seguinte:
void merge(int vetor[], int comeco, int meio, int fim) {
int com1 = comeco, com2 = meio+1, comAux = 0, tam = fim-comeco+1;
int *vetAux;
vetAux = (int*)malloc(tam * sizeof(int));

while(com1 <= meio && com2 <= fim){


if(vetor[com1] < vetor[com2]) {
vetAux[comAux] = vetor[com1];
com1++;
} else {
vetAux[comAux] = vetor[com2];
com2++;
}
comAux++;
}

while(com1 <= meio){ //Caso ainda haja elementos na primeira metade


vetAux[comAux] = vetor[com1];
comAux++;
com1++;
}
while(com2 <= fim) { //Caso ainda haja elementos na segunda metade
vetAux[comAux] = vetor[com2];
ANOTAÇÕES

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 por Intercalação / Merge Sort

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

Classificação por inserção

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

void shellSort(int array[], int n){


for (int gap = n/2; gap > 0; gap /= 2){
for (int i = gap; i < n; i += 1) {
int temp = array[i];
int j;
for (j = i; j >= gap && array[j - gap] > temp; j -= gap){
array[j] = array[j - gap];
}
array[j] = temp;
}

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 pior complexidade do tempo é (n log n);


• Primeiro divide-se o vetor em metades iguais e depois as combina de maneira ordenada;
• Como o algoritmo usa a recursividade, há um alto consumo de memória e tempo de
execução, tornando esta técnica não muito eficiente em alguns problemas.

2. (CESGRANRIO/BACEN/ANALISTA DO BANCO CENTRAL/ÁREA 1/2010) Uma fábrica


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

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

É um algoritmo de ordenação altamente eficiente e baseia-se no particionamento do


vetor de dados em vetores menores.
Um vetor grande é particionada em dois, um dos quais mantém valores menores que
o valor especificado, chamado de pivô, com base no qual a partição é feita e outro vetor
mantém valores maiores que o valor do pivô.
O Quicksort particiona um vetor e depois se chama recursivamente duas vezes para clas-
sificar os dois sub-vetores resultantes;
Esse algoritmo é bastante eficiente para conjuntos de dados de grande porte, pois
sua complexidade média é O (n Log n) e no pior caso O(n2).
O algoritmo determina um elemento para ser o pivô e vai trocando esses elementos até a
metade da lista, fazendo as comparações e inserindo o pivô em seu lugar certo.
5m
O pior caso possível é que o algoritmo escolha um pivô que esteja desbalanceado, isto
é, muito a direita da lista.

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

É um algoritmo de ordenação baseado em comparação de dados de um Heap Binário.


É semelhante a ordenação por seleção, onde primeiro encontramos o elemento máximo
e colocamos o elemento máximo no final. Repetimos o mesmo processo para o ele-
mento restante.
ANOTAÇÕES

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

Em situações em que há uma restrição muito séria de memória, talvez o HeapSort


seja o ideal.

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.

Está correto APENAS o que se afirma em


a. I
b. II
c. III
d. I e III
e. II e III

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

I – não é de ordem menor do que o tempo médio do algoritmo Bubblesort.


II – o tempo médio é O(n log n).
III – o tempo médio de ambos é O(n log n).

2. (2018/FCM/IFN-MG/PROFESSOR – INFORMÁTICA) Na tabela a seguir, considerando


os métodos de ordenação, que visam a colocar uma lista em ordem para facilitar a bus-
ca de informações nela contidas, associe os métodos à sua respectiva descrição.
Método de Ordenação

(1) Bubble Sort


(2) Insert Sort
(3) Select Sort
(4) Shellsort
(5) Mergesort
(6) Quicksort
(7) Heapsort
20m

I – ( ) Neste método, a lista é subdividida em h-listas, as quais são ordenadas com um


método de ordenação qualquer. Esse procedimento é repetido para valores decres-
centes de h, sendo que o último valor de h tem que ser 1.
ANOTAÇÕES

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.

A sequência correta desta associação é


ANOTAÇÕES

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

a. (2); (5); (4); (6); (7); (1); (3).


b. (4); (7); (5); (1); (6); (3); (2).
c. (6); (2); (3); (5); (1); (7); (4).
d. (3); (6); (7); (4); (5); (2); (1).
e. (7); (4); (1); (2); (3); (5); (6).

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

CONCEITOS DE ORIENTAÇÃO A OBJETOS

É 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.

No mundo de desenvolvimento de sistemas, sempre se tenta criar modelos que repre-


sentem a realidade. Antigamente, visualmente, eles eram mais parecidos com a realidade,
já hoje em dia acabam se afastando um pouco nesse aspecto, no entanto, esses modelos
servem para a organização de ideias e pensar em como implementar um sistema.

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

Por exemplo, existe a programação funcional, em que as interações são representadas


através de funções, e outro modelo, bem difundido, é o orientador de objetos: as entidades
do mundo real são representadas através de objetos no mundo da programação.
ANOTAÇÕES

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.

• Identificar o estado e o comportamento de objetos do mundo real é uma maneira de


começar a pensar em termos de programação orientada a objetos.

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.

Na figura, o exemplo é uma bicicleta. Pode-se verificar a velocidade, 18 mph, a rotação


do pedal, 90 rpm, e qual a marcha atual, 5th gear. Logo, há o método de change gears, que
10m
altera a marcha, o método brake, em que bicicleta é freada e reduz a velocidade, e o método
change cadence, em que a cadencia da pedalada é modificada.
ANOTAÇÕES

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;

Quando os sistemas foram desenvolvidos em maior escala, se percebeu que o grau de


complexidade aumentou e as interações muito íntimas entre as funções apresentaram erros
de manutenibilidade.

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.

• Esconder informações: interagindo apenas com os métodos de um objeto, os detalhes


de sua implementação interna permanecem ocultos do mundo externo;

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.

• Reutilização de código: se um objeto já existir (talvez escrito por outro desenvolvedor


de software), o usuário poderá usar esse objeto em seu programa;

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.

• Capacidade de conexão e depuração: se um determinado objeto for problemático, o


usuário pode simplesmente removê-lo do seu aplicativo e conectar um objeto diferente
à sua substituição;

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.

Nesse exemplo, a classe bicicleta possui três propriedades: cadência, velocidade e


marcha atual. Assim, como deve estar parada, a cadência e a velocidade estão em zero,
enquanto a marcha está em um, pois deve estar em alguma.
ANOTAÇÕES

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

A partir de alguns métodos, é possível mudar a cadência, acelerar a velocidade, aplicar


o freio. Além disso, essa classe irá proporcionar a forma para outras bicicletas, que serão as
instâncias dessa bicicleta em questão.
20m

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

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.

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

CONCEITOS DE ORIENTAÇÃO A OBJETOS II

CONCEITOS MAIS DETALHADOS SOBRE ORIENTAÇÃO A OBJETOS

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.

O encapsulamento protege os dados do objeto do uso arbitrário e não intencional;



• O encapsulamento é o resultado (ou ato) de ocultar do usuário os detalhes da imple-
mentação de um objeto;
Para exemplificar, podemos citar o sistema de marchas de uma bicicleta. É um sis-
tema pré-estabelecido, ou seja, não permite alterações de marcha além das que já estão
disponíveis.
• O encapsulamento é importante porque separa a maneira como um objeto se com-
porta da maneira como ele é implementado;
Para exemplificar, podemos citar o sistema de marchas de um carro. O usuário sabe
como trocar as marchas, porém, internamente, ele desconhece o método que o sistema uti-
liza para que essa troca funcione.
• A definição de como implementar os conhecimentos ou ações de uma classe, sem
informar como isto é feito;
5m
ANOTAÇÕES

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).

Herança (Hierarquia entre Objetos)


• Diferentes tipos de objetos têm algo em comum entre si;
• Mountain bikes, bicicletas de estrada e bicicletas tandem (bicicletas de dois lugares),
por exemplo, compartilham todas as características das bicicletas (velocidade,
cadência, marcha);
• No entanto, cada um deles define recursos adicionais que os tornam diferentes;
• A programação orientada a objetos permite que as classes herdem o estado e o com-
portamento comumente usados de outras classes.

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
}

*A classe Mountain Bike “estende” a classe Bicycle (“extends”), diferente da Interface


que, ao invés de “estender” (“extends”), “implementa” (“implements”).

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

2. (QUADRIX/CRM-PR/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO/2018) Acerca


da análise orientada a objetos, julgue o item subsequente. Com a herança, é admitido
estabelecer relações entre classes, permitindo o compartilhamento de atributos e ope-
rações idênticas.

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.

O que é teste de software?

O teste de software é um processo de verificação e validação de que um aplicativo ou


programa de software:

 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

Exemplo: software de uma calculadora é solicitado, mas é entregue o Paint do Windows.


O software até funciona bem, mas o que era necessário era a calculadora. Apesar de o sof-
tware não dar erro, o que se precisava era de outro software.

2. Funciona conforme o esperado;


Exemplo: software de uma calculadora é solicitado e é entregue, logo, a primeira parte
está correta. Essa calculadora faz os cálculos corretos? Retorna os valores que deveria retor-
nar? Essa é a segunda parte.
5m
3. Identifica defeitos, falhas ou erros importantes no código do aplicativo que devem ser
corrigidos.
Muitas vezes se imagina que o teste é feito durante o desenvolvimento, mas existem
alguns testes que são feitos quando o teste já foi entregue. Dependendo do caso, pode até
ser válido, mas não é uma situação muito comum.
Por que não é feito depois? Tomará um tempo do desenvolvimento? Sabe-se que o custo
de se corrigir uma falha/defeito quando o software já está entregue é muito mais alto. O
ideal é que os testes comecem a ser feitos desde o início do desenvolvimento do aplicativo.
O teste deve ser feito em todas as fases do desenvolvimento. O ideal é fazer as correções
antes da entrega ao cliente para que a empresa não tenha nenhum tipo de problema.
Ao se fazer os testes aos poucos, o custo de correção será bem menor.
O que é teste de software?

• Teste é o processo de executar um programa com o intuito de encontrar defeitos;


• Também denominado de atividade de verificação e validação (V&V), que destina-se a
mostrar, respectivamente, que um produto de software está de acordo com suas espe-
cificações e que ele atende às expectativas de todas as partes envolvidas no sistema;
• Executar uma implementação de software com os dados de teste e examinar suas
saídas e comportamento operacional, a fim de verificar se ele está funcionando con-
forme o esperado;

Exemplo: software de uma calculadora é solicitado. Deve-se testar. Usam-se alguns


dados de testes (tanto de input quanto de output) que já se sabe estarem corretos e não
foram retornados para aquele software. Pega-se então uma outra calculadora, algum outro
ANOTAÇÕES

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

• Avalia, de forma quantitativa, a qualidade de um produto de software;


• Através dos relatórios de resultado da execução dos testes é possível obter percentu-
ais de testes que estão passando, falhando ou que não puderam ser executados para
um conjunto de requisitos como forma de mensurar a cobertura dos testes;
• O resultado da execução dos testes pode representar confiança na qualidade do sof-
tware caso sejam encontrados poucos ou nenhum defeito.

Em geral, quando se executam os testes (parte de implementação) são gerados relató-


rios que têm duas partes importantes.
Índice de cobertura: as linguagens de programação ou frames, em geral, têm possibi-
lidade de instrumentação para se verificar o quanto do código-fonte foi coberto quando se
executam os testes.
Exemplo: teste da calculadora do Windows. Poder-se-ia fazer um teste só. Colocou-se o
2, digitou-se o + e o outro 2 e deu 4. A calculadora está perfeita, 100% funcional. Entretanto,
é pouco, pois o teste foi feito em uma operação de soma e há n outras operações naquela
calculadora. Apesar de o teste ter um índice muito alto de acerto (100%), tem um índice de
cobertura muito baixo (cobriu apenas a operação de soma e só com números positivos. E se
se somassem números negativos?).
Em geral, em um software e na estrutura de testes, principalmente nas grandes empre-
sas, permite-se que se tenha tanto o índice de cobertura quanto o de execuções bem suce-
didas de testes.
Em geral, para o índice de cobertura, é muito difícil atingir 100% (o software é complicado
de se testar etc.). Assim, existem índices mínimos que são atribuídos (70, 80, 90%).
ANOTAÇÕES

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.

Propósitos dos testes

• O teste de software tem três finalidades principais:


– Verificação;
– Validação;
– Detecção de defeitos.

Verificação

O software foi feito corretamente?

• Confirma que o software atende às especificações técnicas.


• Uma “especificação” é uma descrição de uma função em termos de um valor de saída
mensurável, dado um valor de entrada específico sob pré-condições específicas.

Validação

Fizemos o software correto?

• Confirma que o software atende aos requisitos de negócios.

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 exemplo simples de um requisito de negócios é “Depois de escolher um nome de


filial, as informações sobre os gerentes de contas de clientes da filial aparecerão em
uma nova janela”.

É 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

• É uma variação entre o resultado esperado e o real.


• A fonte final do defeito pode ser atribuída a uma falha introduzida nas fases de especi-
ficação, projeto ou desenvolvimento (codificação).

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)

• Uma ação humana ou do sistema que produz um resultado incorreto;


• Estas ações podem surgir por falta de experiência, informação, entendimento ou até
mesmo por falta de atenção. O erro ocasionará um defeito.

Defeito (bug ou falta)

• 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

Quando se codifica o software (exemplo da calculadora) implementou-se erradamente a


subtração (ela está fazendo produto) e por alguma razão, o usuário nunca utilizou a subtra-
ção. É um defeito que não apareceu em nenhum momento porque o usuário nunca acionou
a operação de subtração.
Quando o usuário aciona a funcionalidade que tem um defeito causado por um erro ou
engano, acontecerá uma falha.

Falha

• Desvio, em um componente ou sistema, do seu resultado ou serviço esperado.


• A falha ocorre justamente quando a parte do sistema defeituoso é executada. Caso o
código defeituoso não seja executado, o sistema pode nunca falhar e o defeito jamais
ser descoberto.
• Com relação aos requisitos de software, funcionalidades especificadas de forma
incorreta ou incompleta resultam em resultado diferente do esperado pelo cliente e/
ou usuário.

A falha é aquilo que se observa, a tela azul do Windows.


Poderia haver um erro de software, um defeito que nunca foi acionado e que ao sê-lo, o
software geraria a falha (o sistema deu erro).
O que se faz com os testes é tentar fazer com que as falhas ocorram antes de chegar ao
cliente. Sabe-se que nem sempre isso é possível. Eventualmente, algumas falhas passam
despercebidas e há a necessidade de correção posterior.

Fases/Níveis: Teste de Unidade

• Componentes individuais (ex.: métodos e classes) são testados.


• Tem por objetivo testar a estrutura interna e o comportamento do módulo e é geral-
mente realizado pelo desenvolvedor durante a implementação do software.

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

• As unidades testadas independentemente agora são testadas de forma integrada;


– Os testes antes feitos individualmente, testando-se cada módulo, serão agora feitos
com os módulos, verificando se eles conversam entre si.

• É recomendada a integração das unidades de forma incremental e este teste é reali-


zado geralmente por um desenvolvedor.

O desenvolvedor testará seus métodos e classes de forma individual (teste unitário),


depois fará um teste de integração para verificar se aquela classe, aquele método que já foi
testado está integrando corretamente com o restante do sistema.
Ele aumentou um pouco seu escopo no teste de integração, e depois, aumentando mais
ainda o escopo, terá o teste de sistema.

Teste de Sistema

• O software integrado com o ambiente operacional, similar ao de produção, é testado.


• Geralmente, é um teste “caixa preta”, executado por um testador de sistemas após a
liberação de um executável do software.
ANOTAÇÕES

www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• É recomendado que o testador seja membro de um grupo independente de testes.

Exemplo: TCC. Serão testadas as frases quanto à correção gramatical, começando


pelas palavras (se estão escritas corretamente), passando-se para as frases (se estão escri-
tas corretamente), se os parágrafos estão certos. Outra pessoa irá analisar a coesão toda
do texto, que é o teste de sistema. Por isso, é importante que seja realizado por alguém de
fora da equipe, para que não haja nenhum vício ou para que não se coloque nenhum vício
de forma indesejada.

Teste de Aceitação

• O software é testado pelo usuário final.


• É realizado um teste “caixa preta” a fim de demonstrar a conformidade com os requisi-
tos de software.

Aqui, é praticamente o final, para verificar se haverá aceitação por parte do usuário final.

Tipos de Testes

• Funcionalidade: possibilita verificar se a aplicação está em conformidade com os seus


requisitos.
• Usabilidade: testa a aplicação da perspectiva da conveniência do usuário final. Verifica
se as cores e botões estão agradáveis. É a experiência final do usuário em relação
ao software.
• Confiabilidade: verifica se a aplicação se comporta de maneira consistente e previsível.
• Performance: verifica o comportamento da aplicação numa condição de carga (rodará
rápido, aguentará a execução?).
25m
• Suportabilidade: testa a habilidade de a aplicação suportar várias plataformas, configu-
rações e ambientes diferentes.

Se se estiver fazendo um site com vários navegadores, verificará se a aplicação é supor-


tada por um ou mais navegadores.
ANOTAÇÕES

www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Às vezes, é comum se desenvolver um site e só testá-lo no navegador que está instalado


na máquina. Quando o usuário final usa em outro navegador (IE, Safari etc.) aparecem vários
problemas.
Caixa branca: o teste é feito com acesso ao código-fonte, ou seja, vendo como aquele
código-fonte foi desenvolvido.
Caixa preta: teste feito sem ter acesso ao código fonte. O testador recebe somente o
executável, não tendo conhecimento de como aquele código-fonte foi feito e testa em cima
só daquele.

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.

Em geral, tem-se o teste feito pelo desenvolvedor e depois, principalmente em empresas


maiores, o teste feito pela equipe de teste, que é separada (muitas vezes a equipe nem é de
desenvolvedores).

Teste Funcional (caixa-preta)

• É baseado nos requisitos funcionais do software.


• Esta técnica não está preocupada com o comportamento interno do sistema durante a
execução do teste, mas sim com a saída gerada após a entrada dos dados especificados.
ANOTAÇÕES

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.

Exemplo: teste de funcionalidade da calculadora do Windows. Serão testadas todas as


entradas possíveis para a soma no operador 1 e 2. Isso é impossível. Então, deve-se fazer
uma amostra e dar a maior variação possível, até porque há um limite de tempo para fazer
essa operação.

• Essa técnica de teste apresenta-se como necessária durante o desenvolvimento de


um sistema, contudo, por sua natureza, mostra-se insuficiente para identificar certos
riscos num projeto de software;

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.

Teste Estrutural (caixa branca)

• O teste estrutural, ou de caixa-branca, é projetado em função da estrutura interna do


sistema, e por isso permite uma verificação mais precisa do funcionamento do software.
• Este tipo de teste é desenvolvido analisando o código-fonte e elaborando casos de
teste que cubram as funcionalidades do componente de software.
– Nesse caso, tem-se acesso ao código-fonte para realizar os testes. Por isso, em
geral, é feito até pelo desenvolvedor, que tem a possibilidade de entender esse
código-fonte.

• Essa técnica é vista como complementar à técnica funcional e informações obtidas


pela aplicação desses critérios têm sido consideradas relevantes para as atividades de
manutenção, depuração e para a confiabilidade de software.
30m
ANOTAÇÕES

www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Testes de Software
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• A técnica de teste de caixa branca é recomendada para as fases de teste de unidade e


teste de integração, cuja responsabilidade principal fica a cargo dos desenvolvedores
do sistema, que por sua vez conhecem bem o código produzido.

O PULO DO GATO
Caixa preta e branca são temas muito recorrentes em provas.

Teste de Regressão

• O teste de regressão é uma técnica aplicável a cada alteração realizada no software,


cujo objetivo é garantir que as mudanças realizadas nessa nova versão não gerarão
erros em componentes prontos e testados.

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

• O teste de estresse é destinado a avaliar como o sistema responde em condi-


ções anormais.
• Basicamente, é um teste de carga abrangendo cargas de trabalho extremas, memória
insuficiente, hardware e serviços indisponíveis ou recursos compartilhados limitados.
• Normalmente, esses testes são executados para compreender melhor como e em
quais áreas o sistema será dividido, para que os planos de contingência e a manuten-
ção de atualização possam ser planejados com bastante antecedência.
• A utilização dessa técnica é imprescindível para projetos que desenvolvam sistemas
críticos, que necessitem de alta eficiência e disponibilidade. A aplicação dessa técnica
é indicada durante a fase de teste de sistema (no final).

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

• Essa técnica de teste deve validar os requisitos de segurança, visando identificar as


vulnerabilidades do sistema.

O sistema pode ser hackeado?

• Os objetivos desses testes são: prevenir ataques, detectar vulnerabilidades e preparar


medidas de contingência para casos de falhar. A aplicação dessa técnica é indicada
durante as fases de testes de integração e de sistema.
ANOTAÇÕES

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.

35m DIRETO DO CONCURSO


1. (2018/CESPE/FUB/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO) Julgue o item que
se segue, relativo a disciplinas do processo de desenvolvimento de software.
Os testes de caixa-branca buscam verificar o comportamento interno do software, ou
seja, os elementos relacionados ao código-fonte desse software.

2. (2013/CCV-UFC/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO – ENGENHARIA DE


SOFTWARE) O principal objetivo do teste de regressão de software é:
a. Identificar defeitos ou erros no sistema em situação de sobrecarga do sistema (ou
parte dele).
b. Verificar a existência de defeitos após alterações em um sistema (ou parte dele)
já testado.
c. Identificar defeitos através da inspeção do código-fonte do sistema (ou parte dele).
d. Identificar defeitos através da análise estática do sistema (ou parte dele).
e. Verificar a existência de defeitos no fluxo excepcional.

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

O que é uma Revisão de Código (Code Review)

• Quando um desenvolvedor termina de trabalhar em um problema, outro desenvolvedor


examina o código e considera questões como:
– Existem erros lógicos óbvios no código?
– Olhando para os requisitos, todos os casos estão totalmente implementados?
– Os novos testes automatizados são suficientes para o novo código? Os testes auto-
matizados existentes precisam ser reescritos para levar em conta as alterações
no código?
– O novo código está em conformidade com as diretrizes de estilo existentes? Existem
algumas ferramentas, chamadas linters de código, que verificam essas diretrizes,
algo cada vez mais automatizado. Entretanto, existem também outras estratégias,
como a de fluxo de código, que podem não ser automatizadas e conter erros.

Em geral, esse processo de code review é feito após os testes automatizados e de as


ferramentas de linter terem analisado previamente o código, porque muitas vezes quem vai
fazer a revisão de código é um colega mais sênior, porém, mesmo que seja no mesmo nível,
esses erros mais óbvios (como de compilação, de linter e de teste) têm que ser pegos auto-
maticamente antes para não chegarem à pessoa.

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.

• Asequipes ágeis podem obter enormes benefícios porque o trabalho é descentralizado


em toda a equipe;
ANOTAÇÕES

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

• As revisões de código ajudam a facilitar o compartilhamento de conhecimento em toda


a base de código e em toda a equipe.

Principalmente nas equipes ágeis, trata-se da capacidade de um colega assumir o tra-


balho do outro, seja para suporte ou para continuidade de codificação. Quando outro colega
conhece melhor a base de código e não apenas a pequena parte com a qual está traba-
lhando, ele consegue ir no backlog das tarefas e pegar uma próxima tarefa para fazer mesmo
que não conheça aquilo, pois ele já trabalhou na parte de revisão de código. Assim, um enge-
nheiro full-stack pode pegar um trabalho de front-end, de servidor, dentre outros.

Compartilhar Conhecimento

À medida que as revisões de código expõem os desenvolvedores a novas ideias e tecno-


logias, eles escrevem códigos cada vez melhores.

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.

• À medida que novos recursos são adicionados ao código existente, o desenvolvedor


pode fornecer melhores estimativas;
• Qualquer revisor de código também é exposto à complexidade, a problemas conheci-
dos e preocupações dessa área da base de código;
• O revisor de código, então, compartilha o conhecimento do desenvolvedor original
dessa parte da base de código.
15m
ANOTAÇÕES

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

Orientação de Novos Engenheiros

Principalmente nas empresas grandes, sempre estão chegando novos engenheiros na


equipe e eles terão um conhecimento muito básico da base de código. Com o processo de
revisão, os engenheiros mais experientes podem orientar esses membros mais novos.
Muitas vezes, as equipes têm um conhecimento oculto dentro do código que só aparece
durante a revisão. Pode acontecer de se desejar documentar, escrever, colocar comentários
sobre o porquê de aquilo estar daquela forma, porém nem sempre é possível, de modo que
aquele conhecimento acaba ficando na cabeça de algumas pessoas; isso é natural, pois não
há como fazer o código perfeito. Assim, também ocorre a transmissão oral do conhecimento,
o que ajuda a garantir que novos insights e novos conhecimentos sejam compartilhados com
essa base de código.
Lembre-se de que a revisão de código não ocorre apenas por parte de um membro sênior
da equipe revisando um código de um membro júnior, devendo acontecer de todas as dire-
ções. Membros mais novos, com novos olhos, mesmo sendo por vezes subestimados, des-
cobrem áreas retorcidas e desgastadas pelo tempo da base de código que precisam de uma
nova perspectiva.

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.

Over-the-Shoulder / Sobre o ombro


20m

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.

Auxiliado por Ferramenta

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.

Futuro da Revisão do Código

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

2. (FCC/TCE-PR/ANALISTA DE CONTROLE/INFORMÁTICA/2011) Sobre o processo de re-


visão de código é correto afirmar:
a. Desenvolver software, adotando uma prática de revisão de fato, eleva o número de
defeitos detectados nas fases iniciais do ciclo de vida, o que auxilia o cumprimento de
custo e prazo acordados com o cliente, assim como a aderência aos requisitos defi-
nidos e consequente satisfação com o produto entregue.
b. Revisões constantes sempre impedem uma padronização do código, dificultando
uma posterior manutenção.
c. O esforço gasto para a execução das etapas de revisão é pequeno, podendo chegar
no máximo a 5% do desenvolvimento de um software.
d. É necessário alocar funcionários com alto conhecimento técnico para a realização da
revisão de códigos desenvolvidos por programadores inexperientes.
e. A análise dinâmica de código é um método que visa revisar um código fonte apenas
no final de cada fase do projeto para buscar por vulnerabilidades e potenciais defei-
tos, garantindo que os desenvolvedores programem na próxima etapa de forma cor-
reta e segura.

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

• A palavra “DevOps” foi formada pela combinação de “desenvolvimento” e “operações”,


que fornece um ponto de partida para entender exatamente o que as pessoas geral-
mente querem dizer quando dizem “DevOps”.

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.

• Notavelmente, o DevOps não é um processo, uma tecnologia ou um padrão.


5m
• Muitos se referem ao DevOps como uma “cultura”; também se usa o termo “movimento
DevOps” ao falar sobre tópicos como taxas e tendências de adoção para o futuro
e “ambiente DevOps” para se referir a uma organização de TI que adotou uma cul-
tura DevOps.

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.

De onde veio o DevOps?

• 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

Quais problemas levaram à criação do DevOps?

• 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

DevOps, Agile e SRE

• 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.

- DevOps é como as organizações de engenharia colaboram usando equipes mul-


tifuncionais. O DevOps começa com a cultura e direciona para as ferramentas;
- SRE (Engenharia de Confiabilidade do Sistema) é como as organizações de
engenharia automatizam, confiando operações altamente dimensionadas a pes-
soas com uma mentalidade de engenharia de software. O SRE começa com fer-
ramentas e impulsiona a cultura;
- As variantes do DevOps (como “SecDevOps”) envolvem a inserção ou adição
de outra organização/prática no início do ciclo de vida de desenvolvimento de
software (SDLC), e a prevalência desses diferentes tipos de DevOps se refere à
crescente integração de funções nas organizações modernas;
ANOTAÇÕES

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.

A figura lembra “infinito”.

Como o DevOps “funciona”?

• Como todas as culturas, o DevOps incorpora muitas variações sobre o tema.


• No entanto, a maioria dos observadores concorda que os seguintes recursos são
comuns a praticamente todas as culturas de DevOps: colaboração, automação, inte-
gração contínua, entrega contínua, teste contínuo, monitoramento contínuo e
correção rápida.

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

• A operação e desenvolvimento e TI trabalham juntas;


• Embora a desconexão entre esses dois grupos tenha sido o ímpeto para sua criação,
o DevOps se estende muito além da organização de TI, pois a necessidade de colabo-
ração se estende a todos os interessados na entrega de software (não apenas entre
desenvolvedores e operadores, mas todas as equipes, incluindo teste, gerenciamento
de produtos e executivos).
• A base do sucesso do DevOps é o quão bem as equipes e os indivíduos colaboram em
toda a empresa para fazer as coisas de maneira mais rápida, eficiente e eficaz.

Obs.: o DevOps tem o foco nesse sentido.

Automação
5m

• O DevOps depende muito da automação - e isso significa que são necessárias


ferramentas.
• Ferramentas que se constrói e ferramentas que se compra. Ferramentas de código
aberto e ferramentas proprietárias. O DevOps conta com cadeias de ferramentas para
automatizar grandes partes do processo de desenvolvimento e implantação de sof-
tware de ponta a ponta.

Obs.: o DevOps compreende bastante a cultura organizacional da empresa, e não somen-


te um conjunto de ferramentas em execução naquele momento.

• Como as ferramentas do DevOps são incrivelmente impressionantes, há uma tendên-


cia de ver o DevOps apenas como uma coleção de ferramentas. Embora seja verdade
que o DevOps dependa de ferramentas, o DevOps é muito mais do que isso.

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.

• É uma prática de desenvolvimento de software do DevOps, na qual as alterações


de código são criadas, testadas e preparadas automaticamente para uma liberação
para produção.
• Ele se expande com a integração contínua, implantando todas as alterações de
código em um ambiente de teste e/ou em um ambiente de produção após o estágio de
construção;
• Quando a entrega contínua é implantada corretamente, os desenvolvedores sempre
terão um artefato de construção pronto para implantação que passou por um processo
de teste padronizado;

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

• Dado o grande número de implantações em um sistema de entrega contínua, não há


como implementar o tipo de teste rigoroso de pré-lançamento normalmente exigido
nas abordagens de desenvolvimento em cascata.

Obs.: quando há um desenvolvimento em cascata, que é um modelo mais antigo, há um


processo de teste bem mais longo.

• Em um ambiente DevOps, as falhas devem ser encontradas e corrigidas em tempo


real. Como se faz isso? Uma grande parte é o monitoramento contínuo.
• Com o monitoramento contínuo, as equipes medem o desempenho e a disponibilidade
do software para melhorar a estabilidade. O monitoramento contínuo ajuda a identifi-
car as causas principais dos problemas rapidamente, para prevenir proativamente as
interrupções e minimizar os problemas do usuário.

Obs.: é preciso monitorar o software para detectar a falha e conseguir fazer uma correção
o mais rápido possível.

Concluindo

• O DevOps não é uma meta, mas um processo interminável de melhoria contínua.


• Após uma década do grande experimento DevOps, conclui-se que o DevOps chegou
para ficar - e por algumas boas razões.
15m
• O DevOps conseguiu integrar usuários de negócios, desenvolvedores, engenheiros de
teste, engenheiros de segurança e administradores de sistemas em um único fluxo de
trabalho focado em atender aos requisitos do cliente.
• Desenvolvedores e administradores de sistemas param de discutir e começam a se
apoiar, diminuindo a pressão sanguínea.
• Os gerentes de negócios ficam felizes porque obtêm os produtos de software neces-
sários para vender produtos e serviços.
• Os executivos observam melhoras nas métricas de receita, satisfação do cliente e con-
fiabilidade do sistema.
ANOTAÇÕES

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.

2. (2019/CESPE/SLU-DF/ANALISTA DE GESTÃO DE RESÍDUOS SÓLIDOS/INFORMÁ-


TICA) Com relação a DevOps e TOGAF, julgue o seguinte item.

Em DevOps, o princípio monitorar e validar a qualidade operacional antecipa o monito-


ramento das características funcionais e não funcionais dos sistemas para o início do
seu ciclo de vida, quando as métricas de qualidade devem ser capturadas e analisadas.

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

DESENVOLVIMENTO WEB – GITFLOW

GITFLOW

O que é o Gitflow?

O Gitflow é um modelo alternativo de ramificação do Git que consiste no uso de ramifica-


ções de recursos e várias ramificações primárias;

Obs.: O Git é a ferramenta de versionamento de código. Existem outros servidores que


ajudam a gerenciar, como o GitHub e, além disso, existe outra camada no Git que
são as estratégias de gerenciamento de branches.
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Desenvolvimento WEB – GITFLOW
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• O Gitflow é um modelo de gerenciamento das “branches” do Git que foi gerenciado há


algum tempo. Atualmente, existem outros modelos de ramificação de “branches”.
• A “branch” principal é a master, que representa as versões finais – em geral, o código
que está implantado em produção; a branch “develop” é de desenvolvimento e prepara
a próxima versão; e as “feature branches” são de recursos ou de features.
• A partir da “branch” 0.1, é feita a “branch” de desenvolvimento. Um profissional irá
incluir o cliente e outro profissional irá incluir o produto, cada um criando uma “feature
branch”. Esses profissionais criando as “features branches” a partir da “branch delevop”.
• Quando o trabalho está relativamente pronto, faz-se um merge à “branch develop”.
• Depois, é criada uma release. Se há correção a ser feita, o trabalho volta para a “fea-
ture branch” e, depois, é devolvido para a “branch develop”.
5m
• Na segunda entrega, é criada uma “branch master”.
• Se a versão estiver em produção e der problema, será criada uma “hotfixes” que
também deverá ser enviada para o “develop”.
• Basicamente, a “master” e a “develop” são branches contínuas, sempre estão ativas.
As features são implementadas nas “feature branches”; ao fechar uma versão, é criada
uma branch “release”; depois, ela é enviada para a produção e encerrada.

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

• O projeto começará com duas branches: “main” e “develop”.


• Com o comando “git branch develop”, é criada uma branch “develop”. Depois, é neces-
sário mandá-la para o servidor central.
• Na branch “main” serão criadas as versões e a branch “develop” receberá os trabalhos
dos outros profissionais.

• 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”.

Criação da ramificação de recurso

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

Finalização da ramificação de recurso

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”.

O comando para o “hotfix” é ir na “main” e fazer um “git checkout -b hotfix_branch” ou com


o comando do Gitflow.

Para terminar o código, é necessário fazer o check-out da “main”, o “merge hotfix_branch”,


o check-out da “develop” e o “merge hotfix_branch”. O código está jogando o “hotfix” na
“main” e na “develop” também, e depois a apaga.

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”.

Se houver um problema na “main” e for necessário fazer um “hotfix”, é necessário fazer o


check-out da “main”, criar o “hotfix” e aceitar o “hotfix” na “develop” e na “main”.

Resumo

• Uma ramificação develop é criada a partir da main;


• Uma ramificação de lançamento é criada a partir da ramificação de desenvolvimento;
• As ramificações de recurso são criadas a partir da ramificação de desenvolvimento;
• Quando um recurso é concluído, ele é mesclado na ramificação de desenvolvimento;
• Quando a ramificação release é feita, é feito o merge dela na ramificação develop e na
principal;
• Se for detectado um item na main, uma ramificação de hotfix vai ser criada a partir da main;
• Depois que o hotfix for concluído, ele passa por merge para a ramificação develop e à main.

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.

2. (2020/COMPERVE/TJ-RN/ANALISTA DE SISTEMAS SÊNIOR) O git é um sistema de


controle de versão muito utilizado em desenvolvimento de sistemas de software. Sobre
o git, é correto afirmar:
a. O comando git push é utilizado para envio das alterações confirmadas no diretório
local para o repositório remoto.
b. O comando git clone faz a cópia apenas dos arquivos, sendo as informações do repo-
sitório inicializadas como no comando git init.
c. O comando git add faz a confirmação das alterações de forma definitiva.
d. O comando git checkout faz uma atualização do diretório local com o diretório remoto.

COMENTÁRIO
b. O git clone irá clonar e inicializar.
c. Refere-se ao commit.
d. Refere-se ao Git fetch.

3. (2019/FCC/TRF-4ª REGIÃO/ANALISTA JUDICIÁRIO/SISTEMAS DE TECNOLOGIA


DA INFORMAÇÃO) Uma Analista de TI está utilizando o software Git para gerenciar o
controle de versões do sistema que está em desenvolvimento. Em condições ideais, ela
digitou os comandos elencados a seguir.

I – git add regrasfichalimpa.html


II – git add trf4css/ III. git add.
III – git commit -m “primeira etapa do projeto do sistema”
IV – git log
ANOTAÇÕES

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 é uma ferramenta para automatizar a infraestrutura de tecnologia da informa-


ção, visando agilizar processos que, antigamente, eram realizados manualmente por pro-
gramadores.
Os dois maiores problemas na área de infraestrutura são a repetitividade das tarefas
e elas serem propensas a falhas humanas; e reproduzir um processo. Para isso, algumas
estratégias da área de desenvolvimento de software foram aplicadas em infraestrutura, sur-
gindo assim ferramentas como Ansible.
5m
O Ansible é uma solução para gerenciar um servidor ou conjunto de servidores contra um
código fonte.

• 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

• Como o Ansible funciona?


– O Ansible se conecta aos seus nós e envia a eles pequenos programas chama-
dos módulos;
– Os módulos são usados para realizar tarefas de automação no Ansible;
– Esses programas são projetados para serem modelos de recursos do estado dese-
jado do sistema;
15m
– Em seguida, o Ansible executa esses módulos e os remove ao terminar;
– O Ansible é uma ferramenta sem agentes, ou seja, não requer instalação de sof-
tware para gerenciamento dos nós;
– O Ansible tem um arquivo de inventário para definir quais servidores deve gerenciar;
– Ele usa o protocolo SSH para se conectar aos servidores e executar as tarefas;
– Depois de se conectar, o Ansible transfere os módulos exigidos pelo comando ou
pelo playbook para serem executados nas máquinas remotas;
20m
– Ele usa templates YAML que podem ser compreendidos pelos usuários, assim eles
conseguem programar a automação de tarefas repetitivas sem precisar aprender
uma linguagem de programação avançada.
ANOTAÇÕES

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:

$ ansible atlanta -a “/sbin/reboot” -f 10


Os comandos ad-hoc permitem executar tarefas em nós remotos sem precisar escrever
um manual. Eles são muito úteis quando é necessário fazer uma ou duas coisas de maneira
rápida e frequente para muitos nós remotos.
25m
No entanto, a forma mais recomendável de se usar o Ansible é colocar um Playbook, um
manual que descreve o que será feito na máquina.

• 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

– As funções do Ansible são um tipo especial de playbook totalmente autossuficiente


e portátil com tarefas, variáveis, templates de configuração e outros arquivos de
suporte necessários para concluir uma orquestração complexa.

�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

Dentro do gerenciamento de software, o Ansible faz parte da área de gerenciamento de


configuração.

• 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

Se em primeiro lugar o Ansible atua em gerenciamento de configuração, em segundo


lugar ele atua em provisionamento. Veja a seguir:

• 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

Outro ponto importante é a implantação do software através do Ansible. Neste caso, o


servidor já está pronto, e é preciso implantar a nova versão do site, por exemplo, em 50 (cin-
quenta) máquinas diferentes. O Ansible seria a ferramenta ideal para um procedimento como
esse. Veja mais abaixo:

• 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.

Outra etapa muito importante na qual o Ansible trabalha é a de orquestraçã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

– A automação da segurança utiliza tecnologia de automação para realizar tarefas


com o mínimo de assistência humana possível, integrando infraestrutura, aplicações
e processos de segurança;
– Equipes de segurança podem usar o Ansible para aplicar correções nos sistemas
afetados de forma rápida e simultânea e, assim, acelerar a resposta a incidentes;
– As equipes de segurança podem configurar um sequência de tarefas que comparti-
lham inventários, playbooks e permissões para automatizar investigações ou corre-
ções por completo.

Veja abaixo algumas terminologias do Ansible:

• 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

apt: name=vim state=latest


20m

• Formato do Playbook
– hosts: all

become: true
tasks:
- name: Update apt-cache

apt: update_cache=yes
- name: Install Vim

apt: name=vim state=latest

• Variables
– hosts: all

become: true
vars:
package: vim
tasks:
- name: Install Package

apt: name={{ package }} state=latest


ANOTAÇÕES

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

apt: name={{ item }} state=latest


with_items:
– vim
– git
– curl
– hosts: all

become: true
vars:
packages: [ ‘vim’, ‘git’, ‘curl’ ]
tasks:
– name: Install Package

apt: name={{ item }} state=latest


with_items: “{{ packages }}”
25m

• Condicionais
– name: Shutdown Debian Based Systems

command: /sbin/shutdown -t now


when: ansible_os_family == “Debian”

• 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

debug: msg=’PHP is NOT installed’


when: php_installed|failed

• 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

service: name=apache2 state=restarted


– name: other handler

service: name=other state=restarted


– name: Change default Apache virtual host

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

É uma aplicação, um software, que permite a realização de criação de infraestrutura


como código (Infrastructure as Code - IaC), ou seja, é possível escrever scripts de infraestru-
tura determinando o que deve ser instalado, quais arquivos, e o terraform tem a finalidade de
reproduzir essa infraestrutura. É uma estratégia muito utilizada para que se tenha infraestru-
tura reprodutiva, especialmente em relação as plataformas Cloud como a Amazon, Google
Cloud entre outras, que demandam a necessidade de criação de cópias do servidor ou de
uma determinada infraestrutura, e o Terraform permite a automatização desse processo.

• 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

• Consiste em gerenciar um conjunto de recursos (computação, rede, armazenamento


etc.) usando a mesma abordagem que os desenvolvedores usam para gerenciar o
código do aplicativo;

É possível a criação de um código fonte que representa determinada infraestrutura em que


é factível sanar essa infraestrutura. É uma prática que se tornou muito popular por causa dos
providers de nuvem pública como a WS, Google, Microsoft. Por exemplo, é possível criar no
ANOTAÇÕES

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

O Terraform é uma ferramenta gratuita encontrada no site da Hashicorp responsável pela


disponibilização de ferramentas importantes como o Vagrant.
ANOTAÇÕES

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.

Esse é um comando de execução utilizado após a execução:

Como é possível executá-lo diretamente por comando:

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”.

Init, plan, e apply

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

Com o arquivo criado, o comando “terraform init”, em seguida a inicialização do backend,


verificar os plugins existentes e se a inicialização foi realizada com sucesso.

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

Na mesma pasta ao executar um cat do arquivo, será mostrado o conteúdo dele.

No final, mostra que apply foi completado.


O comando “-auto-approve” quando executado, dispensa a confirmação por “yes” na
etapa de execução.
Observe a informação que nenhum arquivo foi adicionado, alterado ou destruído, pois o
arquivo já existia no local, ou seja, consegue identificar que não existe ações para realizar.

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

• Um provider funciona basicamente como um driver de dispositivo de um sistema


operacional;
• Ele expõe um conjunto de tipos de recursos usando uma abstração comum, masca-
rando assim os detalhes de como criar, modificar e destruir um recurso praticamente
transparente para os usuários;
ANOTAÇÕES

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

Outro recurso interessante do terraform é a possibilidade de realizar iterações, repetir um


processo. O count e for_each permite repetições.

• 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

• As fontes de dados funcionam como recursos “somente leitura”;

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

• O estado de um projeto do Terraform é um arquivo que armazena todos os detalhes


sobre os recursos que foram criados no contexto de um determinado projeto;
20m

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

• Qualquer módulo, incluindo o superior, ou principal, pode definir várias variáveis de


entrada usando definições de blocos de variáveis:

• 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

Funciona somente dentro do modelo.

Workspaces

• As Workspaces do Terraform nos permitem manter vários arquivos de estado para o


mesmo projeto;
• Quando executamos o Terraform pela primeira vez em um projeto, o arquivo de estado
gerado irá para o workspace padrão;
• Posteriormente, podemos criar um novo workspace com o comando ‘terraform works-
pace new’, opcionalmente fornecendo um arquivo de estado existente como parâmetro;

Esses workspaces, seguindo a documentação, podem ser utilizados, inclusive para a


criação de ambientes de destino diferentes, como desenvolvimento, produção etc. Permite a
separação, divisão do ambiente e cada ambiente estará associado a um worspace separado.
25m
O terraform é uma ferramenta muito poderosa para auxiliar na prática a trabalhar com a
infraestrutura como código.
O terraform não é utilizado apenas para criação de máquinas, mas é utilizado também,
como recurso para definir parâmetro de rede e facilitar a migração de uma cloud para outra,
ao invés de utilizar a própria interface da cloud, uma vez que a infraestrutura já está pronta e
salva, o que permitirá a aplicação em outra cloud.

�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

PROGRAMAÇÃO - SHELL SCRIPT

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

As Bancas cobram, no geral, o BOURNE SHELL, que é o BASH, o mais comum.


Um shell é um interpretador de linha de comando e operações típicas executadas por
scripts de SHELL incluem manipulação de arquivos, execução de programas e impres-
são de texto;
No Windows existe a linha do DOS, que hoje é chamado de PROMPT COMMAND.
Há como agrupar esses comandos, no caso do Windows, no arquivo BATCH, extensão.BAT.
Essa sistemática é análoga do SHELL: será juntada uma série de comandos do sistema
operacional que serão colocados num arquivo denominado SHELL SCRIPT.
A diferença é que no caso do LINUX e dos UNIX eles têm maior variabilidade.
No Windows também há, com o POWER SHELL, além do console normal, que também
oferece essa variabilidade. No LINUX essa variabilidade já existia há muito tempo.
ANOTAÇÕES

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:

O exemplo acima é um caso de uso muito simples.


10m
Estes comandos estão disponíveis no SHELL e foram agrupados em um script para tornar
mais fácil a repetição desses comandos.

O que são os SHELLS?

• Um SHELL fornece uma interface para o sistema UNIX;


• Ele recebe a entrada do usuário e executa programas com base nessa entrada.
Quando um programa termina a execução, ele exibe a saída desse programa (ou
mesmo durante a execução do programa);
• SHELL é um ambiente no qual podemos executar nossos comandos (do próprio sis-
tema operacional), programas (instalados posteriormente) e SCRIPTS DE SHELL
(junção entre comandos e programas).
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Programação - Shell Script
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

• Existem diferentes variedades de SHELL, assim como existem diferentes sistemas


operacionais. Cada variedade de SHELL tem seu próprio conjunto de comandos e fun-
ções reconhecidas;

PROMPT DO SHELL

• O prompt $, que também chamado de prompt de comando, é fornecido pelo SHELL;


• Enquanto o PROMPT é exibido, você pode digitar um comando;
• O SHELL lê sua entrada depois que você pressiona Enter;
• Ele determina o comando que você quer executar observando a primeira palavra da
sua entrada;

Uma palavra é um conjunto ininterrupto de caracteres. Espaços e tabulações sepa-


ram palavras;

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

No Unix, existem dois tipos principais de shells:

• BOURNE SHELL - O caractere $ será o PROMPT padrão;


• C SHELL - O caractere % será o PROMPT padrão;
ANOTAÇÕES

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

O conceito básico de um SCRIPT DE SHELL é uma lista de comandos, listados na ordem


de execução. Existem testes condicionais, loops que permitem percorrer listas de dados, ler
arquivos, manipular variáveis, e o além de funções;
O SCRIPT é um arquivo de texto simples no qual colocamos todos os nossos comandos
e várias outras construções necessárias que informam ao ambiente do shell o que fazer e
quando fazer;
SCRIPTS e FUNÇÕES DO SHELL são interpretados. Isso significa que eles não são
compilados;

Ele é interpretado pelo próprio SHELL.

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.

EXEMPLOS DE SHELL SCRIPT

• Podemos ter um SCRIPT no arquivo TESTE.SH. Todos os SCRIPTS possuem a


extensão.SH;
• A primeira linha do SCRIPT informa o sistema de que um SCRIPT DE SHELL está
sendo iniciado. Isso é feito usando a construção SHEBANG:
20m

#!/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.

Um SCRIPT SHELL bem básico vai executar aqueles comandos em sequência.


Assim como qualquer linguagem de programação existente no mercado, o SHELL
SCRIPT também permite COMENTÁRIOS.
25m

COMENTARIO

são colocados no SCRIPT da seguinte forma:


#!/bin/bash
# Este SCRIPT irá imprimir o diretório atual e listar os arquivos
pwd
ls
;
Há quem utilize o comando COMENTÁRIOS para que uma linha de código, uma sequên-
cia de comandos, seja ignorada. Hoje isso não é mais utilizado porque recomenda-se utilizar
um sistema de controle de versões, quando se pode voltar para uma versão específica.
ANOTAÇÕES

www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Programação - Shell Script
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

USANDO VARIÁVEIS NO SHELL

• Uma variável é uma cadeia de caracteres à qual atribuímos um valor;


• O valor atribuído pode ser um número, texto, nome de arquivo, dispositivo ou qualquer
outro tipo de dado;
• Uma variável nada mais é do que um ponteiro para os dados reais;

O SHELL permite criar, atribuir valor e excluir variáveis

NOMES DE VARIÁVEIS

O nome de uma variável pode conter apenas letras (a a z ou A a Z), números (0 a 9) ou


o caractere de sublinhado (_);
Por convenção, as variáveis SHELL do UNIX terão seus nomes em MAIÚSCULAS;
Os exemplos a seguir são nomes de variáveis válidos:

• _ALI
• TOKEN_A
• VAR_1
• VAR_2

A seguir estão os exemplos de nomes de variáveis inválidos:


30m

• 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

PROGRAMAÇÃO – SHELL SCRIPT II

SHELL SCRIPT
DEFININDO VARIÁVEIS

• VARIÁVEIS são definidas da seguinte forma:

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

• O SCRIPT acima irá produzir o seguinte valor:

Maria da Silva

VARIÁVEIS SOMENTE LEITURA

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

1. (2011/CESPE/ MEC/ADMINISTRADOR DE REDES) No UNIX, os SCRIPTS SHELL


são arquivos de texto que possuem permissão de execução; a primeira linha de um
SCRIPT SHELL deve-se iniciar com #$.

COMENTÁRIO

EXEMPLOS DE SHELL SCRIPT

• Podemos ter um SCRIPT no arquivo teste.sh. Todos os scripts possuem a extensão.SH;


• A primeira linha do SCRIPT informa o sistema de que UM SCRIPT DE SHELL está
sendo iniciado. Isso é feito usando a construção SHEBANG:

#!/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

2. (2010/FCC/TRE-RS/ANALISTA JUDICIÁRIO JUDICIÁRIA) O sistema operacional pre-


cisa apresentar a cada usuário uma interface que aceita, interpreta e então executa
comandos ou programas do usuário. Essa interface é genericamente chamada de
a. BATCH.
b. SHELL.
c. PROMPT.
d. NÚCLEO.
e. SCRIPT.

COMENTÁRIO

a. BATCH (arquivos em lote)


c. PROMPT (onde se digitam os comandos)
O que são os SHELLS?

• Um SHELL fornece uma interface para o sistema UNIX;


• Ele recebe a entrada do usuário e executa programas com base nessa entrada. Quando
um programa termina a execução, ele exibe a saída desse programa;
• Shell é um ambiente no qual podemos executar nossos comandos, programas e
scripts de SHELL;
• Existem diferentes variedades de SHELL, assim como existem diferentes sistemas
operacionais. Cada variedade de SHELL tem seu próprio conjunto de comandos e fun-
ções reconhecidas;

VARIÁVEIS ESPECIAIS

$0 – O nome do arquivo do script atual.


ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Programação – Shell Script II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

$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 argumento
é $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;
20m

ARGUMENTOS DA LINHA DE COMANDO

#!/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 $@

• Existem parâmetros especiais que permitem acessar todos os argumentos da linha


de comando de uma só vez. $* e $@ ambos irão agir da mesma forma, a menos que
estejam entre aspas duplas, “”;
• Ambos os parâmetros especificam os argumentos da linha de comando;
ANOTAÇÕES

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

for TOKEN in “$@”


do
echo $TOKEN
done
$./teste.sh Maria da Silva
25m
Maria
da
Silva
Ele imprime três vezes porque está trabalhando com uma lista de valores. Dependendo
da forma como se trabalha, é possível imprimir uma lista ou imprimir somente um valor.

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

PROGRAMAÇÃO – SHELL SCRIPT III

SHELL SCRIPT

Status de Saída

É a forma mais básica de um programa executado no SHELL se comunicar com o


mundo externo.

• A variável $? representa o status de saída do comando anterior;


• O status de saída é um valor numérico retornado por cada comando após sua conclusão;
• Como regra geral, a maioria dos comandos retornam um status de saída de 0 se tive-
rem êxito e 1 se não tiverem êxito;
• 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;

$./teste.sh Maria da Silva


Maria
da
Silva
$ echo $?
0

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

DEFININDO VALORES DO ARRAY

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;

Para o exemplo dos nomes teríamos:


NOME[0]= “João”
NOME[1]= “Paulo”
NOME[2]= “Pedro”
NOME[3]= “Luiz”
NOME[4]= “Maria”
Para definir em uma única linha, podemos também utilizar a seguinte sintaxe:
NOME=(“João” “Paulo” “Pedro” “Luiz” “Maria”).
10m

ACESSANDO VALORES DO ARRAY

• Depois de definir qualquer variável de ARRAY, os valores podem ser acessados da


seguinte maneira:

${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

b. todos os argumentos passados na linha de comando.


c. o nome pelo qual o programa foi invocado.
d. o último argumento passado na linha de comando.
e. o número de identificação do processo aberto para execução do SCRIPT.
15m

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;

2. (2014/CESPE/ANATEL/ANALISTA ADMINISTRATIVO/SUPORTE E INFRAESTRUTU-


RA DE TI) Julgue os próximos itens, acerca do ambiente LINUX.
Em um SCRIPT SHELL, se o retorno do último comando obtido pela variável interroga-
ção (?) for igual a 1, então o comando teve sucesso na sua execução.

COMENTÁRIO
Status de Saída

• A variável $? representa o status de saída do comando anterior;


• O status de saída é um valor numérico retornado por cada comando após sua conclusão;
20m
• Como regra geral, a maioria dos comandos retornam um status de saída de 0 se
tiverem êxito e 1 se não tiverem êxito;
ANOTAÇÕES

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

Você também pode gostar