Você está na página 1de 225

TÉCNICO EM DESENVOLVIMENTO DE SISTEMAS

MÓDULO
PROGRAMAÇÃO DE SISTEMAS
Módulo: Programação de Sistemas

DISCIPLINA: PROGRMAÇÃO DE SISTEMAS

Tema 1: Introdução a Lógica de Programação ................................................................................8

Tema 2: Fluxogramas e Condicionais ............................................................................................26

Tema 3: Laços de repetição ...........................................................................................................42

Tema 4: Menus e validações de dados ..........................................................................................48

Tema 5: Vetores ............................................................................................................................54

Tema 6: Matrizes e Algoritmos de ordenação ................................................................................64

Tema 7: Procedimento ...................................................................................................................71

Tema 8: Técnicas e dicas de programação ....................................................................................81

Tema 9 : Conceitos básicos de Python ..........................................................................................85

Tema 10: Listas, tuplas e dicionários............................................................................................ 106

Tema 11: Condicionais ................................................................................................................. 118

Tema 12: Laços de Repetição ...................................................................................................... 118

Tema 13: Validação de dados ...................................................................................................... 130

Tema 14: Funções ....................................................................................................................... 130

Tema 15: Módulos........................................................................................................................ 135

DISCIPLINA: BANCO DE DADOS

Tema 1: Introdução á Banco de Dados ........................................................................................ 146

Tema 2: Modelagem Banco de Dados ......................................................................................... 146

Tema 3: Regras de Normalização ................................................................................................ 167

Tema 4 : Introdução À Linguagem SQL ....................................................................................... 172

Tema 5. Modelagem DDL ............................................................................................................ 186

Tema 6 : Conectividade em Python .............................................................................................. 205

Tema 7: Business Intelligence ...................................................................................................... 219

2
Módulo: Programação de Sistemas

DISCIPLINA: PROGRMAÇÃO DE SISTEMAS

Introdução

A linguagem de programação é um conjunto de instruções direcionadas a um computador.


Podemos considerar que linguagem de programação é um método sofisticado, robusto e objetivo de
um computador executar uma ou mais tarefas. Esta linguagem cria um conjunto de regras e caminhos
por onde o computador deverá seguir a fim de alcançar um objetivo definido pelo programa. É mediante
a estes códigos que os programadores podem definir os dados de maior relevância, as formas de
transmissão destes dados, forma de conduzir o recebimento, como os dados serão processados e
qual resultado deverá ser obtido.

A linguagem e programação usa uma sequência lógica para compor seu funcionamento. O
grande desafio dos programadores é conceber uma sintaxe que seja, leve, intuitiva e preferencialmente
limpa, ou seja, com códigos claros e objetivos. Na década de 1940, os primeiros computadores
elétricos foram criados, necessitando a criação das primeiras linguagens. Como não havia ainda a
memória, os programadores necessitavam de códigos de códigos complexos que foram conhecidas
como linguagens de máquina.

Assembly

A primeira linguagem de máquina que foi trabalhada foi o Assembly, com está linguagem foi
possível programar estes grandes computadores. Mais ainda se trabalhava a nível de máquina. Nesta
mesma década tivemos ainda a criação do Plankalkül por Korand Suze, ENIAC code System que foi
a linguagem do primeiro computador digital o ENIAC. Avançando no tempo, na década de 50, Grace
Hopper, que nesta época era programadora na marinha americana, desenvolveu o A-10, uma
linguagem de alto nível criada para o computador UNIVAC. Outras linguagens surgiram nesta mesma
época, as principais foram o ALGOL, FORTRAN e o COBOL, estas linguagens são utilizadas até os
dias de hoje.Na mesma época surgiu a Lips, linguagem que foi um marco pesquisa de computadores
em ênfase a inteligência artificial. Seguindo a mesma linha de pensamento, surge na década de 1970
a linguagem Proglog. A orientação a objeto também é considerado um marco na história das
linguagens de programação. A linguagem Simula 67 (extensão do ALGOL) introduziu o conceito de
classes, logo após surgiu a Smalltalk, está linguagem aprofundou o conceito de orientação a objeto,

3
Módulo: Programação de Sistemas

sendo a primeira linguagem completa neste quesito. Posteriormente a linguagem C++ popularizou o
conceito de classes.

O Conceito de Linguagem de Programação

Como vimos, a linguagem de programação teve uma evolução gradativa, acompanhando a


evolução dos computadores. A partir dos processadores e da expansão da memória, novas linguagens
de programação foram surgindo, e desta forma, a linguagem contribuiu para a expansão da evolução
humana, transformando o raciocínio lógico em algo palpável e produtivo, e desta forma, tornando a
informática algo fundamental para a sociedade moderna.

Principais Linguagens de programação

Existem milhares de linguagens de programação, dentre delas, apresentaremos as principais


linguagens de programação do mercado:

• ALGOL
• Assembly
• C
• C#
• C++
• COBOL
• Delphi
• FORTRAN
• Java
• JavaScript
• MATLAB
• Object Pascal
• Objective-C
• Perl
• PHP
• PL/SQL
• Portugol
• Python
• Ruby
• Scratch
• Swift
• Visual Basic
• Visual Basic .NET

Níveis de Programação

Podemos classificar a linguagem de programação em 2 níveis.

Linguagem de Programação de baixo nível

• O primeiro é a linguagem de baixo nível, está linguagem trabalha no nível da arquitetura


do hardware, nível de programação trabalha diretamente com os registradores e
processadores e chegam a utilizar editores de base hexadecimal.

Linguagem de Programação de alto nível

4
Módulo: Programação de Sistemas

• A linguagem de alto nível é uma lingue é uma linguagem de mais estruturada, que não
trabalha no nível da arquitetura do computador, este formato trabalha com códigos
fontes, convertendo o código para código de máquina utilizando os interpretadores e
compiladores. Este tipo de linguagem se assemelha com a linguagem humana.

Interpretadores e Compiladores

Todas os códigos de programação podem ser convertidos a código de máquina por


compiladores ou interpretados por interpretadores. Está tradução transforma o código fonte em código
de máquina. Um compilador basicamente, traduz o programa para código de máquina, uma vez
compilado, o programa não mais estará em formato de “edição” ele já se torna algo existente dentro
do sistema em que o mesmo está inserido.

A cada fase ou atualização é necessário que o programa passe por uma nova compilação. Para
cada linguagem, é necessário um tipo correlativo de interpretador e de compilador. Desta forma é
possível a construção de diversos programas.

Classificação das Linguagens de Programação

A ACM (Association for Computing Machinery) classifica as linguagens de programação em


vários tipos, buscando padronizar seu uso e suas aplicações, são elas:

• Linguagens aplicativas, ou de aplicação


• Linguagens concorrentes, distribuídas e paralelas
• Linguagens de altíssimo nível
• Linguagens de aplicação especializada
• Linguagens de fluxo de dados
• Linguagens de microprogramação
• Linguagens de montagem e de macro
• Linguagens de projeto
• Linguagens extensíveis
• Linguagens não determinísticas
• Linguagens não procedurais
• Linguagens orientadas a objeto

Conceito de Programação

Apesar de todas as linguagens de programação em teoria alcançar o mesmo objetivo lógico,


existem conceitos para cada tipo de programação, estruturamos as linguagens em categorias maiores
e gerais para organizar seus conceitos, são elas:

• Programação Estruturada
• Programação Linear
• Programação Modular
• Programação Orientada a Eventos
• Programação Orientada a Objeto

5
Módulo: Programação de Sistemas

Programação Estruturada

A programação estruturada foi a percursora da estruturação da linguagem de programação, ela


divide em três partes:

Diagrama – Programação Estruturada

1 Sequência
2 Decisão
3 Repetição

Este conceito orientava os programadores a usarem códigos simples, usando de funções e


sub-rotinas em sua criação.

Programação modular

A programação modular apresenta o conceito de estruturar um programa por módulos


relacionados e interdependentes através de uma interface em comum. Este tipo de linguagem
rapidamente substituiu a linguagem estruturada, pois ela apresenta algo mais robusto e confiável.

Diagrama – Programação Estruturada

Programação Orientada a Objeto

A programação orientada a objeto visa não apenas estruturar o código em classes ou em


módulos, este tipo de programação traz um grande paradigma, apresentando o desafio de implementar
um código e potencializar sua atuação. Unindo diversas composições e interações de códigos, o que
conhecemos por objetos. Este método de programação deu origem a diversas interpretações
semânticas da inteligência artificial, atribuindo atributos e definindo métodos entre seus objetos.

6
Módulo: Programação de Sistemas

A programação orientada a objeto é estruturada em 5 bases fundamentais.

Diagrama 3 – Programação Orientada a Objeto/ Fonte PHPH

Programação Linear

A programação linear é focada em otimizações e soluções de problemas de programação, este


tipo de programação utiliza uma estrutura matemática para buscar resoluções. Historicamente a
programação linear apresenta resoluções como dualidade, decomposição, e a importância da
convexidade e suas generalizações.

Programação orientada a eventos

Diferente de programas normais que seguem um fluxo de controle padronizado, os controles


de fluxo de programas orientados a evento são guiados por ações externas, chamadas eventos. Sua
aplicação é grande no desenvolvimento de sistemas de interface com o usuário.

Conceito de Lógica

7
Módulo: Programação de Sistemas

A lógica é um conceito que tem se expandido desde os princípios da humanidade, desde a


Grécia antiga se tem a lógica uma ferramenta em favor do exercício do pensamento e da linguagem.
Trazendo para a realidade da informática, a lógica é um conjunto ordenado de instruções visando
alcançar um objetivo, sistematizando todas as suas etapas em sequência, a fim de organizar um
pensamento, e desta forma, alcançar a solução de uma problemática.

Linguagens Web

As linguagens de programação web ou conhecidas como linguagem de marcação, são


utilizadas para o desenvolvimento de páginas e sistemas que são atrelados à internet, estas linguagens
permitem a criação de uma estrutura que faz a comunicação entre os usuários de internet e bases de
dados locais. As principais linguagens de programação para desenvolvimento web são:

• HTML
• CSS
• JavaScript

Pretende-se aqui seguir uma apresentação incremental dos tópicos. Inicialmente são propostos
problemas simples que envolvem raciocínio lógico e que possuem solução livre, de modo a ambientar
e a incentivar o estudante na descrição dos passos elementares necessários à resolução de problemas

O software deve ser encarado como um produto de um processo bem-definido e controlado. O


intuito desta apostila não é entrar em detalhes sobre engenharia de software e sim concentrar-se na
disseminação de conceitos básicos que viabilizem a especificação correta de softwares até o seu
desenvolvimento.

Tema 1: Introdução a Lógica de Programação

8
Módulo: Programação de Sistemas

Introdução

A lógica permite que utilizemos o pensamento da melhor forma possível, a fim de encontrar uma
solução para um determinado problema.

Possui ligação com a Matemática e com a Filosofia, sua origem vem desde a Grécia antiga, sendo
Aristóteles um dos seus principais pensadores, ele que iniciou os estudos relacionados ao raciocínio
e na organização da lógica clássica, criando assim a lógica formal e material.

A lógica formal possui a preocupação com a estrutura do raciocínio, e busca através de conceitos
provar declarações. A lógica material trabalha com as operações do pensamento.

Linguagens de Programação

Atualmente existem inúmeras linguagens de programação, apenas para citar algumas temos: C, C++,
Java, JavaScript, Python, PHP etc.

No início da era dos computadores, os programadores necessitavam programar diretamente em


linguagem de máquina, ou seja, utilizavam números binários para programar. Como existia uma grande
dificuldade para se programar, criou-se uma linguagem próxima do entendimento humano chamada
de Assembly (montagem). A linguagem Assembly transformava as instruções binárias em palavras ou
siglas conhecidas como mnemônicos.

Abaixo, segue um exemplo de um programa desenvolvido em Assembly que mostra na tela a frase
“Hello World”:

9
Módulo: Programação de Sistemas

Com o passar do tempo, surgiram linguagens de alto nível, ou seja, cuja linguagem se aproxima da
linguagem humana. Para citar algumas temos: Pascal, BASIC e C (também considerada de médio
nível).

Portugol

Portugol é uma pseudolinguagem criada pelos professores Antônio Carlos Nicolodi e Antônio Mannso
em 1986.É muito utilizado para o ensino de lógica de programação nos países de língua portuguesa.

Os interpretadores mais utilizados para esta pseudolinguagem são: VISUALG 3.0, Portugol Studio e o
G-Portugol. Em nossas aulas utilizaremos o interpretador VISUALG.

Código-fonte

O código-fonte é o texto escrito numa linguagem de programação e que pode ser lido por qualquer
pessoa, mesmo quem não sabe programar. Esse texto segue as regras impostas pela linguagem,
como sintaxe dos comandos e funções.

Programas executáveis

Trata-se de uma sequência de instruções em linguagem de máquina (códigos binários) inteligível ao


computador e muito difícil (ou quase impossível) de ser entendido por um ser humano. Esse programa
é criado por dois processos diferentes: interpretação e compilação.

Na interpretação, o código-fonte do programa é convertido em linguagem de máquina à medida que o


programa é executado. A linguagem de máquina é a única que o computador realmente entende, já

10
Módulo: Programação de Sistemas

que ela é a combinação de 0 e 1. A conversão é efetuada por um programa escrito totalmente em


linguagem de máquina e denominado interpretador. Ele lê o código-fonte linha por linha e decodifica-
o para que a possa ser executado pelo microprocessador.

Já em programas compilados, o código-fonte é inteiramente convertido em linguagem de máquina uma


única vez. O software que efetua essa conversão é chamado de compilador.

Algoritmo

Um algoritmo, nada mais é do que um conjunto de instruções, regras ou comandos. Os algoritmos


ajudam a resolver problemas, e para tanto é utilizada a lógica para encontrar as soluções para esses
problemas.

Introdução ao VISUALG

O Portugol é um pseudocódigo, é uma forma de expressar o pensamento lógico, principalmente para


quem não fala inglês. O VISUALG como mencionado anteriormente é um interpretador que
utilizaremos para executar a pseudolinguagem chamada de Portugol. Para utilizá-lo basta baixá-lo da
internet, não precisa fazer nenhuma instalação.

Abaixo segue a tela inicial do VISUALG, note que todo novo arquivo já começa previamente
estruturado.

Analisando a tela acima:

• Onde está escrito “semnome” será onde colocaremos o nome do algoritmo

• É importante preencher os demais campos (Disciplina, Professor, Descrição, Autor, Data atual),
para a devida documentação do programa.

• Para adicionar comentários ao nosso código utilizamos // note que após digitar // as letras da
linha ficam na cor verde indicando que se trata de apenas um comentário ao programa.

11
Módulo: Programação de Sistemas

• É interessante sempre adicionar comentários aos programas, pois assim se você ou outra
pessoa for ler o código um tempo depois, não perderá tempo tentando entender o que o
programa faz.

• Onde está escrito Var, é onde iremos declarar as variáveis do programa.

• Entre “Inicio” e “Fimalgoritmo”, iremos escrever toda a parte lógica do algoritmo (programa),
essas tags servem para indicar ao VisuALG onde começa e onde termina o algoritmo.

Exemplo 1: Utilizando o comando “escreva”

Passo 1: Conforme o exemplo abaixo, na linha 1 após a tag Algoritmo escreva “Saudacao”

Passo 2: Utilize o comando escreva (“Olá Mundo!”) após a tag Início, conforme a linha 13.

Passo3: Para executar o algoritmo vá em RUN => Rodar o Algoritmo ou pressione a tecla F9 do
teclado.

12
Módulo: Programação de Sistemas

Abaixo segue a tela de execução

Exemplo 2: Utilizando o comando “escreval”

Ao substituir o comando “escreva” por “escreval”, note abaixo que após escrever na tela irá pular uma
linha.

Resumo

O estudo de algoritmos e de lógica de programação é essencial no contexto do processo de criação


de um software. Ele está diretamente relacionado com a etapa de projeto de um software em que,
mesmo sem saber qual será a linguagem de programação a ser utilizada, se específica completamente
o software a ponto de na implementação ser possível traduzir diretamente essas especificações em
linhas de código em alguma linguagem de programação.

Verificamos que a lógica é uma ótima maneira para resolver problemas, tanto para desenvolver
programas quanto para resolver os nossos problemas do dia a dia. Portanto, o quesito mais importante

13
Módulo: Programação de Sistemas

para ser um bom programador é saber lógica de programação, pois, após dominar a lógica será
possível programar em qualquer linguagem de programação.

Atividades

1. O que são linguagens de programação?

2. O que significa dizer que uma linguagem é de baixo nível?

3. O que significa dizer que uma linguagem é de alto nível?

4. Pesquise e cite duas linguagens que são de baixo nível.

5. Pesquise e cite três linguagens de alto nível.

6. O que é o Portugol?

7. O que são programas executáveis?

8. Qual a diferença entre programas interpretadores e compiladores?

9. Qual é a tecla de atalho utilizada para executar um algoritmo no VISUALG?

10. Qual a diferença entre os comandos escreva e escreval?

11. Defina código-fonte.

12. Desenvolva no VISUALG um algoritmo que irá mostrar um ditado popular para o usuário

Exemplo:

O ditado popular do dia é: “Um dia é da caça, outro é do caçador. ”

13. Faça uma pesquisa de alguma receita de comida na internet e faça um algoritmo no VISUALG
que exiba esta receita para o usuário.

Exemplo:

Onion Rings (Cebola empanada)

INGREDIENTES:

2 cebolas grandes cortadas em rodelas


1 xícara (chá) de farinha de trigo
1 colher (chá) de fermento químico
1 ovo
1 xícara (chá) de leite
Pitada de sal
Para empanar: Aproximadamente 1 xícara (chá) de farinha de rosca

MODO DE PREPARO:

14
Módulo: Programação de Sistemas

1-Misture a farinha, o fermento, o ovo, o leite e o sal até formar uma massa homogênea.
2-Empane os anéis de cebola na massa, e depois na farinha de rosca.
3-Frite em óleo quente até ficar dourado, na sequência coloque no papel toalha.

Variáveis

Introdução

As variáveis são posições reservados na memória do computador para armazenar valores, que podem
ser números inteiros (“1,30,50 etc.”), números reais (“10.5, 30.6, 100.50 etc.”), caracteres (letras e
palavras) ou lógicos (verdadeiro ou falso) esses valores são armazenados durante a execução do
programa e são descartados após o programa ser fechado.

Variáveis globais e locais

Globais

As variáveis globais são variáveis que podem ser utilizadas por todo o algoritmo.

Locais

Já as variáveis locais, são variáveis utilizadas somente numa parte do algoritmo (em funções e
procedimentos), sendo assim a sua utilização é mais limitada, porém muito útil para evitar confusões.
Para saber qual tipo de variável devemos utilizar dependerá da utilidade que queremos dar para elas.

Tipos de variáveis

Inteiros

A variável do tipo inteiro irá armazenar números que não possuem casa decimal.

Exemplo:
15
Módulo: Programação de Sistemas

Números
inteiros

1 2 3 e etc.

Números reais

As variáveis desse tipo esperam armazenar números que possuem casas decimais após a vírgula.

Exemplo:

Números
reais

1.5 2.125 3.83 e etc.

Lógicos

A variável do tipo lógico deverá receber apenas “verdadeiro” ou “falso”.

Lógico ou booleano =>verdadeiro ou falso

Lógico
verdadeiro falso

Caractere

As variáveis do tipo caractere, deverão armazenar somente letras e palavras. Números também podem
ser armazenados nelas, porém serão interpretados como palavras e não como números.

Normalmente utilizada para armazenar nomes, endereços, bairros, cidade, comentários, descrições
de alguma coisa e etc.

16
Módulo: Programação de Sistemas

Criando variáveis do tipo inteiro

Para definir uma variável do tipo inteiro fazemos o seguinte, no VisualG existe uma área para
declaração de variáveis, toda variável criada nesta parte será uma variável global.

No exemplo a área para declaração de variáveis está localizada a partir da linha 5.

Para criar uma variável do tipo inteiro, basta colocar o nome_da_variável: inteiro, assim como feito na
linha 6.

Na linha 12 atribuímos o valor “10” para a variável “a”.

Para atribuir valores para alguma variável utilizamos os símbolos <- (veja na linha 10), dizemos neste
caso que a variável “a” recebeu o valor “10”.

E por último mostramos o valor que está armazenado na variável “a” através do comando escreva
(veja na linha 15)

Pressionando a tecla “F9” ou indo em Run (executar) => Rodar o Algoritmo

17
Módulo: Programação de Sistemas

Abaixo segue a execução do nosso algoritmo.

No exemplo abaixo declaramos duas variáveis (a e b) na mesma linha como do tipo inteiro

(Veja a linha 6).

Note que nas linhas 12 e 13 atribuímos os valores para as variáveis.

Na linha 15 mandamos escrever na tela a soma dos dois valores armazenados nas variáveis.

18
Módulo: Programação de Sistemas

Abaixo segue a tela de execução do algoritmo:

Operações matemáticas

Operadores aritméticos

Para realizar operações matemáticas utilizaremos os operadores aritméticos abaixo:

Operador Descrição
+ Para realizar a adição
- Para realizar a subtração
19
Módulo: Programação de Sistemas

* Para realizar a multiplicação


/ Para realizar a divisão

Neste exemplo, faremos várias operações matemáticas com os números inteiros.

Note que nas linhas 13 e 16 estamos lendo os valores para as variáveis “a” e “b”. Para que nas
próximas linhas fazermos diversos cálculos com os valores digitados pelo usuário:

Veja abaixo a tela de execução.

Lendo os valores de uma única vez


20
Módulo: Programação de Sistemas

Note na linha 13 que estamos lendo os valores para as variáveis de uma única vez, esse método de
leitura é uma boa forma para diminuir a quantidade de linhas do nosso código.

Veja abaixo a tela de execução.

Criando variáveis do tipo real:

Para criar uma variável do tipo real, basta colocar o nome_da_variável: real, assim como feito na

linha 7.

21
Módulo: Programação de Sistemas

Abaixo segue a tela de execução do algoritmo.

Criando uma variável lógica (booleana):

Para criar uma variável do tipo lógico, basta colocar o nome_da_variável : logico, assim como feito na
linha 6 do exemplo abaixo:

Tela de execução do algoritmo:

22
Módulo: Programação de Sistemas

Criando uma variável do tipo caractere:

Para criar uma variável do tipo caractere, basta colocar o nome_da_variável: caracter, assim como
feito na linha 7.

Abaixo o algoritmo em execução:

23
Módulo: Programação de Sistemas

Resumo

Verificamos que as variáveis são espaços reservados na memória para armazenar dados que podem
ser do tipo inteiro, real, caractere ou lógico. As variáveis são importantes para o funcionamento dos
programas, sem elas a lógica de programação seria limitada.

Atividades

1. Qual opção representa variáveis do tipo inteiro?

a) 1, 2, 3, 4.1.

b) 50, 34, 67,45, 76.5.

c) 40, 56, 34, 24,59.

d) 2.8,10, 11, 12,13.

2. Defina o que são as variáveis do tipo “lógico”.

3. É possível realizar operações entre números Inteiros e Números reais, porém se o resultado
for um número Real, a variável que recebe o resultado precisa ser do tipo Real. Esta afirmação
é:

a) Verdadeira

b) Falsa

4. Defina o que é uma variável do tipo “real”. Dê um exemplo de um número real.

5. Defina o que é uma variável do tipo “caracter”. É possível armazenar somente um único
caractere numa variável deste tipo?

6. Faça um programa que calcule o valor de desconto para um determinado produto, faça um
Print Screen do código fonte do seu programa e do programa em execução.

• OBS: No programa deve aparecer o seu nome, deve permitir que o usuário digite o código do
produto, o valor do produto, o valor da porcentagem do desconto. No final deve ser calculado
e apresentado o valor total a pagar.

Segue abaixo um exemplo:

24
Módulo: Programação de Sistemas

Nome do aluno: >>>Aqui deve aparecer o seu nome <<<


Digite o código do produto: 1515
Digite o valor do produto: 250
Digite a porcentagem do desconto: 25
O Valor total a pagar é de: R$ 187.5

25
Módulo: Programação de Sistemas

Tema 2: Fluxogramas e Condicionais

Introdução

O fluxograma se caracteriza pela utilização de símbolos


gráficos que representam um processo ou ação, os quais
são ligados por meio de setas que indicam a possível
trajetória do fluxo. Essa trajetória normalmente segue a
direção de cima para baixo e da esquerda para a direita.

Os fluxogramas fazem parte do


planejamento/desenvolvimento do sistema,
principalmente no desenvolvimento de sistemas mais
complexos.

Para obter algoritmos bem escritos, é necessário que


algumas regras básicas sejam seguidas, como, por
exemplo, ter início e fim bem definidos, as operações a
serem executadas precisam ter uma sequência lógica,
devemos utilizar apenas um verbo por linha de comando,
o algoritmo deve ser bastante objetivo. O estágio inicial de
projeto e definição do sistema é a fase em que os
fluxogramas são mais úteis.

26
Módulo: Programação de Sistemas

Exemplo 1 – Somando dois valores

27
Módulo: Programação de Sistemas

Exemplo 2 – Utilizando condicionais

28
Módulo: Programação de Sistemas

Criando fluxogramas pelo Power Point

Para criar fluxogramas pelo Power Point basta clicar na guia “Inserir” e depois em “Formas”, lá será
possível encontrar os símbolos do fluxograma e também as setas que utilizamos para fazer o caminho
do fluxo.

Resumo

Para um algoritmo ser útil, deve ser entendido da mesma forma por todas as pessoas que o utilizarem.
Existem diversas maneiras de formalizar a representação de um algoritmo, ao utilizar um fluxograma
estamos utilizando um recurso gráfico para representá-lo.

É importante ter em mente que para o desenvolvimento de aplicativos simples, até pode ser possível
dispensar o planejamento e a estruturação do sistema através de fluxogramas, porém para sistemas
mais complexos, é muito importante que seja feito um fluxograma a fim de minimizar problemas de
estruturação do sistema.

29
Módulo: Programação de Sistemas

Atividades

1. Qual a utilidade em utilizar um fluxograma?

2. Em qual fase do projeto os fluxogramas são mais úteis?

3. Através do próprio Word, crie um fluxograma que calculará a média entre dois valores. Faça
todo o processo com base nos exemplos mostrados neste tema ou em aula.

4. Através do próprio Word crie um fluxograma para ler a nota do aluno, se a nota for menor que
7 deverá aparecer uma mensagem: “Aluno reprovado!” Caso contrário deverá aparecer
“Passou de ano!”.

5. Pesquise na internet três programas gratuitos que são próprios para criar fluxogramas e ou
sites online que permitem a criação de fluxogramas gratuitamente.

• Escolha um dos programas e/ou site da questão anterior e refaça o fluxograma feito na questão
3, porém utilizando este programa e/ou site, caso precise instalar algum programa utilize a
máquina virtual.

Condicionais

Introdução

Condicionais são condições impostas para que algo aconteça. Por exemplo, quando uma mãe diz para
o filho que ele só poderá comer o chocolate após comer toda a comida, perceba que a mãe está
impondo uma condição para o filho, que se atendida, o menino poderá comer o chocolate, do contrário
ficará sem.

Operadores de comparação

Para criarmos condicionais utilizamos muitas vezes os operadores de comparação.

30
Módulo: Programação de Sistemas

Condicionais Simples

A condicional simples funciona da seguinte maneira, utilizamos:

Se (condição for verdadeira) então

No exemplo abaixo se o valor da variável for menor que 10 então aparecerá


na tela a mensagem “O valor digitado é menor que 10. ”

Note que a condicional “se” deve ser finalizada com um “fimse”.

Tela de execução do algoritmo:

31
Módulo: Programação de Sistemas

Condicionais Compostas
Exemplo1:
No exemplo abaixo note que se a condição for verdadeira, ou seja, (nota >=7) o algoritmo exibirá
“Parabéns! Continue assim! ” Caso contrária exibirá “Você precisa estudar mais! ”

Abaixo segue as telas de execução:

32
Módulo: Programação de Sistemas

Exemplo 2:

Abaixo segue a tela de execução:

Condicionais Múltiplos e Conectivos lógicos

33
Módulo: Programação de Sistemas

Conectivo lógico “E”

Para que as ações sejam executadas é necessário que todas as condições sejam verdadeiras, do
contrário não serão executadas.

Exemplo 1:

No exemplo acima, a garota tem duas condições para sair, essas duas condições (receber o salário e
não chover) precisam ser verdadeiras para que ela saia, do contrário ela não irá sair.

Exemplo 2:

Segue abaixo as telas de execução:

34
Módulo: Programação de Sistemas

Conectivo lógico “OU”

Para que as ações sejam executadas é necessário que qualquer uma das condições sejam
verdadeiras.

Exemplo 1:

No exemplo abaixo, se qualquer uma das condições for verdadeira (passa o ônibus A ou B) ele
conseguirá chegar no horário. Se nenhum dos ônibus passar ele se atrasará.

Exemplo 2:

35
Módulo: Programação de Sistemas

Abaixo seguem as telas de execução:

Escolha caso

A escolha caso é muito utilizado em telas com menus de interação com o usuário.

36
Módulo: Programação de Sistemas

Segue abaixo as telas de execução:

Resumo
37
Módulo: Programação de Sistemas

Utilizamos condicionais todos os dias, elas são muito importantes para tomadas de decisão. Por
exemplo, quando alguém pensa, se fizer sol amanhã eu irei para a praia, ir para a praia só será possível
se a condição “se fizer sol” for verdadeira. Através das condicionais conseguimos criar algoritmos
preparados para diversas situações previstas.

Atividades

1. Desenvolva um programa utilizando uma condicional simples, o algoritmo deve verificar se o


valor digitado é menor ou igual a 20. Se a condição for verdadeira, deve aparecer uma
mensagem:
"O valor digitado é menor ou igual a 20!".

• OBS: Tire um Print Screen do código fonte e também da tela de execução do programa.

Exemplo de tela:

Autor do programa: AQUI DEVE APARECER O SEU NOME


Atividade 1 – Condicional simples

Digite um valor: 19
O valor digitado é menor ou igual a 20!

2. Desenvolva um programa qualquer utilizando a condicional composta.

• OBS: Tire um Print Screen do código fonte e da tela de execução do programa. O seu nome
deve aparecer na tela de execução do programa.

3. Desenvolva um programa que aplicará um desconto de 25% ao valor do produto se o cliente


possuir um dos seguintes códigos de promoção: “VBFMZB” ou “HT2Y8E”. Caso contrário o
cliente deverá pagar o valor cheio sem desconto.

Exemplo de tela:

Autor do programa: AQUI DEVE APARECER O SEU NOME


Atividade 3 – Aplicação de desconto caso haja código promocional

Digite o valor do produto: 200


Código de promocional: VBFMZB
O valor a pagar será de: R$ 150

• OBS: Tire um Print Screen do código fonte e da tela de execução do programa

Tema 3: Valores aleatórios e Laços de Repetição

Introdução
38
Módulo: Programação de Sistemas

Os valores aleatórios são muito utilizados por programadores em diversas situações. As linguagens
de programação normalmente possuem funções para a criação de valores aleatórios e através delas
podemos gerar valores aleatórios para utilizarmos na criação de por exemplo: jogos, senhas, captcha,
algoritmos de criptografia etc.

Aleatórios para números

Para criar um número aleatório, por exemplo, de tipo inteiro, é necessário a criação de uma variável
que receberá esse valor aleatório, conforme a linha 10. Dentro da seção Início é possível fazer a
variável receber o valor aleatório através das tags “aleatorio on” e “aleatorio off”, conforme é possível
observar nas linhas entre 15 e 17.

O botão abaixo permite editar o valor de intervalo para a geração do valor aleatório:

Note que no VisualG também é possível utilizar a função “randi( )” para gerar número inteiros
aleatórios, no caso, o exemplo acima ficaria assim:

Início

dado <- randi(100) // O número dentro dos parênteses é o intervalo que serão gerados os números

39
Módulo: Programação de Sistemas

Aleatórios para caracteres

Para criar um valor aleatório do tipo caractere (letras e palavras) o procedimento é parecido ao
mostrado anteriormente para inteiros, a diferença é que deverá ser declarada uma variável do tipo
caracter que receberá os valores aleatórios.

Abaixo segue a tela de execução:

Resumo

Verificamos que é possível gerarmos valores aleatórios de números inteiros, números reais e de
caracteres. Com eles podemos criar jogos, senhas provisórias, caracteres aleatórios para conceder
um código de bônus etc. A utilidade deles dependerá do algoritmo elaborado.

Atividades

1. Desenvolva um programa de desafios para o usuário, o desafio dependerá do valor aleatório


gerado. Crie um valor aleatório entre 0 a 9. Utilize a condicional “Escolha Caso” (tema 2 da
apostila) para definir os desafios, ou seja, você terá que gerar 10 situações utilizando o
“Escolha caso”, uma para cada número aleatório do intervalo entre 0 e 9.

• OBS: Tire um Print Screen do código fonte e da tela de execução do programa.


40
Módulo: Programação de Sistemas

2. Desenvolva um programa para gerar 6 números aleatórios para serem jogados na loteria. Os
números devem estar no intervalo de 1 a 60. Segue abaixo o exemplo da tela de execução.

• OBS: Tire um Print Screen do código fonte e da tela de execução do programa.

Exemplo:

3. Elabore um jogo chamado “Jogo dos Palpites”, o jogo funcionará da seguinte maneira, dois
jogadores farão palpites de números entre 0 e 100 o jogador que chegar mais próximo do valor
aleatório ganhará. Segue abaixo as telas de exemplo do funcionamento do jogo.

• OBS: Tire um Print Screen do código fonte e também da tela de execução do programa.

41
Módulo: Programação de Sistemas

Tema 03: Laços de repetição

Os laços de repetição são muito utilizados nos sistemas para fazer algum tipo de consistência de dados
do usuário, ocorre que por engano ou distração o usuário pode entrar com informações inválidas que
se não forem consistidas podem prejudicar a base de dados dos sistemas. Também podemos utilizá-
los para ler as informações de vetores e matrizes, e são utilizados em algoritmos de ordenação, ou
seja, há uma infinidade de utilidades para os laços de repetição.

42
Módulo: Programação de Sistemas

Enquanto

Neste tipo de laço de repetição enquanto a condição estiver sendo atendida o programa permanecerá
em looping.

Exemplo1:

Abaixo a tela de execução:

Exemplo 2:

43
Módulo: Programação de Sistemas

Seguem abaixo as telas de execução:

Repita até que

Neste tipo de laço de repetição o algoritmo primeiro fará algo até que a condição seja atendida.

44
Módulo: Programação de Sistemas

Segue abaixo as telas de execução:

Laço de repetição: Para

Neste tipo de laço de repetição há uma variável que funcionará como contador, já na definição do laço
é especificado o número de repetições. A cada repetição a variável contadora (pode ter outro nome)
receberá automaticamente o acréscimo de 1.

45
Módulo: Programação de Sistemas

Abaixo segue a tela de execução:

Resumo

Verificamos que os laços de repetição são: enquanto, repita até que, para. É importante que o
programador saiba utilizá-los, pois dependendo do algoritmo um poderá ser mais eficiente do que o
outro. Não há um laço de repetição que seja melhor que outro, o melhor muitas vezes será aquele que
o programador tenha mais afinidade.

Atividades
46
Módulo: Programação de Sistemas

1. Imagine que o usuário esqueceu a senha de acesso ao sistema, desenvolva um programa


que solicite ao usuário o nome da mãe dele. Se o usuário acertar a resposta, deverá ser
gerada uma senha através de valores aleatórios, porém, se ele errar três tentativas, deverá
aparecer uma mensagem de erro: “Você excedeu o número de tentativas”.

• OBS: Tire um Print Screen do código fonte e da tela de execução do programa.

2. Desenvolva um programa para calcular o IMC (Índice de Massa Corporal), o algoritmo deverá
ler a altura e o peso do usuário e depois calcular o IMC com base na fórmula: IMC = peso /
(altura)².

• Após o cálculo deve ser informado o valor do IMC do usuário e a classificação com
base na tabela abaixo:

Classificação IMC

Muito abaixo do peso 16 a 16,9

Abaixo do peso 17 a 18,4

Peso normal 18,5 a 24,9

Acima do peso 25 a 29,9

Obesidade Grau I 30 a 34,9

Obesidade Grau II 35 a 40

Obesidade Grau III > 40

• Deve-se utilizar um laço de repetição para consistir se o usuário digitou um valor de


peso e altura maiores do que 0. Enquanto ele digitar um valor menor ou igual a zero
deverá aparecer uma mensagem de erro de: “Peso e altura devem ser maiores que 0 ”

• OBS: Tire um Print Screen do código fonte e da tela de execução do programa.

3. Utilizando o laço de repetição PARA, desenvolva um programa que faça uma tabuada, para
isso leia um número de 1 a 10, se o usuário digitar um valor fora desse intervalo deve aparecer
uma mensagem de erro: “Digite um valor entre 1 e 10.” A tela esperada deve conter os valores
da tabuada para o número digitado pelo usuário.
• OBS: Tire um Print Screen do código fonte e da tela de execução do programa.

47
Módulo: Programação de Sistemas

Tema 4: Menus e validações de dados

Introdução

Os menus são importantes para gerar interação com o usuário, um sistema por mais básico que seja
terá algum tipo de menu. Os menus além de necessitarem ser funcionais, também devem possuir um
layout intuitivo, amigável e bonito. Os menus do sistema são a embalagem do nosso produto, não
adianta ter um sistema muito bom, porém com uma tela ruim para a interação com o usuário.

Já a validação de dados é algo extremamente necessária, visto que o sistema deve prever a
possibilidade de falhas humanas durante a interação com o usuário através de leitura de dados em
tela.

Exemplo1

Segue abaixo o código fonte do menu:


48
Módulo: Programação de Sistemas

Note na linha 13 e 16 que foram inseridos caracteres somente para melhorar a estética do menu.

Entendo o código 1:

Utilizamos um laço de repetição enquanto houver os valores inseridos pelo usuário, ou seja, o
programa espera um número entre 1 e 4, enquanto o usuário digitar algo diferente do esperado o
mesmo continuará preso ao laço de repetição.

49
Módulo: Programação de Sistemas

Seguem abaixo as telas de execução:

50
Módulo: Programação de Sistemas

Entendo o código:

Neste caso foi utilizado a condicional “escolha” para interagir com o


valor inserido pelo usuário, inclusive a condicional escolha é muito
boa para ser utilizada nesses casos.

51
Módulo: Programação de Sistemas

Atividades

1. Desenvolva um programa no VISUALG que possua um menu de um sistema bancário,


conforme o exemplo abaixo:

NOME DO BANCO
______________________________________________________

CLIENTE: Nome do cliente


_______________________________

SELECIONE UMA OPÇÃO:


_______________________________

1.Saldo
2.Extratos (Últimos 5 dias)
3.Empréstimos

52
Módulo: Programação de Sistemas

• Se o cliente escolher a opção 1, deverá apagar a tela e em seguida aparecer uma tela com um
saldo fictício.

• Se o cliente escolher a opção 2, deverá apagar a tela e em seguida o sistema deverá mencionar
os gastos (fictícios) mais recentes do cliente.

• Se o cliente escolher a opção 3, deverá apagar a tela e em seguida aparecer uma mensagem:
“Procure a sua agência para a liberação de empréstimos. ”

• Criar uma consistência fazendo que o usuário digite apenas números entre 1 e 3, se o usuário
digitar um número fora desse intervalo, uma mensagem de erro deverá ser apresentada com
os dizeres: “Opção inválida! ” E em seguida deve ser solicitada a opção novamente para o
usuário até que ele digite uma opção válida.

• OBS: Tire um Print Screen do código fonte e também da tela de execução do programa.

2. Desenvolva um programa que fornecerá as informações de notas e faltas dos alunos, conforme o
exemplo abaixo:

• Ao selecionar a opção 1 deverá:


o Limpar a tela
o Aparecer o seu nome, disciplina, quantidade de faltas (fictícias) e notas (fictícias)
conforme o exemplo abaixo:
o Exemplo:

CENTRAL DO ALUNO

>> NOTAS E FALTAS <<

Nome do aluno: Deverá aparecer o seu nome

Disciplina: Nome da disciplina Quant. de faltas: 5 Nota: 10


Disciplina: Nome da disciplina Quant. de faltas: 2 Nota: 4
Disciplina: Nome da disciplina Quant. de faltas: 3 Nota: 6

• Ao selecionar a opção 2, deverá:


o Limpar a tela

53
Módulo: Programação de Sistemas

o Aparecer a tela de dúvidas ao qual o aluno poderá enviar uma mensagem com alguma
dúvida para o professor.
o Exemplo:

CENTRAL DO ALUNO

>> DÚVIDAS <<

Nome do aluno: Deverá aparecer o seu nome

Digite aqui a sua dúvida: Gostaria de solicitar a revisão da minha nota da


disciplina XYZ

• Note que o sistema deverá ler a dúvida do usuário e depois apresentar a mensagem: “A sua
dúvida foi enviada para o professor, por favor, aguarde uma resposta dele”.

o Exemplo:

CENTRAL DO ALUNO

>>DÚVIDAS <<

Situação: A sua dúvida foi enviada para o professor, por favor, aguarde uma
resposta dele.

Se o usuário escolher a opção 3, deverá:

o Limpar a tela
o Apresentar a mensagem: “Sessão finalizada! ”.
o Exemplo:

CENTRAL DO ALUNO

Sessão finalizada!

• Crie uma consistência fazendo que o usuário digite apenas números entre 1 e 3, se o usuário
digitar um número fora desse intervalo, uma mensagem de erro deverá ser apresentada com
os dizeres: “Opção inválida! ” E em seguida deve ser solicitada a opção novamente para o
usuário até que ele digite uma opção válida.

• OBS: Tire um Print Screen do código fonte e da tela de execução do programa.

Tema 5: Vetores

54
Módulo: Programação de Sistemas

Introdução

Imagine que você deseja armazenar o nome e as notas de dez alunos, seria uma tarefa árdua ter que
criar dez variáveis para armazenar cada uma os nomes e mais dez para armazenar as notas deles.
Os vetores ajudam a facilitar esta tarefa, eles são um tipo de variável que permite armazenarmos uma
grande quantidade de informações de um mesmo tipo, quer sejam: números inteiros, reais, caracteres
ou lógicos, sem precisar criar várias variáveis diferentes para cada dado a ser armazenado. Ele irá
armazenar as informações em cada posição (índice) de memória reservada.

Exemplo:

Vetor para armazenar cinco nomes:

VetNomes:

Maria João Rosa Paula Fábio


0 1 2 3 4

Exemplo 1: Criando um vetor do tipo inteiro

Uma variável que será transformada em vetor deverá ser declarada normalmente como todas as
variáveis, ou seja, dentro da seção de declarações de variáveis, ou dentro de funções e procedimentos
para serem usados localmente.

Exemplo de criação de vetores:

nomeDoVetor: vetor [tamanho do vetor] de tipo (inteiro, real, caractere ou lógico)

No exemplo abaixo, criamos um vetor com o nome vetorDeInteiros para armazenar 4 números inteiros
([0...3]), veja a linha 9 do algoritmo abaixo.

Em seguida, na linha 14, atribuímos a primeira posição de memória do vetor (posição 0) para receber

o valor 2.

55
Módulo: Programação de Sistemas

Veja abaixo como ficou o armazenamento dos dados no vetor vetorDeInteiros, na posição 0 está
armazenado o valor 2, já, nas demais posições do vetor, por padrão para vetores inteiros ou reais
receberão o valor inicial de 0, podendo serem alterados quando assim desejarmos.

Representação do vetor:

Abaixo segue a tela de execução:

Exemplo 2: Criando um vetor do tipo real

No exemplo abaixo, note que o processo de criação de vetores para números reais é parecido com o
de números inteiros, a diferença é que declaramos o vetor como do tipo real, veja a linha 9 do algoritmo
abaixo.

56
Módulo: Programação de Sistemas

Note que na posição 0 do vetor foi atribuído o valor de 2.6, veja a linha 14:

Representação do vetor:

Abaixo segue a tela de execução:

Exemplo 3: Criando um vetor do tipo caractere

No exemplo abaixo, note que o processo de criação de vetores para caracteres é parecido com o de
números inteiros e reais, a diferença é que declaramos o vetor como do tipo caracter, veja a linha 9 do
algoritmo abaixo.

Note que na posição 0 do vetor foi atribuído o valor de “blablabla”, veja a linha 14

57
Módulo: Programação de Sistemas

Representação do vetor:

Veja acima como ficou o armazenamento dos dados no vetor vetorDeCaracter, na posição 0 está
armazenado o valor “blablabla”, já, nas demais posições do vetor, por padrão para vetores do tipo
caracteres receberão o valor inicial “espaço vazio”, podendo serem alterados quando assim
desejarmos.

Abaixo segue a tela de execução:

Exemplo 4: Criando um vetor do tipo lógico

No exemplo abaixo, note que o processo de criação de vetores para o tipo logico é parecido com os
anteriores, a diferença é que declaramos o vetor como do tipo logico, veja a linha 9 do algoritmo abaixo.

Note que na posição 0 do vetor foi atribuído o valor verdadeiro veja a linha 14:

58
Módulo: Programação de Sistemas

Representação do vetor:

Abaixo segue a tela de execução:

Exemplo 5: Exibindo as informações armazenadas nos vetores

A partir da linha 18, é possível visualizar uma maneira de mostrarmos as informações armazenadas
num vetor. Esta não é a melhor forma de mostrarmos os dados de um vetor, pois além de ser
trabalhosa, polui o código fonte com linhas desnecessárias.

59
Módulo: Programação de Sistemas

Abaixo seguem os valores armazenados no vetor:

A melhor forma de exibir os valores armazenados nos vetores é da maneira abaixo:

No exemplo abaixo, foi criado um laço de repetição do tipo “Para” com o objetivo de ler os números
inteiros digitados para as quatro posições de um determinado vetor. Veja entre as linhas 19 e 23.Outro
laço de repetição foi criado para mostrar os valores armazenados no vetor, veja as linhas entre 29 e
31. Os laços de repetição utilizam uma variável como contador do tipo inteiro que será responsável por
armazenar a posição de memória do vetor.

Abaixo seguem as telas de execução do algoritmo:

60
Módulo: Programação de Sistemas

Atividades:

1. O que são vetores?

2. Como referenciamos um elemento específico de um vetor?

3. Desenvolva um programa que utilizará um vetor para armazenar 5 números inteiros digitados
pelo usuário, e depois mostre esses 5 números em tela.

Exemplo:

Digite 5 números
5
2
20
17
4
• Limpe a tela e exiba os números conforme o exemplo abaixo:

Os números digitados são:


5
2
20
17
4

4. Desenvolva um programa que utilizará um vetor que receberá 5 números inteiros que serão
gerados de forma aleatória (entre 0 e 100) e depois mostre esses números aleatórios
armazenados no vetor em tela.

Exemplo:

Os números aleatórios gerados são:

61
Módulo: Programação de Sistemas

15
100
48
2
0
5. Desenvolva um programa utilizando vetores que irão ler do usuário 5 nomes de alunos e 5
notas de AV1 e 5 notas de AV2. O algoritmo deverá calcular a média aritmética simples das
notas dos alunos e exibi-las.

• Primeiro passo: O algoritmo deve limpar a tela toda vez que o usuário digitar as notas
de cada aluno, isso deve ser feito para não poluir a tela.

NOTAS DOS ALUNOS

Nome do aluno: Rodolfo


Nota AV1: 7
Nota AV2: 10
• Passo 2: Mostre os nomes e as notas dos alunos conforme exemplo abaixo:

MÉDIA DOS ALUNOS

Nome: Rodolfo Nota AV1: 7 Nota AV2: 10 Média: 8,5


Nome: Vera Nota AV1: 5 Nota AV2: 7 Média: 6
Nome: Daniela Nota AV1: 7 Nota AV2: 6 Média: 6,5
Nome: Lenir Nota AV1: 6 Nota AV2: 6 Média: 6
Nome: Leoni Nota AV1: 7 Nota AV2: 9 Média: 8

6. Desenvolva um programa que irá ler 10 números inteiros digitados pelo usuário, esses números
devem ser armazenados num vetor, em seguida mostre em tela somente os números pares
armazenados no vetor.

Exemplo:

Digite 10 números:
50
60
20
15
19
8
12
15
110
54
Em seguida a tela deve ser apagada, e depois mostrar os números pares armazenados no vetor:

Os números pares armazenados no vetor são:


50
60
20
8
12
62
Módulo: Programação de Sistemas

110
54

63
Módulo: Programação de Sistemas

Tema 6: Matrizes e Algoritmos de ordenação

Introdução

As matrizes são como se fossem conjuntos de vetores, em vez de termos um vetor em que podemos
acessar as posições em apenas uma linha, com as matrizes podemos acessar várias linhas diferentes.
Assim como os vetores, as matrizes podem armazenar dados de números inteiros, reais, caractere e
lógico.Imagine por exemplo, que queiramos armazenar três notas de 40 alunos, então poderíamos
usar uma matriz para isso, segue exemplo:

Cada posição da matriz é representada por um índice, na matriz temos dois índices um na vertical e
outro na horizontal.

Exemplo 1

Para criarmos uma matriz no VISUALG é necessário declará-la na seção de declarações de variáveis.

No exemplo abaixo é possível notar na linha 7 que foi criado uma matriz com o nome de matriz, como
um conjunto de dois vetores que podem armazenar até 4 números inteiros cada.

Entre a linha 15 e 18, a linha 0 da matriz receberá 4 números inteiros para cada índice da linha 0.

Entre a linha 21 e 24, a linha 1 da matriz receberá 4 números inteiros para cada índice da linha 1.

64
Módulo: Programação de Sistemas

Para exibir os valores armazenados na matriz, utilizamos laços de repetição do tipo PARA, é possível
visualizar o laço a partir da linha 28.

Abaixo segue a tela de execução:

Exemplo 2:

No exemplo anterior, perceba que a visualização dos dados da matriz é ruim, para melhorar a
visualização é necessário alterar o laço de repetição utilizado para mostrar os dados armazenados na
matriz.

Entre as linhas 28 e 33 há um laço de repetição PARA dentro de outro laço de repetição PARA. Além
disso, está sendo utilizado o comando escreva em vez de escreval, ou seja, a cada repetição os
números da linha serão exibidos um do lado do outro e quando acabar o laço o comando escreval que

65
Módulo: Programação de Sistemas

está na linha 32 fará o pulo de linha. As variáveis contador1 e contador2 são os índices da matriz,
através deles percorremos as linhas e colunas da matriz através dos laços de repetição.

Abaixo segue a tela de execução, note que a visualização dos dados da matriz desta maneira facilita
relacionarmos os valores armazenados nos índices da matriz.

Exemplo 3:

No exemplo abaixo, foi alterado o algoritmo para ler os números digitados pelo usuário, é importante
ressaltar que os laços de repetição utilizados para ler os números são praticamente os mesmos
daqueles utilizados para exibir os dados armazenados na matriz, basta comparar as linhas entre 15 e
20 com as linhas entre 24 e 29, perceba que o que muda é que numa terá o comando leia e na outra
teremos o comando escreva para exibir os valores da matriz.

66
Módulo: Programação de Sistemas

Abaixo segue a tela de execução do nosso exemplo:

Atividades

67
Módulo: Programação de Sistemas

1. O que são matrizes?

2. Como podemos referenciar um elemento específico de uma matriz?

3. Qual é a utilidade de uma matriz?

4. Desenvolva um programa que carregue numa matriz 2(linhas) x10(colunas) os nomes dos
alunos de uma sala, a sala está dividida em dois grupos de 10 alunos. Após isso, devem ser
apresentados os nomes dos alunos dos grupos.

5. Desenvolva um programa com uma matriz 3x3, atribua a cada índice da matriz um valor
aleatório (entre 0 e 50). Em seguida imprima todos os dados da matriz e depois somente os
valores armazenados na diagonal principal da matriz.

Exemplo:

Os dados da matriz são:


15 22 19
13 35 49
6 12 25
• Apague a tela e em seguida mostre os valores localizados na diagonal principal.

Algoritmos de ordenação

O ato de ordenar faz com que os elementos sigam uma ordem pré-definida. A ordenação pode ser
feita com números e caracteres, e podem ser crescentes ou decrescentes. Há várias utilidades para
a ordenação dos dados, desde melhorar a visualização deles, até mesmo para melhorar e agilizar o
acesso a informação.

Neste tema, iremos abordar um dos algoritmos de ordenação mais simples e conhecido, o Bubble Sort.

Bubble Sort

O Bubble Sort, ou ordenação por flutuação (literalmente "por bolha"), é um algoritmo simples e muito
utilizado por programadores para ordenar uma quantidade pequena de dados. Em seu funcionamento
ele percorre o vetor diversas vezes, e a cada passagem faz flutuar para o topo o maior elemento da
sequência. Por conta dessa “flutuação” deram o nome de Bubble Sort para o algoritmo.

Exemplo:

No exemplo abaixo, o algoritmo de ordenação “Bubble Sort” irá comparar a bola “1” com todas as bolas
até encontrar uma bola que seja menor, e quando encontrar uma bola menor ele fará a troca.

1 4 5 2

68
Módulo: Programação de Sistemas

Após a bola 1 ter sido comparada com todas as bolas, a próxima a ser comparada com as demais é a
bola 4 que está na segunda posição do vetor. Note que 4 não é maior que 5 então não será feita a
troca entre essas bolas, porém 4 é maior que 2, então os valores de 4 e 2 são trocados.

O que restou foi comparar o penúltimo valor com o último, no caso comparar o 5 com o 4, como 4 é
menor que 5 então será a feita a troca.

Pronto! Agora temos o nosso vetor ordenado.

Algoritmo de ordenação “Bubble Sort” parte 1/2:

69
Módulo: Programação de Sistemas

Continuação do algoritmo parte 2/2:

Abaixo segue a tela de execução

70
Módulo: Programação de Sistemas

Atividades

1. Explique como funciona o algoritmo de ordenação Bubble Sort.

2. Com base no funcionamento do algoritmo Bubble Sort, é correto afirmar que ele é ideal para
ordenar pequenas listas de números? Justifique.

3. Desenvolva um programa que irá ler 10 números do usuário, utilize o Bubble Sort para ordená-
los.

4. Desenvolva um programa utilizando o algoritmo de ordenação Bubble Sort para ordenar 10


números inseridos pelo usuário. Porém após ordenar a lista, devem ser mostrados em ordem
somente os números pares.

5. Desenvolva um programa que irá ler do usuário 10 nomes e 10 notas dos alunos. Utilize o
algoritmo de ordenação Bubble Sort para ordenar as notas, importante ressaltar que os
respectivos nomes dos alunos devem ser ordenados junto com as notas. Mostre os valores
ordenados.

6. Pesquise e cite ao menos 4 algoritmos de ordenação.

Tema 7: Procedimento

71
Módulo: Programação de Sistemas

Introdução

Podemos dividir um grande programa em porções menores denominadas de módulos, esses módulos
podem consistir em arquivos de código-fonte ou apenas rotinas. Essas rotinas podem ser classificadas
em dois tipos: funções e procedimentos. Neste tema abordaremos os procedimentos.
Os procedimentos são rotinas que executam uma determinada tarefa, utilizando ou não argumentos
recebidos, sem retornar um valor.

Exemplo 1:

Os procedimentos são criados fora da seção Início, veja que entre as linhas 8 e 11 foi criado um
procedimento de nome “saudacao”, toda vez que ele for chamado aparecerá uma mensagem “Olá
Mundo! ”.

A chamada do procedimento está sendo feita na linha 17.

Abaixo segue a tela de execução:

72
Módulo: Programação de Sistemas

Exemplo 2: Procedimento com parâmetros

Parâmetros são valores decorrentes de uma variável ou de uma expressão, que pode ser enviado para
um procedimento ou função.

No caso abaixo queremos que o procedimento receba o nome do usuário e faça a saudação
personalizada para o usuário.

Note que na linha 7, declaramos uma variável chamada de “nome” como do tipo caracter.

Na linha 25 lemos o nome digitado pelo usuário e na linha 31 chamamos o procedimento “saudacao”
passando o nome do usuário como parâmetro.

Entre as linhas 11 e 14 está o nosso procedimento “saudacao”.

Abaixo seguem as telas de execução:

73
Módulo: Programação de Sistemas

Exemplo 3: Procedimento utilizando variáveis globais

Neste exemplo, é possível verificar que o procedimento procComVariavelGlobal faz o incremento de


mais 1 para a variável variavelGlobal quando o mesmo é acionado (linha 13).

Note que na linha 21 a variavelGlobal recebe o valor de 0, e logo em seguida na linha 23 é solicitado
a exibição em tela do valor da variável, que no caso é 0.

Porém, note que ao chamarmos o procedimento “procComVariavelGlobal” (linha 27), como


mencionado anteriormente o procedimento irá somar o valor de 1 ao valor armazenado na variável
variavelGlobal, ocorre que ao exibirmos novamente o valor da variável “variavelGlobal” a mesma
possuirá o valor atualizado de 1. Veja a tela de execução desse algoritmo.

Ou seja, ao utilizarmos variáveis globais nos procedimentos, temos que ter em mente que o valor da
variável poderá ser alterado a cada chamada do procedimento.

Tela de execução:

Exemplo 4: Procedimento com variável local

Para declarar uma variável local dentro de um procedimento ou função, basta utilizar a tag “Var” e criar
a variável dentro dessa seção, veja entre as linhas 9 e 11.

74
Módulo: Programação de Sistemas

O restante do algoritmo é igual ao do exemplo anterior, a única diferença é que estamos utilizando
uma variável local (“variavelLocal”).

75
Módulo: Programação de Sistemas

Note que na tela de execução, não importa quantas vezes chamemos o procedimento
“incrementaVariavelLocal” sempre o valor será o mesmo (nesse algoritmo), pois cada vez que ele é
chamado a variável terá sempre 0 e depois será incrementado +1.

Atividades

1. O que são módulos?

2. O que são procedimentos?

3. O que são parâmetros?

4. Com base no exemplo 2, qual é a utilidade em passarmos parâmetros para os procedimentos?

76
Módulo: Programação de Sistemas

5. Explique o que você entendeu sobre os exemplos 3 e 4, onde num exemplo o procedimento
utiliza uma variável global e no outro é utilizado uma variável local.

6. Desenvolva um programa que possuirá o menu de um sistema bancário, conforme o exemplo


abaixo, porém, para cada tela do menu deverá ser criado um procedimento, ou seja, um
procedimento para o menu principal, outro para saldo, extratos e empréstimos.

• Se o cliente escolher a opção 1, deverá apagar a tela e em seguida aparecer uma tela
com um saldo fictício.

• Se o cliente escolher a opção 2, deverá apagar a tela e em seguida o sistema deverá


mencionar os gastos (fictícios) mais recentes do cliente.

• Se o cliente escolher a opção 3, deverá apagar a tela e em seguida aparecer uma


mensagem: “Procure a sua agência para a liberação de empréstimos. ”

• Criar uma consistência fazendo que o usuário digite apenas números entre 1 e 3, se o
usuário digitar um número fora desse intervalo, uma mensagem de erro deverá ser
apresentada com os dizeres: “Opção inválida! ” E em seguida deve ser solicitada a
opção novamente para o usuário até que ele digite uma opção válida.

• OBS: Tire um Print Screen do código fonte e também da tela de execução do programa.

7. Desenvolva um programa no VISUALG que irá ler dois números inteiros.

• Deverá aparecer um menu para o usuário solicitando que escolha uma opção conforme
abaixo:

• A tela deverá ser limpa e aparecer o menu abaixo:

77
Módulo: Programação de Sistemas

OBS: Para cada opção (soma, subtração, multiplicação e divisão) crie um procedimento e escreva o
resultado da operação matemática.

Funções

As funções em programação são similares às existentes na Matemática, ou seja, elas operam com
valores passados como parâmetros e devolvem um valor resultante dos cálculos. Assim como os
procedimentos, as funções são ótimas para atribuirmos para elas as tarefas repetitivas.

Por exemplo, podemos criar uma função para calcular a média, então toda vez que for necessário
calcular a média poderemos utilizar essa função.

Exemplo1: Funções sem parâmetros

Assim como nos procedimentos, as funções são criadas fora da seção “Início”, conforme a imagem
abaixo, veja as linhas entre 9 e 14.

Note que após ser chamada retornará um número inteiro, no caso será o número 15 (linha 12).

Na linha 20 é feita a chamada da função retornaInteiro.

E na linha 23 é exibido o valor retornado pela função.

78
Módulo: Programação de Sistemas

Segue a tela de execução abaixo:

Exemplo 2: Funções com parâmetros

Já no exemplo abaixo, são lidos dois números inteiros através do usuário (linha 25), esses números
são passados como parâmetros na chamada da função (linha 29).

A função retornaSoma, recebe os dois números e calcula a soma (da linha 12 até 17).

Após, o valor da soma retornada pela função retornaSoma é exibido em tela (linha 31).

79
Módulo: Programação de Sistemas

Abaixo segue a tela de execução:

Atividades

1. O que são funções?

2. Qual a diferença entre uma função e um procedimento?

80
Módulo: Programação de Sistemas

3. Com base no exemplo 2, desenvolva um programa no VISUALG que irá ler dois valores inteiros.
Crie uma função para cada uma das seguintes operações matemáticas: soma, subtração,
multiplicação e divisão.

• No final o resultado das operações deverá ser exibido em tela.

4. Desenvolva um programa que possuirá uma função chamada de pagamento, ela deverá
receber as horas trabalhadas e o valor das horas. No final o valor a ser pago para o trabalhador
deverá ser retornado pela função e depois exibido em tela.

5. Desenvolva um programa que possuirá uma função que receba o nome do usuário e a idade
dele, a função deverá retornar quantos dias de vida o usuário já viveu. Por exemplo:

DIAS DE VIDA
______________________________

Digite o seu nome: Maria

Digite a sua idade:34

• Limpe a tela e faça aparecer a mensagem abaixo:

Olá Maria, você já viveu 12410 dias!

Tema 8: Técnicas e dicas de programação

81
Módulo: Programação de Sistemas

Introdução

Para que os projetos de desenvolvimento de softwares ocorram bem, é necessário que o programador
siga os padrões e boas práticas estabelecidas, assim, evitando ou minimizando erros decorrentes de
falta de planejamento ou padronização de código.

É sempre bom o programador ter em mente que outros programadores poderão mexer no código do
seu programa, e para facilitar esta tarefa de entendimento do código nada melhor que seguir as
normas.

1. Identificadores

Em programação, um identificador é um nome atribuído a uma variável de memória, uma


estrutura de dados, uma classe, um objeto, um procedimento, uma função, um comando ou
palavra reservada da linguagem.

• Algumas regras são estabelecidas para definição de identificadores, que variam conforme a
linguagem, tais como:

• Um identificador pode ter até 32 caracteres de comprimento.

• O primeiro caractere deve ser uma letra do alfabeto.

• Os demais caracteres poder ser letras, números ou o sinal de sublinhado, também conhecido
como underscore (_).

• Não são aceitos sinais de pontuação, caracteres acentuados, cedilha (ç) ou espaço em branco.

São exemplos válidos de identificadores: Nome_Cliente, Data_Emissao e Valores_1_a_100.

Não são exemplos válidos de identificadores: Nome do cliente, Data_Emissão, MensagemAviso!!!,


2aSemana

2. Indentação de Código

82
Módulo: Programação de Sistemas

Conforme o exemplo abaixo, indentar o código significa recuar partes do código a fim de facilitar o
entendimento do código. Um código sem indentação torna maçante o processo de entendimento.

3. Testes

Efetuar vários testes nos programas é uma boa prática. Criar testes automatizados também deve ser
considerado.

Não poupe esforços para testar um programa antes de entregar ao cliente.

4. Fluxogramas

Como visto no tema sobre fluxogramas, os fluxogramas são muito úteis nas etapas iniciais dos
projetos, pois nos dão a real dimensão de como deverá funcionar o programa.

5. Comentários

Dependendo da linguagem de programação a forma de comentar o código mudará.


Abaixo segue um exemplo em como podemos utilizar os comentários.

Note que comentar o código é uma boa prática pois facilita o processo de entendimento do código.
Imagine que nem sempre será você que irá efetuar na manutenção do sistema.

6. Diminuir as linhas de código

83
Módulo: Programação de Sistemas

Diminuir a quantidade de linhas de código, também é uma boa prática, muitas vezes menos é mais.

Por exemplo:

Em vez de escrever:

Leia (a)

Leia (b)

Podemos escrever desta maneira:

Leia (a, b)

7. Fazer consistências de dados

Campos de formulários ou variáveis que recebem valores através da interação com usuário, devem
receber consistência de dados.

Por exemplo:

Ao ler o nome de alguma pessoa, devemos consistir, por exemplo, se:

• A pessoa digitou alguma coisa;

• Se há somente espaços em branco;

• Se digitou números ou caracteres não esperados como: *&%¨#$%#*!

Ao ler a idade de alguém, devemos consistir, por exemplo, se:

• A idade é maior que zero;

• Verificar se o usuário não digitou letras ou caracteres inválidos;

8. Tenha um controle de versão

Tenha um controle de versão do programa, a cada alteração do programa, seja organizado para
manter o controle de versão atualizado especificando a nova versão e também registrando o que foi
alterado na nova versão. Quando há muitos programadores trabalhando num mesmo sistema
simultaneamente é importante considerar um software para fazer o controle de versão do sistema, pois
o processo manual é suscetível a muitas falhas.

9. Idioma

Como muitas linguagens utilizam comandos em inglês, é recomendável ter um conhecimento no


mínimo básico de inglês, assim você terá condições de interpretar melhor as mensagens de erro e
poderá fazer pesquisas na internet em páginas de língua inglesa.

84
Módulo: Programação de Sistemas

Atividades

1. É possível escrever nomes de variáveis desta maneira: Nome do cliente, Data_Emissão,


MensagemAviso!!!, 2aSemana? Justifique.

2. O que é endentação de código? Qual é a importância de indentarmos o código?

3. Faça uma pesquisa sobre quais são os principais tipos de testes de software.

4. Em qual etapa do projeto os fluxogramas são muito úteis?

5. Qual a importância de se fazer comentários nos códigos dos programas?

6. O que é validação de dados? Qual é a importância em validarmos os dados digitados pelos


usuários?

7. O que é controle de versão?

8. Quais são os tipos de controle de versão? Pesquise.

9. Por que é importante ter no mínimo o conhecimento básico de inglês para ser programador?
Justifique.

Tema 9 : Conceitos básicos de Python

Introdução

Criado por Guido van Rossum nos anos 1990, atualmente a linguagem é mantida nas versões 2.7,3.4
e 3.7. Multiplataforma, o interpretador Python está disponível para Microsoft Windows e diversos Unix-
like. Python é uma linguagem de alto nível, multiparadigma e interpretada, que pode ser executada
em modo script e/ou em modo interativo. A sintaxe de Python é simples e fácil de ser aprendida. O que
delimita um bloco na linguagem Python são a indentação, e não o bloco de chaves ({}), como é em
C++ ou no uso de uma palavra reservada, como na linguagem Pascal.

Quando um programa é criado, o código-fonte é salvo em um arquivo-texto com a extensão apropriada


para script Python (.py). No terminal, ao invocar o interpretador Python e o script ser criado, o
interpretador executa o script e recebe as entradas de dados.

85
Módulo: Programação de Sistemas

Começando a usar o Python

Instalando o Python

1. Acesse o site: https://www.python.org/

2. Clique em “Download”, será necessário baixar o instalador conforme a versão e tipo de sistema
operacional.

OBS: Sistema Linux já possuem o Python instalado, basta executá-lo através do terminal.

O IDLE é o ambiente interativo de desenvolvimento.

86
Módulo: Programação de Sistemas

Abaixo segue a tela do IDLE ( PYTHON SHELL):

O Python 3.7 é o interpretador.

87
Módulo: Programação de Sistemas

Abaixo segue a tela do Python 3.7 (Interpretador):

Criando o nosso primeiro programa

O Atom que é um editor de texto (poderoso), será utilizado como interpretador para Python, para isso,
é necessário primeiro clicar em File => New File

88
Módulo: Programação de Sistemas

Depois clique em “Save”.

Salve o arquivo da seguinte maneira: “nome_do_arquivo.py”

89
Módulo: Programação de Sistemas

Digite o comando print (‘Olá mundo’), conforme abaixo:

Para executar o programa no Atom basta pressionar o botão “F5” do teclado.

A função print() exibe na tela informações para o usuário, segue abaixo a tela de execução:

Também é possível exibir cálculos matemáticos com a função print(), conforme abaixo:

90
Módulo: Programação de Sistemas

Segue abaixo a tela de execução

Também podemos concatenar um texto com um cálculo matemático, conforme abaixo:

Note que esteticamente é muito melhor fazermos isso, pois o usuário compreende melhor as
informações que estão sendo mostradas na tela. Segue abaixo a tela de execução:

Atividades

1. Escreva sobre a linguagem Python.


2. O que significa dizer que uma linguagem é de baixo nível?
3. O que significa dizer que uma linguagem é de médio nível?
4. O que significa dizer que uma linguagem é de alto nível?
5. O Python é uma linguagem de baixo, médio ou alto nível?
6. O que é uma IDE?
7. Qual a diferença entre o IDLE ( PYTHON SHELL) e o interpretador do Python via Prompt
de Comando?
8. Porque usaremos o Atom para ser o interpretador do Python?
9. O que significa dizer que o que delimita o bloco no Python é a indentação?
10. Desenvolva um programa que faça aparecer na tela uma frase de uma letra de música.
11. Quais são as formas de se fazer comentário no código fonte do Python?
12. Execute os dois comandos: print('Olá\nmundo!') e print('Olá mundo!'). Explique a
diferença entre eles.

91
Módulo: Programação de Sistemas

Variáveis em Python

Introdução

Uma variável serve para armazenar um valor na memória, para que esse valor possa ser
acessado/utilizado pelo software quando for necessário. O nosso cérebro possui um comportamento
semelhante, por exemplo, o cérebro tem a capacidade de armazenar vários tipos de informações, tais
como: número de CPF, cheiro da comida da mãe, voz de pessoas conhecidas e muito mais. Cada
informação é catalogada com um tipo.

As variáveis são armazenadas na memória. O processo de criar um vínculo, ou seja, associar uma
área de memória, chamamos de liberação.

Existem quatro categorias de alocação: estática, dinâmica da pilha, dinâmica no heap explícita e
dinâmica no heap implícita. As variáveis estáticas são aquelas em que a vinculação ocorre antes do
início da execução.

Quando a vinculação é criada a partir de uma sentença de declaração, a chamados de variável


dinâmica de pilha. E advinha onde a variável está alocada! Sim, na pilha (stack memory). É alocada e
liberada em tempo de execução.

Exemplo 1:

Por exemplo, ao escrever cpf = 32485977805, declararemos uma variável com o nome de cpf e
atribuindo a ela o valor de 32485977805

Ao utilizar o comando print, poderemos visualizar na tela o valor armazenado na variável, conforme
demonstrado na linha 3 abaixo:

92
Módulo: Programação de Sistemas

Segue a tela de execução abaixo:

Podemos concatenar textos com variáveis para mostrar algo para o usuário, conforme a linha 3 do
exemplo abaixo:

Tela de execução:

Dicas para criação de variáveis

As variáveis não podem começar com números.

Devemos começar a variável com uma letra ou underscore ( _ )

O Python é case sensitive, ou seja, se você criou uma variável com letras minúsculas deverá sempre
escrevê-la da mesma forma, do contrário ele não reconhecerá a variável. Portanto, você sempre
deverá se atentar se está escrevendo o nome das variáveis exatamente como foram declaradas.

É uma boa prática evitar criar nome de variáveis muito longos.

Procure também criar variáveis com nomes autoexplicativos, isso facilitará o entendimento do código
por outras pessoas.

93
Módulo: Programação de Sistemas

Além disso, também evite dar nomes de funções para as variáveis.

Exemplo1

No exemplo abaixo, foram declaradas três variáveis, chamadas: cpf, nome e altura.

Automaticamente o Python atribui a elas um tipo, que dependerá do valor que estaremos atribuindo a
elas, por exemplo, na variável cpf estamos atribuindo a ela um número inteiro (int), já em nome estamos
atribuindo caracteres (string) e na variável altura estamos atribuindo um valor real (float).

Note abaixo nas linhas 5,6 e 7 que é possível utilizarmos o comando type para mostrar o tipo da
variável, no caso também utilizamos o comando print para que essas informações sejam mostradas
em tela.

Segue abaixo a tela de execução, note que a variável do tipo nome é do tipo string (str), cpf é do tipo
inteiro (int) e altura é do tipo real (float):

94
Módulo: Programação de Sistemas

Podemos melhorar a forma de visualizar essas informações concatenando textos no comando print,
conforme as linhas 5,6 e 7 da tela abaixo:

Segue a tela de execução:

Strings

As strings são entendidas pelo Python como uma sequência de caracteres.

95
Módulo: Programação de Sistemas

Para criar variáveis do tipo string (caracteres) basta quando for atribuir um valor para a variável utilizar
aspas simples ou aspas duplas, conforme a tela abaixo:

Note que ao utilizar os comandos print e type conseguimos confirmar que as variáveis “nome” e
“sobrenome” são do tipo string

Segue a tela de execução:

Note que com o operador ‘+’ é possível concatenar as variáveis que são do tipo string.

Segue abaixo um exemplo, na linha 5 o operador ‘+’ utilizado no comando print, fez com que as
variáveis fossem concatenadas, porém sem espaço entre elas. Para que seja possível concatenar com
um espaço entre as variáveis é necessário utilizar um espaço em branco na concatenação, assim
como demonstrado na linha 6.

Segue abaixo a tela de execução do exemplo:

Podemos também utilizar o operador ‘*’ nas variáveis do tipo string

96
Módulo: Programação de Sistemas

Segue abaixo a tela de execução, note que o nome foi exibido 3 vezes por conta que utilizamos o
operador ‘*’, que no caso o Python entendeu no exemplo acima (na linha 3) que era para escrever o
nome três vezes.

Como mencionado anteriormente as variáveis do tipo string são um conjunto de caracteres, portanto
ao utilizar a função len(nome_da_variável), poderemos verificar a quantidade de caracteres
armazenados numa variável do tipo string.

Segue abaixo a tela de execução:

Note que o nome “Beltrano” ocupa 8 posições da variável nome. Conforme abaixo, observe que o
índice (número da posição) começa em zero:

97
Módulo: Programação de Sistemas

Por exemplo, se quisermos exibir na tela o caractere que está no índice zero, basta fazer conforme o
exemplo abaixo na linha 2.

Segue abaixo a tela de execução, note que apareceu o primeiro caractere do nome armazenado na
variável nome:

No exemplo abaixo, foi exibido todos os 8 caracteres armazenados na variável nome através dos
índices de cada posição. Ver linhas 2 até 9.

98
Módulo: Programação de Sistemas

Segue abaixo o resultado de execução do código:

Para acessar o último caractere de uma variável do tipo string, não é necessário saber o seu tamanho,
basta escrever: nome_variável [-1], conforme o exemplo abaixo na linha 2:

Segue abaixo a tela de execução, note que foi exibida a letra “o” pois é a última letra dos caracteres
armazenados na variável nome, que está armazenando o nome “Beltrano”.

Fatiando a variável

No exemplo abaixo (linha 2), note que é possível mostrar uma sequência determinada de caracteres
de uma variável, no caso serão exibidos os caracteres do índice 0 até o índice 2:

99
Módulo: Programação de Sistemas

Segue abaixo a tela de execução, note que foi exibido os três primeiros caracteres armazenados na
variável nome:

Abaixo, veja que é possível especificarmos para mostrar os últimos caracteres, no exemplo, ao utilizar
print (nome_variável [-2:] ) o Python irá mostra os dois últimos caracteres armazenados na variável.

Segue abaixo a tela de execução:

Para ler um texto a partir do usuário

Para lermos um texto de um usuário para armazenar numa variável utilizamos a função input (),
conforme a tela abaixo (linha 1):

Segue a tela de execução do código:

100
Módulo: Programação de Sistemas

Podemos melhorar a tela adicionando na função input uma frase explicando ao usuário o que ele deve
digitar, conforme abaixo (linha 1):

Segue abaixo a tela de execução:

OBS: A função input() lerá as informações do usuário e irá armazená-las como strings.

Números

Como visto anteriormente, ao atribuirmos um número para uma variável, o Python automaticamente
irá definir a variável como do tipo inteiro (int) ou real (float). Note que nas linhas 3 e 4 foi atribuído um
número inteiro para a variável num1 e atribuído um número real (float) para a variável num2.

Ao utilizar o comando print (type(num1)) e print (type(num2)) é possível checar o tipo da variável,
conforme a tela de execução abaixo:

101
Módulo: Programação de Sistemas

Note abaixo que foi atribuído para a variável num3 a soma de num1+num2 cujo resultado será 7.5.
Portanto, o Python entenderá que a variável num3 deverá ser do tipo real (float) pois ela possui casas
decimais após a vírgula ou ponto.

Na linha 7 será apresentada o valor da variável num3, e na linha 8 será apresentado qual é o tipo dela,
ou seja, se é do tipo inteiro ou real.

Segue abaixo a tela de execução:

Exemplo de potenciação

Para fazer a potenciação de um número, basta utilizar o sinal **, no exemplo abaixo (linha 6) a variável
num1 cujo valor é 2 terá uma potência de 4.

102
Módulo: Programação de Sistemas

Segue abaixo a tela de execução com o resultado da potenciação:

Priorização de cálculos matemáticos

Para que forcemos a priorização de uma operação matemática em relação a outra, devemos utilizar
os parênteses, conforme a linha 3, note que forçamos para que primeiro seja feita a soma dos números
para que depois seja feita a divisão.

Segue abaixo a tela de execução:

Lendo números a partir do usuário

Números inteiros

Para lermos um número através do usuário para armazenar numa variável utilizamos a função int() e
depois a função input (), conforme a tela abaixo (linha 1 e 2):

103
Módulo: Programação de Sistemas

Conforme dito anteriormente a função input() permite somente a leitura de texto, se quisermos ler
números inteiros teremos que utilizar a função int() para converter em número o texto recebido pela
função input().

Abaixo segue a tela de execução:

Números reais (float)

Para lermos um número através do usuário para armazenar numa variável utilizamos a função float()
e depois a função input (), conforme a tela abaixo (linha 1 e 2):

Segue abaixo a tela de execução:

104
Módulo: Programação de Sistemas

Variáveis do tipo lógico

Para definir uma variável como do tipo lógico (booleano) é necessário atribuir para ela True
(verdadeiro) ou False (Falso), conforme o exemplo abaixo (linha 1).

Note que na linha 2, foi dado o comando print (type(nome_da_variavel)) para mostrar o tipo da variável.

Segue abaixo a tela de execução:

Atividades

1. O que são variáveis?

2. Qual a função no Python que é responsável por informar o tipo da variável?

3. O que deve ser feito para ler uma variável do tipo inteiro? Dê um exemplo.

4. O que deve ser feito para ler uma variável do tipo real (float)? Dê um exemplo.

5. Faça um programa que calcule o valor de desconto para um determinado produto, faça um
Print Screen do código fonte do seu programa e também do programa em execução.

6. Crie um programa para converter uma temperatura da escala Celsius para a escala
Fahrenheit. A fórmula para conversão é Fahrenheit = ((Celsius * 9) / 5 ) + 32

7. Elabore um programa que calcule quantas notas de 50,10 e 1 são necessárias para se
pagar uma conta cujo valor é fornecido.

105
Módulo: Programação de Sistemas

8. Elabore um programa que permita a entrada de um número inteiro e diga se ele é par ou
ímpar.

9. Elabore um programa que permita a entrada de dois valores, x e y, troque seus valores
entre si e então exiba os novos resultados.

Tema 10: Listas, tuplas e dicionários

106
Módulo: Programação de Sistemas

Introdução

As listas e tuplas são variáveis que podem armazenar um conjunto de informações, que podem ser do
tipo texto, números inteiros, reais ou lógicos. Sem eles teríamos que criar inúmeras variáveis para
armazenar os dados, por exemplo, podemos criar uma lista para armazenar os nomes dos alunos, se
tivéssemos que criar uma variável para cada aluno seria uma tarefa extremamente trabalhosa e
desnecessária.

Tuplas

Para definir uma tupla, basta atribuir um conjunto de informações para uma variável, porém essas
informações devem estar entre parênteses.

Segue abaixo a tela de execução:

Abaixo utilizamos o type() para mostrar o tipo da variável estacoes (ver linha 3):

107
Módulo: Programação de Sistemas

Abaixo, segue a tela de execução, note que trata-se de uma “Tupla”:

Listas

Assim como a Tupla uma Lista também pode armazenar um conjunto de informações, a diferença
principal entre uma Lista e um Tupla é que numa Tupla sabemos que as informações são imutáveis
(não mudam), já numa Lista as informações são mutáveis (podem mudar).

As Listas também possuem índices onde ficam armazenados os elementos (informações).

Exemplo:

Segue abaixo a tela de execução:

108
Módulo: Programação de Sistemas

Abaixo utilizamos a função len() para contar o tamanho dos elementos das variáveis estacoes e alunos.

Segue abaixo a tela de execução:

Note que é possível visualizarmos os elementos armazenados em cada índice, veja as linhas 4 até 8:

Segue abaixo a tela de execução:

109
Módulo: Programação de Sistemas

Alterando um elemento de uma lista

Segue abaixo a tela de execução:

Colocando um novo elemento na lista

Segue abaixo a tela de execução:

Inserir um elemento a partir de um determinado índice

110
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

Ordenação de uma lista

Segue abaixo a tela de execução:

Para remover um dado de uma lista

Outra maneira de excluir um dado

111
Módulo: Programação de Sistemas

Armazenando números inteiros e reais

Segue abaixo a tela de execução:

Dicionários

Os dicionários assim como as Tuplas e Listas também podem armazenar um conjunto de valores, a
diferença é que esses valores não possuem uma sequência ordenada, ou seja, o acesso aos valores
não ocorre por meio de índices e sim por meio de keys (chaves).

Na imagem acima (linha 8), foi novamente utilizada a função type() para checarmos se a variável é
reconhecida como do tipo dicionário, note abaixo que sim, é do tipo dicionário:

112
Módulo: Programação de Sistemas

Na tela abaixo se quisermos visualizar as informações armazenadas teremos que utilizar as em vez
de índices para acessar os dados.

Segue abaixo a tela de execução:

Verificando a quantidade de chaves armazenadas no dicionário

Para checarmos a quantidade de chaves de um dicionário podemos utilizar a função len(), conforme
abaixo:

Abaixo segue a tela de execução:

Deletando uma chave

113
Módulo: Programação de Sistemas

Para deletar uma chave devemos utilizar o comando del Nome_dicionario [nome_chave], conforme
abaixo:

Segue abaixo a tela de execução:

Alterando os dados de uma chave

Para alterar um dado de uma chave, basta referenciar qual chave deseja-se alterar e atribuir a ela o
valor desejado, conforme a linha 9 da tela abaixo:

114
Módulo: Programação de Sistemas

Verificando se existe uma determinada chave no dicionário

Basta fazer ‘nome_chave’ in nome_dicionario, conforme tela abaixo (linha 9)

Segue a tela de execução abaixo:

Lendo os valores armazenados num dicionário

Para ler um valor armazenado num dicionário, basta utilizar um laço de repetição for, conforme abaixo
(linhas 9,10 e 11).

115
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

Para melhorar a apresentação dos dados em tela, podemos utilizar como exemplo o laço de repetição
abaixo, linhas 9 e 10;

Segue abaixo a tela de execução do programa:

Conforme abaixo (linhas 8 e 9) podemos utilizar a função get() que pode trazer uma informação para
o usuário, ela possui uma condição que se não aplicada pode, por exemplo, mostrar uma mensagem
de erro para o usuário.

116
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

Limpando todas as chaves do dicionário

Ao utilizar a função clear(), serão removidas todas as chaves e consequentemente serão deletados
todos os dados do dicionário, veja as linhas 8 e 9::

Atividades

117
Módulo: Programação de Sistemas

1. Qual a diferença entre uma tupla e uma lista?


2. Qual a diferença entre um vetor comparado com as duplas e listas?
3. Desenvolva um programa que calcule e exiba a diferença entre o maior e o menor elemento
de uma lista denominada VALORES. Os valores da lista devem ser lidos.
4. Desenvolva um programa que faça a soma de todos os elementos de índice par de uma
lista.
5. Desenvolva um programa que possua duas listas A e B com 5 elementos cada e então
troque seus elementos, de forma qua a lista A ficará com os elementos da lista B e vice-
versa.
6. Desenvolva um programa que utilizará a Cifra de César para criptografar uma mensagem
digitada pelo usuário, após, mostrar em tela a mensagem criptografada.
7. Desenvolva um programa que armazenará números reais numa lista. A seguir, encontre o
menor elemento da lista e a sua posição (índice) dentro da lista, mostre esses valores em
tela.
8. Crie uma tupla com os signos do zodíaco e exiba os valores dessa tupla em tela.
9. O que é um dicionário? Qual a principal diferença de um dicionário se comparado com as
tuplas e listas?
10. Crie um dicionário para um determinado animal de estimação. Exiba em tela as informações
armazenadas nesse dicionário.

Tema 11: Condicionais

118
Módulo: Programação de Sistemas

Condicional simples

Condicionais são condições impostas para que algo aconteça, ou seja, espera-se que uma condição
seja verdadeira ou falsa, e para cada uma das situações o programa fará alguma coisa especificada
pelo programador. As condicionais são parte fundamentais nos programas, pois devemos tentar prever
as situações que podem ocorrer, principalmente quando recebemos algum dado através do usuário.

No exemplo abaixo, é utilizado a condição if, note que a condição if possui uma condição que se for
verdadeira executará alguma ação:

Note abaixo que a mensagem “Maior de idade” apareceu porque a condição idade == 20 foi
correspondida:

Abaixo, segue um exemplo recebendo a idade através do usuário com a função input()

119
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

Condicional composta

Utilizamos o comando else para prever uma ação para quando a condição inicial for falsa, no exemplo
abaixo o if verifica se a idade é menor que 18, se for escreverá em tela “Você é menor de idade”, caso
contrário (else) escreverá: “Você é maior de idade”.

Segue abaixo a tela de execução:

No exemplo abaixo foi utilizado a condição elif que permite que verifiquemos mais uma possibilidade:

Segue abaixo a tela de execução:

120
Módulo: Programação de Sistemas

Veja que combinando vários elif é possível tentar prever várias possiblidades e tomar uma ação para
cada uma delas. No exemplo a seguir, também está sendo utilizado o conectivo lógico “and”, este
conectivo lógico exige que todas as condições sejam verdadeiras para que a ação ocorra.

Segue abaixo a tela de execução:

No exemplo abaixo estamos utilizando o conectivo lógico “or”, este conectivo lógico exige que ao
menos uma condição seja verdadeira para que seja tomada a ação programada:

121
Módulo: Programação de Sistemas

Atividades

1. Qual a diferença entre uma condicional simples e uma condicional composta?

2. Desenvolva um programa utilizando uma condicional simples, o algoritmo deve verificar se


o valor digitado é menor ou igual a 35. Se a condição for verdadeira, deve aparecer uma
mensagem: "O valor digitado é menor ou igual a 35!".

3. Desenvolva um programa de sua preferência que tenha uma condicional composta.

4. Desenvolva um programa que calcule e exiba a soma dos números pares contidos entre 1
e um número fornecido pelo usuário.

5. A contribuição para o INSS é calculada a partir da tabela a seguir:

6. Desenvolva um programa para ler o valor de um salário bruto para que seja calculado o
valor da contribuição ao INSS e o salário líquido restante.

7. Desenvolva um programa que leia um número inteiro e verifique se este é ou não um


número primo (número primo é divisível por um e por ele mesmo).

8. Um número palíndromo é aquele que se lido da esquerda para a direita e da direita para a
esquerda possui o mesmo valor (por exemplo: 34543). Desenvolva um programa que leia
um número inteiro e verifique se ele é um palíndromo.

122
Módulo: Programação de Sistemas

Tema 12: Laços de repetição

123
Módulo: Programação de Sistemas

Os laços de repetição são muito utilizados nos sistemas para fazer algum tipo de consistência de dados
do usuário, ocorre que por engano ou distração o usuário pode entrar com informações inválidas que
se não forem consistidas podem prejudicar a base de dados dos sistemas.

Também podemos utilizá-los para ler as informações de vetores e matrizes, e são utilizados em
algoritmos de ordenação, ou seja, há uma infinidade de utilidades para os laços de repetição.

WHILE (ENQUANTO)

Segue abaixo um exemplo do laço de repetição while(ver linha 3), note que enquanto a condição for
verdadeira os comandos do laço serão executados. Note que no caso abaixo, cada execução é
acrescentada +1 na variável x.

Segue abaixo a tela de execução:

No exemplo abaixo serão lidos nomes digitados pelo usuário e todo nome digitado é armazenado na
variável pessoas que é uma Lista. Os nomes são adicionados através da função append().

124
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

No laço de repetição o looping será eterno até que o usuário digite o nome “Pedro”

Segue abaixo a tela de execução:

FOR (PARA)

O laço de repetição FOR no exemplo abaixo, faz com que a variável “i” percorra todos os elementos
da Lista até que não tenha mais elementos.

125
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

Lembrem-se que uma string armazena caractere por caractere de um texto, ou seja, cada caractere
necessita estará num índice. Portanto se fizermos o laço de repetição utilizando o for conforme as
linhas 3 e 4, iremos ler caractere por caractere da palavra que estiver armazenada na variável.

Segue abaixo a tela de execução:

126
Módulo: Programação de Sistemas

Podemos utilizar o “for”, para contar todos os números uma lista, conforme abaixo:

Segue abaixo a tela de execução:

Também podemos utilizar o “for” para exibir as chaves e os dados de um dicionário:

Segue abaixo a tela de execução:

Podemos mostrar números ordenados conforme abaixo:

127
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

Atividades

1. Considere o algoritmo abaixo:

Adapte o algoritmo acima, e desenvolva um programa que execute as instruções para os seguintes
pares de números: 10 e 2, 6 e 2, 15 e 3. Qual será o valor final de C? E o valor final de A?

2. Desenvolva um programa que escreva na tela os números de um número inicial a um número


final. Os números inicial e final devem ser informados pelo usuário;

3. Desenvolva um programa que gera e escreve os números ímpares entre 100 e 200;

4. Desenvolva um programa que leia 10 números inteiros e, ao final, apresente a soma de todos
os números lidos;

5. Desenvolva um programa que calcule a média dos números digitados pelo usuário, se eles
forem pares. Termine a leitura se o usuário digitar zero (0);

6. Desenvolva um programa que leia valores inteiros e encontre o maior e o menor deles. Termine
a leitura se o usuário digitar zero (0);

7. Desenvolva um programa que leia o sexo de uma pessoa. O sexo deverá ser com o tipo de
dado caractere e o programa deverá aceitar apenas os valores “M” ou “F”.

8. Desenvolva um programa que calcule a soma de todos os números primos existentes entre 1
e 100;
128
Módulo: Programação de Sistemas

9. Desenvolva um programa para calcular o IMC (Índice de Massa Corporal), o algoritmo deverá
ler a altura e o peso do usuário e depois calcular o IMC com base na fórmula: IMC = peso/
(altura) ²

Após o cálculo deve ser informado o valor do IMC do usuário e a classificação com base na tabela
abaixo:

Deve-se utilizar um laço de repetição para consistir se o usuário digitou um valor de peso e altura
maiores do que 0. Enquanto ele digitar um valor menor ou igual a zero deverá aparecer uma mensagem
de erro de: “Peso e altura devem ser maiores que 0. ”

10. Utilizando o laço de repetição PARA, desenvolva um programa que faça uma tabuada, para
isso leia um número de 1 a 10, se o usuário digitar um valor fora desse intervalo deve aparecer
uma mensagem de erro: “Digite um valor entre 1 e 10. ” A tela esperada deve conter os valores
da tabuada para o número digitado pelo usuário.

129
Módulo: Programação de Sistemas

Tema 13: Validação de dados

Os menus são importantes para gerar interação com o usuário, um sistema por mais básico que seja
terá algum tipo de menu. Os menus além de necessitarem ser funcionais, também devem possuir um
layout intuitivo, amigável e bonito. Os menus do sistema são a embalagem do nosso produto, não
adianta ter um sistema muito bom, porém com uma tela ruim para a interação com o usuário.

Já a validação de dados é algo extremamente necessária, visto que o sistema deve prever a
possibilidade de falhas humanas durante a interação com o usuário através de leitura de dados em
tela.Para validar as informações digitadas pelos usuários, é necessário muitas vezes utilizar laços de
repetição, como no exemplo abaixo onde foi utilizado “while”.No exemplo abaixo, é utilizado o comando
try onde podemos fazer uma condição que se não atendida fará outra ação, isso é possível através do
comando except (ver linha 19).

Segue abaixo a tela de execução:


130
Módulo: Programação de Sistemas

Atividades

1. Qual a importância em validarmos os dados digitados pelo usuário?

2. Crie um programa que faça a validação para um campo de e-mail.

3. Crie um programa que faça a validação para um campo nome.

4. Crie um programa que faça a validação do CPF.

5. Crie um programa que faça a validação do RG.

6. Crie um programa que faça uma validação de data.

7. Crie um programa que faça validação de hora.

8. Crie um programa que faça validação de campo vazio.

Tema 14: Funções

131
Módulo: Programação de Sistemas

As funções servem para guardarmos um bloco de código que poderá ser reutilizado quando
precisarmos. É comum nos códigos estruturados fazer uso de funções. E, para “alimentar” essas
funções, precisamos passar os dados a elas. Existem dois métodos de passagem de parâmetros
geralmente usados: por valor e por referência.

Quando um parâmetro é passado por valor, uma cópia do valor contido é passada à função, e este
valor inicia uma variável local. Quando um parâmetro é passado por referência, o endereço de memória
em que a variável está é passado para a função. A função tem acesso real ao dado passado, e toda a
alteração que ocorrer dentro da função irá impactar a variável.

As funções também servem para organizar melhor o código fonte. Podemos ter funções que somente
imprimirão em tela algum valor e teremos as funções que retornarão valores.

Abaixo segue um exemplo de uma função que faz uma saudação para o usuário.

Segue abaixo a tela de execução:

Note abaixo que criamos a função mensagem2(), ela receberá como parâmetro uma string com o nome
do usuário:

132
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

Abaixo criamos uma função que calcula a média, note que essa função foi criada para receber 3
parâmetros e que ela retornará a média.

Segue abaixo a tela de execução:

133
Módulo: Programação de Sistemas

As funções são módulos de códigos que irão realizar as tarefas repetitivas dos programas. Sempre
que surgir a necessidade, poderemos chamá-las a fim de economizar tempo, visto que escrever uma
linha de código para toda tarefa repetida é algo cansativo. As funções podem ser chamadas em
qualquer parte do programa e normalmente retornam algum valor.

Atividades

1. O que são funções?

2. Qual a diferença entre uma função e um procedimento?

3. Com base no exemplo 2, desenvolva um programa que irá ler dois valores inteiros. Crie uma
função para cada uma das seguintes operações matemáticas: soma, subtração, multiplicação
e divisão.

No final o resultado das operações deverá ser exibido em tela.

4. Desenvolva um programa que possuirá uma função chamada de pagamento, ela deverá
receber as horas trabalhadas e o valor das horas. No final o valor a ser pago para o trabalhador
deverá ser retornado pela função e depois exibido em tela.

5. Desenvolva um programa que possuirá uma função que receba o nome do usuário e a idade
dele, a função deverá retornar quantos dias de vida o usuário já viveu.

6. Construa uma função que receba uma data no formato DD/MM/AAAA e devolva uma string no
formato D de mesPorExtenso de AAAA. Opcionalmente, valide a data e retorne NULL caso a
data seja inválida.

134
Módulo: Programação de Sistemas

Tema 15: Módulos

Os módulos são arquivos com a extensão “.py”, ou seja, os arquivos que criamos até o momento são
módulos. Os módulos podem ser conectados, eles abrem novas possibilidades no Python.No exemplo
abaixo extrairemos do módulo “exemplo_funcoes.py “ a parte que faz o cálculo da média.

Para linkar os módulos são necessários que ambos estejam na mesma pasta, na tela abaixo
estamos salvando o nosso módulo “func.py” que faz o cálculo da média. Note que o módulo “func”
possui as informações extraídas do módulo anterior:

135
Módulo: Programação de Sistemas

O módulo “exemplo_funcoes.py” também será salvo na mesma pasta do módulo “func.py”

136
Módulo: Programação de Sistemas

Para que o módulo exemplo_funcoes.py possa linkar o módulo “func.py” basta usarmos o comando
import nome_módulo, conforme abaixo:

Segue abaixo a tela de execução, note que para o usuário não percebe a diferença se um programa
está chamando outros módulos para determinadas tarefas.

137
Módulo: Programação de Sistemas

Módulos do próprio Python

O módulo math é um módulo matemático, note abaixo que o math.ceil() faz o arredondamento para
cima de um número real:

Segue abaixo a tela de execução:

Já o módulo math.floor, faz o contrário, faz o arredondamento para baixo.

Segue abaixo a tela de execução:

O módulo math.fsum() faz a soma de números de listas e tuplas.

138
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

O módulo math.sqrt() faz o cálculo da raiz quadrada de um número.

Segue abaixo a tela de execução:

Há também módulos de tempo, por exemplo, o módulo time.localtime() trará a hora local.

Segue abaixo a tela de execução:

Note que através do módulo time.localtime() podemos extrair mais informações como minutos, horas
ou segundos, veja as linhas 3 e 5.

139
Módulo: Programação de Sistemas

Segue abaixo a tela de execução:

Resumo

Verificamos que os módulos são programas (arquivos .py) criados por nós ou que já existem no próprio
Python, utilizá-los é uma boa prática para diminuir o tamanho do código fonte do programa e para
deixar o código mais organizado. Uma das vantagens em utilizarmos módulos é que eles podem ser
reaproveitados por vários programas, portanto ganhamos tempo ao utilizá-los.

Atividades

1. O que é um módulo?

2. Qual as vantagens em utilizarmos os módulos?

3. Crie um módulo que faça o cálculo da média aritmética entre dois números, este módulo deve
ser importado (chamado) através de outro programa.

4. Crie um módulo que faça o cálculo área do triângulo, este módulo deve ser importado
(chamado) através de outro programa.

5. Crie um módulo que faça o cálculo do IMC (Índice de Massa


Corporal), o programa que for fazer a chamada desse módulo
deverá classificar através do valor retornado se a pessoa está ou
não acima do peso. IMC = peso / altura²

140
Módulo: Programação de Sistemas

Exercícios extras:
O modo de resolução é livre, mas podem ser utilizadas equações ou frases
em português:

1. Descreva como descobrir a moeda falsa em um grupo de cinco


moedas, fazendo uso de uma balança analítica (sabe-se que a
moeda falsa é mais leve que as outras), com o menor número de
pesagens possível. Lembre-se de que sua descrição deve resolver
o problema para qualquer situação.

Dica: É possível resolver com apenas duas pesagens.

2. Idem ao anterior, porém só se sabe que a moeda falsa tem massa diferente. Para descobrir
se ela é mais leve ou mais pesada que as outras, é necessário mudar alguma coisa?

3. Idem ao exercício 1, porém com 9 moedas.

4. Têm-se três garrafas, com formatos diferentes, uma cheia até a boca, com capacidade de oito
litros e as outras duas vazias com capacidades de cinco e três litros respectivamente. Deseja-
se separar o conteúdo da primeira garrafa em duas quantidades iguais. Elabore uma rotina que
consiga realizar a tarefa, sem que se possa fazer medidas.

5. Um caramujo está na parede de um poço a cinco metros de sua borda. Tentando sair do poço,
ele sobe três metros durante o dia, porém desce escorregando dois metros durante a noite.
Quantos dias levará para o caramujo conseguir sair do poço?

6. Um tijolo “pesa” um quilo mais meio tijolo. Quantos quilos “pesam” um tijolo e meio?

7. Você está em uma margem de um rio, com três animais: uma galinha, um cachorro e uma
raposa. Somente pode atravessar com um animal por vez e nunca deixar a raposa e o cachorro
sozinhos nem a raposa e a galinha. Descreva uma forma de conseguir atravessar os três
animais, obedecendo a essas condições.

8. Você dispõe de uma balança precisa e dez sacos cheios de moedas idênticas na aparência,
das quais todas as moedas de um dos sacos são falsas e de massa 1 g menor que as
verdadeiras. Qual o menor número de pesagens necessárias para se descobrir o saco de
moedas falsas?

141
Módulo: Programação de Sistemas

Fluxogramas

9. Crie um algoritmo e um fluxograma para converter uma temperatura da escala Celsius para a
escala Fahrenheit. A fórmula para conversão é Fahrenheit = ((Celsius * 9) / 5 ) + 32

10. Elabore um fluxograma que calcule quantas notas de 50,10 e 1 são necessárias para se pagar
uma conta cujo valor é fornecido.

11. Elabore um fluxograma que permita a entrada de um número inteiro e diga se ele é par ou
ímpar.

12. Elabore um fluxograma que permita a entrada de dois valores, x e y, troque seus valores entre
si e então exiba os novos resultados.

Algoritmos diversos

13. Desenvolva um programa que armazene o valor 10 em uma variável A e o valor 20 em uma
variável B. A seguir (utilizando apenas atribuições entre variáveis) troque os seus conteúdos
fazendo com que o valor que está em A passe para B e vice-versa. Ao final, escrever os valores
que ficaram armazenados nas variáveis.

14. Desenvolva um programa para ler as dimensões de um retângulo (base e altura), calcular e
escrever a área do retângulo. Sabendo que para calcular a área devemos usar a formula a
seguir:

15. Desenvolva um programa que leia a idade de uma pessoa expressa em anos, meses e dias e
escreva a idade dessa pessoa expressa apenas em dias. Considerar ano com 365 dias e mês
com 30 dias.

16. Desenvolva um programa que calcule e exiba a soma dos números pares contidos entre zero
e um número par fornecido pelo usuário.

142
Módulo: Programação de Sistemas

17. A contribuição para o INSS é calculada a partir da tabela a seguir:

• Desenvolva um programa para ler o valor de um salário bruto para que seja calculado o valor
da contribuição ao INSS e o salário líquido restante.

18. O desconto do IRRF (Imposto de Renda Retido na Fonte), também denominado “Mordida do
Leão”, é calculado sobre o salário líquido após a dedução da contribuição ao INSS, de acordo
com a seguinte tabela:

• Desenvolva um programa que irá ler o valor do salário bruto e após a dedução da
contribuição ao INSS, calcule o desconto do IRRF.

19. Desenvolva um programa que permita ao usuário escolher entre a conversão de medida de
centímetros em polegadas, de polegadas em centímetros, de quilômetros em milhas e de
milhas em quilômetros. As fórmulas as fórmulas para conversão são:

• Centímetros/polegadas: valor em centímetros x 0,3937

• Polegadas/centímetros: valor em centímetros x 2,54

• Quilômetros/milhas: valor em quilômetros x 0,6214

• Milhas/quilômetros: valor em milhas x 1,6093

20. Desenvolva um programa que leia um número inteiro e verifique se este é ou não um número
primo (número primo é divisível por um e por ele mesmo).

21. Um número palíndromo é aquele que se lido da esquerda para a direita e da direita para a
esquerda possui o mesmo valor (por exemplo: 34543). Desenvolva um programa que leia um
número inteiro e verifique se ele é um palíndromo.

143
Módulo: Programação de Sistemas

Estruturas de repetição

9.Considere o algoritmo abaixo:

• Adapte o algoritmo acima, e desenvolva um programa que execute as instruções para


os seguintes pares de números: 10 e 2, 6 e 2, 15 e 3. Qual será o valor final de C? E o
valor final de A?

22. Desenvolva um programa que escreva na tela os números de um número inicial a um número
final. Os números inicial e final devem ser informados pelo usuário;

23. Desenvolva um programa que gera e escreve os números ímpares entre 100 e 200;

24. Desenvolva um programa que leia 10 números inteiros e, ao final, apresente a soma de todos
os números lidos;

25. Desenvolva um programa que calcule a média dos números digitados pelo usuário, se eles
forem pares. Termine a leitura se o usuário digitar zero (0);

26. Desenvolva um programa que leia valores inteiros e encontre o maior e o menor deles. Termine
a leitura se o usuário digitar zero (0);

27. Desenvolva um programa que leia o sexo de uma pessoa. O sexo deverá ser com o tipo de
dado caractere e o programa deverá aceitar apenas os valores “M” ou “F”.

28. Desenvolva um programa que calcule a soma de todos os números primos existentes entre 1
e 100;

Vetores e matrizes

144
Módulo: Programação de Sistemas

29. Desenvolva um programa que calcule e exiba a diferença entre o maior e o menor elemento de
um vetor denominado VALORES (com 10 elementos). Os valores do vetor devem ser lidos.

30. Desenvolva um programa que faça a soma de todos os elementos de índice par de um vetor
de tamanho 10.

31. Desenvolva um programa que leia dos vetores A e B de tamanho 5 e então troque seus
elementos, de forma que o vetor a ficará com os elementos do vetor B e vice-versa.

32. Desenvolva um programa que utilizará a Cifra de César para criptografar uma mensagem
digitada pelo usuário, após, mostrar em tela a mensagem criptografada.

33. Desenvolva um programa que leia um vetor N[20]. A seguir, encontre o menor elemento do
vetor N e a sua posição dentro do vetor, mostre esses valores em tela.

34. Desenvolva um programa para armazenar valores inteiros em uma matriz (5,6). A seguir,
calcular a média dos valores pares contidos na matriz e escrever seu conteúdo.

35. Desenvolva um programa para ler uma matriz (7,4) contendo valores inteiros (supor que os
valores são distintos). Após, encontrar o menor valor contido na matriz e sua posição.

36. Desenvolva um programa que leia uma matriz M (5,5) e calcula as somas:

• Da linha 4 de M.

• Da coluna 2 de M.

• Da diagonal principal.

• Da diagonal secundária.

• De todos os elementos da matriz.

• Escreva estas somas e a matriz.

145
Módulo: Programação de Sistemas

DISCIPLINA: BANCO DE DADOS

A tecnologia utilizada em métodos de armazenamento de informações vem crescendo e provocando


um impacto incremental no uso de computadores, em todas as áreas em que são aplicados.

Um sistema de banco de dados adiciona uma nova dimensão à estrutura de gerenciamento de uma
organização. A complexidade dessa estrutura depende do tamanho da organização, de suas funções
e de sua cultura empresarial. Porquanto, os sistemas de banco de dados podem ser criados e
gerenciados em diferentes níveis de complexidade e com adesão variável a padrões precisos.

Por exemplo, compare um sistema local de locação de filmes com um sistema nacional de reclamações
de seguros. O sistema de locação de filmes pode ser gerenciado por duas pessoas, o hardware
utilizado provavelmente é um único microcomputador, os procedimentos são simples e o volume de
dados tende a ser baixo; Já o sistema nacional de reclamações de seguros possui pelo menos um
administrador de sistemas, vários DBA´s em tempo integral e muitos projetistas e programadores; O
hardware inclui diversos servidores em vários locais por todo o país, e é provável que os procedimentos
sejam numerosos, complexos e rigorosos e que o volume de dados tenda a ser alto.

TEMA 1: INTRODUÇÃO À BANCO DE DADOS

146
Módulo: Programação de Sistemas

Figura 1: O banco de dados / Fonte: Freepix

Nos dias atuais, podemos mencionar alguns itens relevantes para atingir a eficiência e a eficácia dos
sistemas desenvolvidos, com a finalidade de atender seus usuários nos mais variados domínios de
aplicação: automação de corporações, sistemas de apoio a decisões, controle de reserva de recursos,
controle e planejamento de produção, alocação e estoque de recursos entre outros. Alguns aspectos
são:

• Projetos Lógico e Funcional do Banco de Dados: São capazes de atuar de forma antecipada
no volume de informações armazenadas a curto, médio e longo prazo. Os projetos devem ter
uma grande capacidade de adaptação para os três casos mencionados;
• Necessitam ter generalidade e alto grau de abstração de dados, possibilitando confiabilidade e
eficiência no armazenamento dos dados e permitindo a utilização de diferentes tipos de
gerenciadores de dados através de linguagens de consultas padronizadas;
• Projeto de uma interface ágil e com uma "rampa ascendente" para propiciar aprendizado suave
ao usuário, no intuito de minimizar o esforço cognitivo;
• Implementação de um projeto de interface compatível com múltiplas plataformas (UNIX,
Windows Server, Windows Workgroup, etc.);
• Independência de Implementação da Interface em relação aos SGBDs que darão condições às
operações de armazenamento de informações (ORACLE, SYSBASE, INFORMIX, PADRÃO
XBASE, etc.).
• Conversão e mapeamento da diferença semântica entre os paradigmas utilizados no
desenvolvimento de interfaces (Imperativo (ou procedural), Orientado a Objeto, Orientado a
evento), servidores de dados (Relacional) e programação dos aplicativos (Imperativo,
Orientado a Objetos).

Conceitos Gerais

147
Módulo: Programação de Sistemas

Um Banco de Dados pode ser definido como um conjunto de dados organizados e relacionados. A
definição de dados compreende como o uso de “fatos conhecidos” que podem ser armazenados e que
possuem um significado importante.

A definição do termo Banco de Dados é atende às seguintes propriedades:

• é uma coletânea lógica coesa de dados com um significado intrínseco; dados desordenados
não podem ser referenciados como um banco de dados;
• é projetado, construído e populado com dados com objetivos específicos; possui um conjunto
pré-definido de usuários e aplicações;
• simula aspectos do mundo real, sendo que quaisquer alterações no cenário a que ele
representa são automaticamente refletidas no banco de dados.

A informação em um banco está organizada em forma de registros. Cada registro contém toda a
informação sobre uma pessoa ou um elemento do banco. Por exemplo, cada registro no diretório
telefônico contém um nome, endereço e número telefônico de uma pessoa.

Cada registro contém campos. Um campo é utilizado para armazenar o endereço e outro campo para
armazenar o número telefônico da pessoa. Cada registro contém cada um destes campos e cada
registro pode ter informação nestes campos.

O nome de um campo geralmente identifica a informação armazenada no campo. Por exemplo, os


campos podem se chamar Nome, Endereço ou Número telefônico. Cada campo tem um tipo que
identifica a classe de informação que pode ser armazenada: números, datas, caracteres alfanuméricos
e outros. Como cada campo contém um tipo específico de dados, você pode realizar cálculos e outras
operações com a informação guardada neles. Por exemplo, pode somar os números dos campos.
Pode comparar a data de um campo com a de outro. Pode mostrar o nome de uma pessoa
(armazenado em um campo) depois de seu sobrenome (armazenado em outro campo) para construir
a primeira linha de uma etiqueta de correio.

O conjunto de registros que utilizam os mesmos campos forma uma tabela. Cada banco de dados
pode ter muitas tabelas. A imagem a seguir mostra como se relacionam estes conceitos.

Um banco de dados pode ser desenvolvido por aplicações específicas para esta tarefa ou por um
Sistema Gerenciador de Banco de Dados (SGBD). Um SGBD permite aos usuários criarem e
manipularem bancos de dados de propósito geral. O conjunto formado por um banco de dados mais
as aplicações que o manipulam é chamado de Sistema de Banco de Dados.

148
Módulo: Programação de Sistemas

Figura 2: Um ambiente de Sistema de Banco de Dados / Fonte: Tanaka, A.K.

Arquiteturas

Nas arquiteturas primárias o uso dos mainframes para executar o processamento principal e de todas
as funções do sistema, incluindo os programas aplicativos, programas de interface com o usuário,
assim como as funcionalidades dos SGBDs.

O motivo pelo qual grande parte dos usuários fazia acesso aos sistemas via terminais que não
possuíam poder de processamento, apenas a capacidade de visualização.

Os processamentos eram feitos remotamente, apenas as informações a serem visualizadas e os


controles eram enviados do mainframe para os terminais de visualização, conectados a ele por redes
de comunicação. Como os preços do hardware foram caindo, ou diminuindo, muitos usuários alteraram
seus terminais por microcomputadores (PC) e workstations.

No início os SGBDs usavam esses computadores da mesma maneira que usavam os terminais, ou
seja, o SGBD era centralizado e toda sua funcionalidade, execução de programas aplicativos e
processamento da interface do usuário eram executados em apenas uma máquina. De forma gradual,
os SGBDs iniciaram a explorar a disponibilidade do poder de processamento no lado do usuário, o que
levou à arquitetura cliente-servidor.

A arquitetura cliente-servidor fora criada para separar ambientes de computação onde um grande
número de PCs, estações de trabalho, servidores de arquivos, impressoras, servidores de banco de
dados e outros equipamentos são conectados juntos por uma rede. Definir servidores especializados,
tais como servidor de arquivos, que mantém os arquivos de máquinas clientes, ou servidores de
149
Módulo: Programação de Sistemas

impressão que podem estar conectados a várias impressoras; assim, quando se desejar imprimir algo,
todas as requisições de impressão são enviadas a este servidor.

Os PCs clientes possibilitaram para o usuário as interfaces adequadas para usar esses servidores,
bem como poder de processamento para executar aplicações locais. Esta arquitetura se tornou muito
popular por algumas razões. Primeiro, a facilidade de implementação dada a clara separação das
funcionalidades e dos servidores. Segundo, um servidor é inteligentemente utilizado porque as tarefas
mais simples são delegadas às máquinas clientes mais baratas. Terceiro, o usuário pode executar
uma interface gráfica que lhe é familiar, ao invés de usar a interface do servidor. Desta maneira, a
arquitetura cliente-servidor foi incorporada aos SGBDs comerciais.

Diferentes técnicas foram propostas para se implementar essa arquitetura, sendo que a mais adotada
pelos Sistemas Gerenciadores de Banco de Dados Relacionais (SGBDRs) comerciais é a inclusão da
funcionalidade de um SGBD centralizado no lado do servidor.

As consultas e a funcionalidade transacional permanecem no servidor, sendo que este é chamado de


servidor de consulta ou servidor de transação. É assim que um servidor SQL é fornecido aos clientes.
Cada cliente tem que formular suas consultas SQL, prover a interface do usuário e as funções de
interface usando uma linguagem de programação. O cliente pode também se referir a um dicionário
de dados que inclui informações sobre a distribuição dos dados em vários servidores SQL, bem como
os módulos para a decomposição de uma consulta global em um número de consultas locais que
podem ser executadas em vários sítios. Comumente o servidor SQL também é chamado de backend
machine e o cliente de frontend machine. Como SQL provê uma linguagem padrão para o SGBDRs,
esta criou o ponto de divisão lógica entre o cliente e o servidor.

Um sistema de banco de dados adequado a um ambiente de sistema de arquivos, fornece um modelo


no qual podem ser aplicados procedimentos e padrões rígidos. Como consequência, o papel do
componente humano muda da ênfase em programação (no sistema de arquivos) para focar nos
aspectos mais amplos de gerenciamento dos recursos de dados da organização e na administração
do próprio software do banco de dados complexo.

O sistema de banco de dados torna possível atingir usos muito mais sofisticados dos recursos de
dados contanto que seja projetado para aproveitar esse poder disponível. Os tipos de estruturas de
dados criados no banco de dados e a extensão dos relacionamentos entre elas desempenham um
papel poderoso na determinação da eficiência do sistema.

Atualmente, existem várias tendências para arquitetura de Banco de Dados, nas mais diversas
direções.

150
Módulo: Programação de Sistemas

Vantagens e desvantagens do uso de um SGBD

Controle de Redundância

Quando se trata do sistema de armazenamento e processamento de arquivos, sem utilizar um SGBD,


os dados são responsabilidade dos usuários que os utilizam. Neste caso, as redundâncias são
inevitáveis e surgem as seguintes dificuldades:

• quando é necessária a atualização de um arquivo específico de usuário ou grupo, todos os


dados devem ser atualizados para manter a sua integridade no ambiente, como um todo;
• dados redundantes levam a um armazenamento excessivo de informações, tomando espaço
que poderia estar sendo utilizado com novas informações.

Compartilhamento de Dados

Um SGBD multiusuário deve consentir que muitos usuários acessem o banco de dados ao mesmo
tempo. O que é fundamental essencial para múltiplos acessos das aplicações integradas ao banco de
dados. Deve ainda, ter o controle de concorrência para garantir que as atualizações estejam corretas.
Deve, também, oferecer recursos para a multiplicidade de visões.

Restrição a Acesso não Autorizado

O SGBD precisa conter a segurança no acesso às contas de usuários, com as devidas restrições de
acordo com os perfis de cada conta, sendo aplicado tanto para o acesso, como às aplicações que são
gerenciadas por ele.

Representação de Relacionamentos Complexos entre Dados

Um banco de dados tem em si um conjunto de dados relacionados de muitas formas. O SGBD deve
gerenciar todos os relacionamentos entre os dados, assim como, guardar, recuperar e atualizar de
forma dinâmica e eficaz.

Tolerância a Falhas

Um SGBD precisa gerenciar e oferecer formas de recuperação a falhas, sejam físicas ou lógicas.

Há situações que não se deve utilizar um SGBD?

Sim, quando o uso de um SGBD representar um alto custo em comparação aos sistemas de
processamento tradicional de arquivos:

• seja um alto custo na compra do software ou infraestrutura;

151
Módulo: Programação de Sistemas

• generalidade que um SGBD fornece na definição e processamento de dados;


• sobrecarga no fornecimento do controle da segurança, concorrência, recuperação e integração
de funções.

Problemas adicionais podem surgir caso os projetistas de banco de dados ou os administradores de


banco de dados não elaborem os projetos corretamente ou se as aplicações não são implementadas
de forma apropriada.

Se o Administrador do banco de dados (DBA – Database Administrator) não administrar o banco de


dados de forma adequada, tanto a segurança quanto a integridade dos sistemas podem ser
comprometidas. Algumas questões justificam a utilização uma abordagem processamento tradicional
de arquivos:

• quando um banco de dados e suas aplicações são simples, bem definidas e não se espera
mudanças no projeto;
• não há a necessidade de processamento em tempo real das aplicações, podendo ter prejuízo
caso sejam sobrecarregadas por um SGBD;
• quando não houver múltiplos acessos ao banco de dados, ao mesmo tempo.

Atividades

1. O que são banco de dados?

2. Explique o conceito de generalidade e alto grau de abstração de banco de dados.

3. Comente por que é importante a eficiência dos sistemas atualmente?

4. Como é possível atingir usos muito mais sofisticados dos recursos de dados?

5. Como eram as primeiras arquiteturas de banco de dados?

6. O que é um SGBDR?

7. O que é um SGBD ou Sistema Gerenciador de Bancos de Dados e qual é a sua

melhoria em relação ao armazenamento de dados em arquivos?

8. Quais os benefícios de usar um sistema de banco de dados para uma empresa?

9. Se o Administrador do banco de dados (DBA – Database Administrator) não administrar o banco


de dados de forma adequada, o que será comprometido?

152
Módulo: Programação de Sistemas

10. Algumas empresas ainda usam abordagem processamento tradicional de arquivos, quais motivos
disso ainda acontecer?

COMPONENTES DO SGBD

Um SGBD executa várias funções importantes que garantem a integridade e a consistência


dos dados no banco. A maioria dessas funções é transparente para o usuário final e pode ser
conseguida apenas pelo uso de um SGBD. Incluem gerenciamento de dicionário e armazenamento de
dados, transformação e apresentação de dados, gerenciamento de segurança, controle de acesso
multiusuário, gerenciamento de backup e recuperação, gerenciamento de integridade de dados,
linguagens de acesso ao banco de dados e interfaces de programação de aplicações, além de
comunicação do banco de dados.

Gerenciamento do dicionário de dados.

O SGBD armazena as definições de elementos de dados e seus relacionamentos (metadados) em um


dicionário de dados. Por sua vez, todos os programas que acessam os dados no banco trabalham por
meio do SGBD. Este utiliza o dicionário de dados para procurar os relacionamentos e de componentes
de estruturas de dados necessárias, livrando o usuário de ter de codificar esses relacionamentos
complexos em cada programa. Além disso, quaisquer mudanças feitas na estrutura do banco de dados
são automaticamente registradas no dicionário de dados, o que isenta o usuário da necessidade de
modificar todos os programas que acessa a estrutura alterada. Em outras palavras o SGBD fornece
abstração de dados e remove a dependência estrutural e de dados do sistema.

Gerenciamento de armazenamento de dados.

O SGBD cria e gerencia estruturas complexas necessárias para o armazenamento de dados, livrando
o usuário da difícil tarefa de definir e programar as características dos dados físicos. Um SGBD
moderno fornece armazenamento não apenas para os dados, mas também para as definições de telas,
formulários de entrada de dados relacionados, as definições de relatórios, as regras de validação de
dados, o código procedural, as estruturas para lidar com formatos de vídeo e imagem e assim por
diante.O gerenciamento de armazenamento de dados também é importante para o tuning de banco
de dados.

O tuning remete as atividades que tornam o desempenho do banco de dados mais eficiente em termos
de armazenamento de dados, o SGBD, na verdade, armazena o banco em vários arquivos de dados
físicos. Esses arquivos de dados podem ser mantidos em diferentes meios de armazenagem. Portanto
153
Módulo: Programação de Sistemas

o SGBD não precisa esperar que uma solicitação de disco termine para iniciar a próxima. Em outras
palavras, o SGBD pode atender às solicitações concorrentes ao banco de dados.

Transformação e apresentação de dados.

O SGBD transforma os dados inseridos em conformidade com a estrutura de dados necessárias. O


SGBD isenta o usuário da desagradável tarefa de distinguir entre os formatos de dados lógicos e
físicos. Ou seja, o SGBD formata os dados recuperados fisicamente para conformá-los às expectativas
lógicas do usuário.

Gerenciamento de segurança.

O SGBD cria um sistema de segurança que garante a segurança de usuário e a privacidade dos dados.
As regras de segurança determinam quais usuários podem acessar o banco de dados, quais itens de
dados cada usuário pode acessar e quais operações de dados (leitura, adição, exclusão ou
modificação) o usuário pode executar. Isso é especialmente importante em sistemas de dados
multiusuários.

Controle de acesso.

Para fornecer integridade e consistência de dados, o SGBD utiliza algoritmos sofisticados, garantindo
que vários usuários possam acessar o banco de dados ao mesmo tempo em comprometer sua
integridade.

Gerenciamento de backup e recuperação.

O SGBD fornece backup e recuperação de dados para garantir a segurança e integridade dos dados.
Os sistemas atuais de SGBD oferecem utilitários especiais que permitem ao DBA executar backups
especiais e de rotina, procedimentos de restauração.

O gerenciamento de recuperação trata da recuperação do banco de dados após uma falha, como um
erro de setor no disco ou uma queda de energia.

Gerenciamento de integridade de dados.

O SGBD promove e aplica regras de integridade, minimizando, assim, a redundância de dados e


maximizando sua consistência. Os relacionamentos de dados armazenados no dicionário de dados
são utilizados para garantir a integridade. Tal garantia é especialmente importante em sistemas de
banco de dados orientado às transações.

Linguagem de acesso a banco de dados e interface de programação de aplicações.

154
Módulo: Programação de Sistemas

O SGBD fornece acesso aos dados por meio de uma linguagem de consulta. A linguagem de consulta
é uma linguagem não procedural, ou seja, permite que o usuário que o usuário especifique o que deve
ser feito, sem ter de especificar como deve fazer.

A linguagem estruturada de consulta (SQL) é uma linguagem de consulta vigente e o padrão de acesso
de dados suportado pela maioria dos fornecedores de SGBD.

Interface de comunicação do banco de dados.

Os SGBD´s da geração atual aceitam solicitações do usuário final por meio de vários ambientes de
rede diferentes. Por exemplo, o SGBD pode fornecer acesso ao banco de dados pela internet por meio
do uso de navegadores web. Nesse ambiente, as comunicações podem ser realizadas de diversas
maneiras.

DESAFIO

Apresente as funcionalidades de um SGBD de forma prática.

TEMA 2: MODELAGEM DE BANCOS DE DADOS

Um modelo de dados é uma abstração de um ambiente de dados real e complexo. Os projetistas de


banco de dados utilizam os modelos de dados para se comunicar com programadores e usuários de
aplicações. Os componentes básicos de modelagem de dados são as entidades, os atributos, os
relacionamentos e as restrições. As regras de negócio são utilizadas para identificar e definir os
componentes básicos de modelagens em um ambiente específico real.

Projeto de Banco de Dados

155
Módulo: Programação de Sistemas

O projeto de banco de dados foca em como a estrutura do banco de dados será utilizada para
armazenar e gerenciar dados do usuário final.

A modelagem de dados deve ser específica para um determinado problema de domínio. Esse
problema de domínio é uma área claramente definida no ambiente real, com escopo e fronteiras bem
definidos, que deve ser tratada de forma sistemática, e quanto mais fiel a modelagem for ao ambiente
do problema em domínio, maior é a chance de o projeto ter um bom resultado, permitindo assim a
criação de um banco de dados mais aderente à realidade, possibilitando de forma mais eficiente o
desenvolvimento da aplicação.

Figura: Projeto Banco de Dados/ Fonte: Plastino(2002)

O objetivo da modelagem de dados é garantir que todos os objetos de dados existentes em


determinado contexto e requeridos pela aplicação estejam representados com precisão dentro do
Banco de Dados.

Pode-se definir modelagem de dados como sendo um conjunto de conceitos que devem ser usados
para descrever a estrutura de uma base de dados. Um modelo de dados é uma representação
relativamente simples, normalmente gráfica, de estruturas de dados reais mais complexas.

Em termos gerais, modelo é uma abstração de um objeto ou evento real de maior complexidade do
ambiente real.

No ambiente de banco de dados, um modelo representa estruturas de dados e suas características,


relações, restrições, transformações e outros elementos que tenham a finalidade de dar suporte ao
problema específico de domínio.

156
Módulo: Programação de Sistemas

MODELO CONCEITUAL

O Modelo Conceitual é uma abstração da realidade, em que os aspectos do mundo real são descritos
de forma natural, bem como seus atributos e relacionamentos. Esse modelo é utilizado para
entendimento, transmissão, validação de conceitos e mapeamento do ambiente, possibilitando um
melhor diálogo entre desenvolvedores e usuários.

O Modelo Conceitual não está relacionado diretamente com o modelo de banco de dados, forma de
acesso ou armazenamento dos dados. Ele está focado em uma representação gráfica da uma
realidade existente em um contexto de negócio, conforme está ilustrado na figura. Essa modelagem é
feita utilizando o modelo entidade-relacionamento. Tem como características:

• Visão Geral do negócio;


• Facilita o entendimento entre usuários e desenvolvedores;
• Possui somente as entidades e atributos principais;
• Pode conter relacionamentos muitos para muitos.

O modelo conceitual representa uma visão global do banco de dados inteiro conforme visto pela
organização como um todo. Ou seja, o modelo integra todas as visões externas (entidades,
relacionamentos, restrições e processos) em uma única visão global de todos os dados da empresa.
Também conhecido como esquema conceitual, constitui a base para a identificação e descrição de
alto nível dos principais objetos de dados (evitando quaisquer detalhes específicos do modelo de banco
de dados).

O modelo conceitual mais utilizado é o ER. Lembre-se que o modelo ER é ilustrado com a ajuda do
DER que, na prática, constitui a planta básica do banco. Este é utilizado para representar graficamente
o esquema conceitual.

O modelo conceitual produz algumas vantagens importantes. Em primeiro lugar, fornece uma visão de
cima (nível macro) compreendida de modo relativamente fácil sobre o ambiente de dados.

Em segundo lugar, o modelo conceitual é independente em relação tanto a software como a hardware.

A independência de software significa que o modelo não é dependente de software SGBD utilizado
para implantá-lo. A independência de hardware significa que o modelo não depende do hardware
utilizado em sua implantação. Portanto, alterações de hardware ou software do SGBD não terão efeito
sobre o projeto de banco de dados no nível conceitual. Em geral, o termo projeto lógico é utilizado
parase referir as tarefas de criação de modelo de dados conceitual que possa ser implantado em
qualquer SGBD.

157
Módulo: Programação de Sistemas

MODELO LÓGICO

Leva em conta limites impostos por algum tipo de tecnologia de banco de dados. (banco de dados
hierárquico, banco de dados relacional, entre outros. Suas características são:

• Deriva do modelo conceitual e via a representação do negócio


• Possui entidades associativas em lugar de relacionamentos muitos para muitos
• Define as chaves primárias das entidades
• Normalização até a 3ª forma normal
• Adequação ao padrão de nomenclatura
• Entidades e atributos documentados

MODELO INTERNO

Uma vez selecionado o SGBD específico, o modelo interno mapeia o modelo conceitual para o SGBD.
O modelo interno é a representação do banco de dados conforme “visto” pelo SGBD. Em outras
palavras, o modelo interno exige que o projetista relacione as características e restrições do modelo
conceitual com as do modelo selecionado para implementação. O esquema interno constitui a
representação específica de um modelo interno, utilizando estruturas de banco de dados suportadas
pelo banco escolhido.

Portanto, o esquema interno deve mapear o modelo conceitual para as estruturas do modelo relacional,
de modo similar, como selecionamos um banco de dados relacional, o esquema interno é expresso
utilizando SQL, linguagem padrão para este banco.

Como o modelo interno depende do software específico do banco de dados, diz-se que ele é
dependente de software. Portanto, uma alteração no software de SGBD exige que o modelo interno
seja alterado para adequar-se às características e exigências de implementação do modelo de banco
de dados. Quando é possível alterar o modelo interno sem afetar o modelo conceitual, tem-se
independência lógica. No entanto, o modelo interno ainda é independente de hardware, pois não é
afetado pela escolha do computador em que o software é instalado. Portanto, uma alteração nos
dispositivos de armazenamento ou mesmo nos sistemas operacionais não afetará o modelo interno.

MODELO FÍSICO

Leva em consideração limites impostos pelo SGBD (Sistema Gerenciador de Banco de dados) e pelos
requisitos não funcionais dos programas que acessam os dados. Características:
158
Módulo: Programação de Sistemas

• Elaborado a partir do modelo lógico


• Pode variar segundo o SGBD
• Pode ter tabelas físicas (log)
• Pode ter colunas físicas (replicação)

O modelo físico opera nos níveis mais baixos de abstração, descrevendo o modo como os dados são
salvos em meios de armazenamento como discos e fitas. O modelo físico exige a definição tanto dos
dispositivos de armazenamento físico como dos métodos de acesso (físico) necessários para se
chegar aos dados nesses dispositivos de armazenamento, o que torna dependente tanto de software
quanto de hardware. As estruturas de armazenamento utilizados são dependentes do software SGBD
e sistema operacional, e dos tipos de dispositivos de armazenamento com que o computador pode
trabalhar. A precisão necessária na definição do modelo físico exige que o projetista que trabalha
nesse nível tenha conhecimento detalhado do hardware e do software utilizado para implementar o
projeto de banco de dados.

Modelos de dados anteriores exigiam que os projetistas levassem em conta com os detalhes das
necessidades de armazenamento de dados do modelo físico. No entanto, o modelo relacional
atualmente dominante é direcionado amplamente para o nível lógico, não para o físico, portanto, não
exige os detalhes desse segundo nível como seus antecessores.

Embora o modelo relacional não demande que o projetista se preocupe com as características de
armazenamento físico dos dados, a implementação de um modelo relacional pode exigir sintonização
refinada em nível físico para melhorar o desempenho. Essa sintonização refinada é especialmente
importante quando os bancos de dados muito grandes são instalados em um ambiente mainframe.
Mesmo assim, essa sintonização não exige conhecimento das características de armazenamento
físico.

O modelo físico é dependente do SGBD, dos métodos de acesso aos arquivos e dos tipos de
dispositivos de armazenamento suportados pelo sistema operacional. Quando é possível alterar o
modelo físico sem afetar o modelo interno, tem-se independência física. Portanto uma alteração nos

159
Módulo: Programação de Sistemas

dispositivos ou métodos de armazenamento ou mesmo sistema operacional não afetará o modelo


interno.

MODELO DE DADOS RELACIONAL.

O Modelo de Dados Relacional foi introduzido por Codd (1970). Entre os modelos de dados de
implementação, o modelo relacional é o mais simples, com estrutura de dados uniforme, e o mais
formal. O modelo de dados relacional representa os dados da base de dados como uma coleção de
relações. Informalmente, cada relação pode ser entendida como uma tabela ou um simples arquivo de
registros.

Figura 3: Representação do MER como um Diagrama Entidade-Relacionamento/ Fonte:Medium.

DDL - SQL
O padrão SQL surgiu para acessarmos e pesquisarmos dados armazenados e estruturados de uma
forma específica. É uma linguagem de consultas estruturadas, Structured Query Language, ou
simplesmente SQL. Para conseguirmos utilizar essa linguagem, precisamos instalar um SGBD que
será o nosso servidor de banco de dados, como por exemplo, o PostgreSQL, MySQL, Oracle ou
SQLServer.

Conceitos Do Modelo Entidade-Relacionamento

O objeto básico que o MER representa é a entidade. Os blocos básicos de construção de todos os
modelos de dados são as entidades, os atributos, os relacionamentos e as restrições.

Entidade

160
Módulo: Programação de Sistemas

Uma entidade é algo (uma pessoa, um local, um objeto, um evento) sobre o qual sejam coletados e
armazenados dados. Ela representa um tipo particular de objeto do mundo real. Por isso, as entidades
são distinguíveis, ou seja, cada ocorrência de entidade é única e distinta. As entidades podem ser
objetos físicos, como clientes e produtos, mas também abstrações como rotas de voo ou
apresentações musicais. Pode ser definida como qualquer coisa do mundo real, abstrata ou concreta,
onde se deseja guardar informações. Exemplos de entidades: Cliente, Veículo, Produto, Venda.

Atributo

Um atributo é uma característica de uma entidade. É tudo o que se pode relacionar como propriedade
da entidade (coluna, campo). Chama-se Domínio o conjunto de valores possíveis do atributo.

Por exemplo uma entidade chamada cliente seria descrita por atributos como sobrenome, nome,
telefone, endereço e limite de crédito de clientes.

Alguns atributos são obrigatórios outros são opcionais. Algumas definições:

• Atributo obrigatório – é aquele que para uma entidade ou relacionamento deve possuir um
valor.
• Atributo opcional - É aquele que para uma instância da entidade ou relacionamento pode
possuir um valor ou não.

Classificação:

• Atributo Identificador - capaz de identificar exclusivamente cada ocorrência de uma entidade.


Também conhecido como chave Primária ou Primary Key (PK). O símbolo # é usado para
representar a chave primária em algumas notações)

Ex.: Código do Cliente, Código do Produto

• Chave Candidata - Atributo ou grupamento de atributos que têm a propriedade de identificar


unicamente uma ocorrência da entidade. Pode vir a ser uma chave Primária. A chave candidata
que não é chave primária também se chama chave Alternativa.

Características de uma Chave Primária:

• NÃO PODE haver duas ocorrências de uma mesma entidade com o mesmo conteúdo na Chave
Primária
• A chave primária não pode ser composta por atributo opcional, ou seja, atributo que aceite nulo.
• Os atributos identificadores devem ser o conjunto mínimo que pode identificar cada instância
de uma entidade.

161
Módulo: Programação de Sistemas

• Não devem ser usadas chaves externas ou atributos sobre os quais você não tem controle.
• Não deve conter informação volátil.

Ao criar modelos geralmente temos diversas entidades cada uma com diversos atributos que podem
se relacionar entre si. Vamos definir como podem ser estes relacionamentos.

Relacionamento

Um relacionamento pode ser entendido como uma associação entre instâncias de Entidades de acordo
com as regras de negócio. Normalmente ocorre entre instâncias de duas ou mais Entidades, podendo
ocorrer entre instâncias da mesma Entidade (auto relacionamento).

Quando o relacionamento é necessário? Quando existem várias possibilidades de relacionamento


entre o par das entidades e se deseja representar apenas um, se ocorrer mais de um relacionamento
entre o par de entidades, a fim de evitar ambiguidade, quando houver auto relacionamento, para definir
o número de ocorrências de uma entidade usamos o conceito de Cardinalidade.

Os modelos de dados utilizam três tipos de relacionamentos:

• Relacionamento um para muitos (1:M ou 1..*).

Por exemplo um pintor faz várias pinturas, mas cada uma é criada por apenas um artista. Assim o
pintor (uma entidade) relaciona-se com as pinturas (várias entidades).

Portanto, os projetistas de banco de dados identificam o relacionamento PINTOR pinta PINTURA como
1:M

• Relacionamento de muitos para muitos (M: N ou *..*).

Um funcionário pode aprender várias habilidades profissionais e cada habilidade profissional pode ser
aprendida por vários funcionários. Os projetistas de banco de dados identificam o relacionamento
FUNCIONÁRIO aprende HABILIDADE como M: N

• Relacionamento um para um (1:1 ou 1..1)

A estrutura de gerenciamento de uma empresa de varejo pode exigir que cada uma de suas lojas seja
gerenciada por um único funcionário. Por sua vez, cada gerente de loja, que é um funcionário, gerencia
uma loja apenas. Portanto o relacionamento FUNCIONÁRIO gerencia LOJA é identificado como 1:1.

A discussão precedente identificou cada relacionamento em duas direções, ou seja, os


relacionamentos são bidirecionais:

162
Módulo: Programação de Sistemas

• Um CLIENTE pode gerar várias FATURAS.


• Cada uma das várias FATURAS é gerada apenas por um CLIENTE.

Uma restrição é uma limitação imposta aos dados.

As restrições são importantes, pois ajudam a assegurar a integridade dos dados. Elas normalmente
são expressas na forma de regras.

Regras de negócio.

Quando os projetistas de banco de dados cuidam da seleção ou determinação das entidades, atributos
e relacionamentos utilizados para construir um modelo de dados, podem começar obtendo uma
compreensão completa de quais tipos de dados existem em uma organização, como são utilizados e
em que período são utilizados. Mas esses dados e informações não produzem por si mesmo, a
compreensão necessária do negócio como um todo. Do ponto de vista do banco de dados, o conjunto
de dados adquire significado apenas quando representa adequadamente as regras de negócio
definidas.

Uma regra de negócio é uma descrição breve, precisa e sem ambiguidades de uma política,
procedimento ou princípio em uma determinada organização. As regras de negócio decorrentes de
uma descrição detalhada das operações de uma organização ajudam a criar e aplicar ações no interior
de seu ambiente organizacional. Devem ser fornecidas por escrito e atualizadas para incluir qualquer
alteração desse ambiente operacional.

Regras de negócio escritas adequadamente são utilizadas para definir entidades, atributos,
relacionamentos e restrições. O processo de identificar e documentação de regras de negócio é
essencial para o projeto de banco de dados, pois:

• Auxiliam a estandardizar a visualização dos dados de uma empresa;


• Podem constituir uma ferramenta de comunicação entre os usuários e os projetistas;
• Permitem que o projetista compreenda a natureza, o papel e o escopo dos dados;
• Permitem que o projetista compreenda os processos comerciais;
• Permitem que o projetista desenvolva regras e restrições adequadas de participações em
relacionamentos e crie um modelo de dados preciso.

DIAGRAMA ENTIDADE-RELACIONAMENTO (DER)

O MER é um modelo conceitual, já o Diagrama Entidade Relacionamento (Diagrama ER - DER) é sua


forma de representar graficamente, sua ferramenta de representação. O diagrama permite a
visualização das informações, pois o modelo pode ficar muito abstrato sem estar representado

163
Módulo: Programação de Sistemas

graficamente. Para criar a representação gráfica, existem algumas regras, conhecidas como notações
do DER.

Sumário da Notação do Diagrama Entidade-Relacionamento (DER)

Figura 5: Notações do DER / Fonte: Unimar.

Exemplo de implementação de um sistema, representado em um DER

O DER ilustra o esquema da base de dados COMPANHIA. Os tipos de entidades tais como
EMPREGADO, DEPARTAMENTO e PROJETO são mostrados em retângulos.

Tipos de relacionamentos tais como TRABALHA-PARA, GERENCIA, CONTROLA e TRABALHA-EM


são mostrados em losangos interligados a tipos de entidades participantes.

164
Módulo: Programação de Sistemas

Atributos são mostrados em elipses conectadas a tipos de entidades ou relacionamentos. Os


componentes de um atributo composto são também representados em elipses, porém conectadas ao
atributo ao qual eles pertencem (atributo Nome de EMPREGADO).

Atributos multivalorados são denotados em elipses com linhas duplas (atributo Localização de
DEPARTAMENTO). Os atributos-chaves são sublinhados. Atributos derivados em elipses com linhas
tracejadas (atributo NumeroDeEmpregados de DEPARTAMENTO).

Os tipos de entidades-fracas são distinguidos por retângulos com linhas duplas e os relacionamentos
de identificação por losangos com linhas duplas (tipo de entidade-fraca DEPENDENTE e tipo de
relacionamento de identificação DEPENDENTE-DE).

A chave-parcial de um tipo de entidade-fraca é sublinhada com linha tracejada.

Figura 5: Exemplo de DER / Fonte: ESSA.

Na Figura são mostradas as razões de cardinalidade para cada tipo de relacionamento binário.

165
Módulo: Programação de Sistemas

A razão de cardinalidade de DEPARTAMENTO:EMPREGADO em GERÊNCIA é 1:1, para


DEPARTAMENTO:EMPREGADO em TRABALHA-PARA é 1:N e M:N para TRABALHAEM.

As restrições de participação parcial são especificadas por linhas simples. As linhas paralelas denotam
participação total (dependência existencial). Na Figura foram mostrados os nomes de papéis para o
tipo de relacionamento SUPERVISIONA porque o tipo de entidade EMPREGADO ocupa dois papéis
neste relacionamento.

Atividades

1. Qual o conceito de entidade?

2. Como são representadas as entidades no modelo entidade relacionamento?

3. Crie três entidades abstratas e três entidades concretas?

4. O que são relacionamentos?

5. Explique as restrições de dados?

6. O que é uma instância de entidade?

7. Quais são os tipos de relacionamentos disponíveis?

8. Explique os relacionamentos bidirecionais?

9. Explique as regras de negócio?

10. Os atributos são responsáveis por qual função no MER?

166
Módulo: Programação de Sistemas

TEMA 3: REGRAS DE NORMALIZAÇÃO

Formas Normais

A normalização de tabelas tem como objetivo resolver problemas de atualização de bases de dados,
minimizando redundâncias. É um processo em que são eliminados esquemas de relações (tabelas)
não satisfatórios, decompondo-os, através da separação de seus atributos em esquemas de relações
menos complexas, mas que satisfaçam as propriedades desejadas.

Um banco de dados dentro dos padrões de normalização reduz o trabalho de manutenção e ajuda a
evitar o desperdício do espaço de armazenamento.

O processo de normalização conduz um esquema de relação através de vários testes para garantir o
relacionamento analisado está na 1ª, 2ª e 3ª Formas Normais.
Cada etapa ou teste corresponde uma determinada forma normal, que representa um progressivo
refinamento na estrutura das tabelas. Assim, uma tabela que se encontra na Terceira Forma Normal
é considerada mais normalizada (mais "enxuta", pode-se dizer) que uma tabela que se encontra
apenas na Segunda Forma Normal.
A normalização possui caráter organizativo e pode ocorrer durante a concepção do modelo
conceitual, durante a derivação do modelo lógico para o relacional, ou após a derivação do modelo
lógico.
As principais características de uma base de dados normalizada são:
• Geração de aplicações mais estáveis.
• Aumento do número de tabelas utilizadas.
• Diminuição dos tamanhos médios das tabelas.
Benefícios da normalização:

• Estabilidade do modelo lógico: capacidade de um modelo manter-se inalterado face às


mudanças que venham a ser percebida ou introduzidas no ambiente que tenha sido modelado.
167
Módulo: Programação de Sistemas

• Flexibilidade: capacidade de adaptação a demandas diferenciadas, a expansão e redução, a


omissão ou presença etc.
• Integridade: diz respeito à qualidade do dado. Um dado mapeado em mais de um local de modo
diferente, com valores instanciados de modo diferentes, pode ser indício de que não há
integridade entre eles.
• Economia: no espaço de armazenamento em relação ao custo de manipulação de dados (que
representa todo e qualquer esforço, tempo, ou valor agregado ao fato de manipularmos
volumes de dados maiores do que os efetivamente necessários); custo causado pelo atraso do
fornecimento da informação desejada.
• Fidelidade ao ambiente observado: ajuda a definir elementos que foram despercebidos durante
o processo de modelagem.

Primeira Forma Normal – 1FN


Uma relação se encontra na primeira forma normal se todos os domínios de atributos possuem
apenas valores atômicos (simples e indivisíveis), e que os valores de cada atributo na tupla seja um
valor simples, ou seja, a 1FN não permite que haja em um atributo um conjunto de valores ou uma
tupla de valores, em outras palavras não são aceitos relações dentro de relações. Assim sendo todos
os atributos compostos e multivalorados devem ser divididos em atributos atômicos.

Passos para obtenção da 1FN:


• Remova o(s) atributo(s) que viola(m) a primeira forma normal e coloque-o em uma relação em
separado (Autores_Livros), juntamente com a chave primária da relação original (IdLivro). A
chave primária da nova relação é composta da chave primária da relação original mais uma
chave candidata dos atributos da nova relação.
• Poderão ser utilizados tantos atributos quantos forem necessários à formação da chave da
nova relação, mesmo que tenhamos que chegar a concatenação de todos os atributos de uma
linha. Na prática, o grande número de colunas formando a chave pode causar transtornos, por
isso, nesse caso, pode-se criar uma coluna-artificial do tipo contador.

168
Módulo: Programação de Sistemas

Segunda Forma Normal – 2FN

Uma relação encontra-se na segunda forma normal quando estiver na primeira forma normal e todos
os atributos que não participam da chave primária são dependentes desta.

Assim devemos verificar se todos os atributos são dependentes da chave primária e retirar-se da
relação todos os atributos de um grupo não dependente que dará origem a uma nova relação, que
conterá esse atributo como não chave. Desta maneira, na segunda forma normal evita inconsistências
devido a duplicidade.

Exemplo de 2FN: Empregados trabalhando em projetos

169
Módulo: Programação de Sistemas

Terceira Forma Normal – 3FN


Para estar na terceira forma normal a tabela não pode ter atributos não-chave se referindo a outros
atributos não-chave. Assim devemos verificar se existe um atributo que não depende diretamente da
chave, retirá-lo criando uma relação que conterá esse grupo de atributos, e defina com a chave, os
atributos dos quais esse grupo depende diretamente. O processo de normalização deve ser aplicado
em uma relação por vez, pois durante o processo de normalização vamos obtendo quebras, e, por
conseguinte, novas relações. No momento em que o sistema estiver satisfatório, do ponto de vista do
analista, este processo iterativo é interrompido.

Resumo da normalização
O quadro abaixo descreve como realizar teste para identificação da desnormalização da relação e
procedimento para normalização.

170
Módulo: Programação de Sistemas

Formal Teste Solução (normalização)


Normal

1FN A relação não deve ter qualquer Forme novas relações para cada atributo não-
atributo não-atômico nem relações atômico ou relação aninhada.
agrupadas.

2FN Para relações nas quais a chave Decomponha e monte uma relação para cada
primária contém múltiplos chave parcial com seu(s) atributo(s)
atributos, nenhum atributo não- dependente(s). Certifique-se de manter uma
chave deve ser funcionalmente relação com a chave primária original e
dependente de uma parte da quaisquer atributos que sejam completamente
chave primária. dependentes dela em termos funcionais.

3FN A relação não deve ter um atributo Decomponha e monte uma relação que inclua
não-chave funcionalmente o(s) atributo(s) não-chave que funcionalmente
determinado por um outro atributo determine(m) outros atributos não-chave.
não -chave (ou por um conjunto de
atributos não-chave). Ou seja, não
deve haver dependência transitiva
de um atributo não chave na chave
primária.

Questões

1. O que é normalização?
2. Para que é usada a técnica de normalização?
3. Há alguma vantagem para um banco de dados normalizado?
4. Quais as características do banco de dados normalizado?
5. O que é a 1ª forma normal?
6. O que é a 2ª forma normal?
7. O que é a 2ª forma normal?
8. Quando termina o processo de normalização?
9. Qual ação deve ser tomada quando há relações dentro de relações?
10. O que fazer quando há dependência transitiva de um atributo não chave na chave primária?

171
Módulo: Programação de Sistemas

TEMA 4 : INTRODUÇÃO À LINGUAGEM SQL

A "Linguagem Estruturada de Consultas", conhecida como SQL, é utilizada para interação com o
SGBD e executar várias tarefas como criar bancos de dados, tabelas, campos e valores, assim como
inserir e alterar registros, criar objetos no banco de dados, gerenciar usuário, consultar informações,
controlar operações. Todas as transações efetuadas no banco de dados podem ser requisitadas ao
SGBD utilizando a linguagem SQL.
A programação SQL pode ser usada para analisar ou executar tarefas em tabelas, principalmente
através dos seguintes comandos:
• inserir (‘insert’),
• pesquisar (‘search’),
• atualizar (‘update’) e
• excluir (‘delete’).
O SQL pode, ainda, fazer consultas e análises mais avançadas, como escrever queries (comandos
de consulta) com múltiplas informações.

Tipos de dados básicos


Em banco de dados relacionais, cada tabela pode conter diversas colunas, as quais armazenarão os
dados. Para cada coluna, existirá um tipo de dado associado. Os tipos de dados são definidos durante
a criação da tabela. Os principais tipos de dados simples definidos:

172
Módulo: Programação de Sistemas

Figura: Tipos de dados/ Fonte: Costa(2006)

O comando create database


A instrução create database, como o próprio nome sugere, serve para a criação da base de dados na
qual as tabelas serão criadas, com uma sintaxe simples.

CREATE DATABASE - Cria um novo banco de dados MySQL.


Para criar um banco de dados, você deve ser um superusuário ou ter o privilégio especial
CREATEDB.
Por padrão, o novo banco de dados será criado baseado no modelo de banco de dados de sistema
template1. Um modelo diferente pode ser especificado escrevendo o nome do TEMPLATE. Em
particular, ao escrever o TEMPLATE0 template0, você pode criar um banco de dados virgem contendo
apenas os objetos padrão predefinidos pela sua versão do MySQL. Isso é útil se você desejar evitar a
cópia de qualquer objeto local de instalação que possa ter sido incluído no template1.
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace ]

173
Módulo: Programação de Sistemas

[ CONNECTION LIMIT [=] connlimit ] ]Parâmetros

• name: O nome de um banco de dados para criar.


• user_name: O nome da função do usuário que possuirá o novo banco de dados, ou DEFAULT
para usar o padrão (ou seja, o usuário que está executando o comando). Para criar um banco
de dados de propriedade de outra função, você deve ser um membro direto ou indireto dessa
função ou ser um superusuário.
• template: O nome do template a partir do qual criar o novo banco de dados, ou DEFAULT para
usar o template padrão (template1).
• encoding:Codificação do conjunto de caracteres para usar no novo banco de dados.
Especifique uma constante de cadeia (por exemplo, 'SQL_ASCII'), ou um número de
codificação de inteiro, ou DEFAULT para usar a codificação padrão (ou seja, a codificação do
banco de dados de modelo).
• lc_collate: Ordem de agrupamento (LC_COLLATE) para usar no novo banco de dados. Isso
afeta a ordem de classificação aplicada às strings, por exemplo, em consultas com ORDER
BY, bem como a ordem usada em índices em colunas de texto. O padrão é usar a ordem de
agrupamento do banco de dados de modelos.
• lc_ctype: Classificação de caracteres (LC_CTYPE) para usar no novo banco de dados. Isso
afeta a categorização de caracteres, por ex. inferior, superior e dígito. O padrão é usar a
classificação de caracteres do banco de dados de modelos.
• tablespace: O nome do espaço de tabela que será associado ao novo banco de dados, ou
DEFAULT para usar o espaço de tabela do banco de dados de modelo. Esse espaço de tabela
será o espaço de tabela padrão usado para objetos criados neste banco de dados.
• connlimit: Quantas conexões simultâneas podem ser feitas neste banco de dados. -1 (o padrão)
significa sem limite.
Parâmetros podem ser desenvolvidos na ordem que for necessária, não apenas na ordem mostrada
acima.

O comando create table

Após a criação da base de dados, é necessário criar as tabelas. Para isso, o comando create table é
utilizado e permite criar e definir a estrutura de uma tabela. Nele pode-se também, definir as colunas
(campos), suas respectivas restrições, além de suas chaves primárias e estrangeiras.

O comando CREATE TABLE define uma nova tabela, inicialmente vazia (sem nenhum registro), no
esquema de banco de dados atual. A tabela criada pertence ao usuário que executa o comando
(usuário logado).

174
Módulo: Programação de Sistemas

É possível especificar um esquema diferente do esquema atual para a criação da tabela, bastando
para isso identificar o esquema junto ao nome desejado para a tabela (separado por um
ponto.), usando uma sintaxe do tipo nome_esquema.nome_tabela.

A sintaxe para a criação de uma tabela é:

Sintaxe básica:
CREATE TABLE [IF NOT EXISTS] nome_tabela (
nome_coluna tipo_dados [COLLATE colação] constraint,
nome_coluna tipo_dados constraint,
nome_coluna tipo_dados constraint,
...,
[FOREIGN KEY chave_estrangeira REFERENCES coluna]
[ON DELETE ação] [ON UPDATE ação]
)

Se não for usada a opção COLLATE, a colação padrão será utilizada. Os itens entre colchetes [ ] são
opcionais na criação de uma tabela. A cláusula IF NOT EXISTS verifica se a tabela com o nome
especificado já existe antes de tentar criá-la.

As constraints (testes) possíveis para colunas são:

• NOT NULL
• NULL (padrão)
• CHECK
• DEFAULT
• UNIQUE
• PRIMARY KEY
• REFERENCES

E as constraints específicas para tabelas são:

• CHECK
• UNIQUE
• PRIMARY KEY
• EXCLUDE (extensão específica do MySQL)
• FOREIGN KEY

Existem na verdade duas formas de definir constraints. É possível definir contraints de coluna e
constraints de tabela.

175
Módulo: Programação de Sistemas

Uma constraint de coluna é definida como parte da definição da coluna em si. Já uma constraint de
tabela não é vinculada a nenhuma coluna em particular, e pode ser aplicada a mais de uma coluna ao
mesmo tempo.

A cláusula check serve para implementar restrições de domínio. Por exemplo, durante a criação de
uma tabela projeto, inserimos uma restrição que garante que a data de início do projeto seja menor
que a data prevista de término. A cláusula check também poderia ser usada para comparar um atributo
com um valor absoluto e não apenas para comparar um atributo com outro atributo.

Exemplo de criação de tabelas no MySQL:

Exemplo 1
Vamos criar uma tabela de nome tabela_autores, que irá conter os campos COD_Autor,
Nome_Autor, Sobrenome_Autor e Data_Nasc:

CREATE TABLE tabela_autores (


codigo_Autor int(4) UNIQUE AUTO_INCREMENT,
nome_Autor varchar(30) NOT NULL,
sobrenome_Autor varchar(50),
data_Nasc date,
PRIMARY KEY (codigo_Autor)
);

Exemplo 2

Agora iremos criar a tabela de editoras, com os campos COD_Editora e Nome_Editora:

CREATE TABLE tabela_editoras(


cod_Editora int,
Nome_Editora varchar(35) UNIQUE NOT NULL,
PRIMARY KEY (cod_Editora)
);

Exemplo 3

Vamos criar também uma tabela para armazenar os gêneros literários:

CREATE TABLE tabela_generos (


176
Módulo: Programação de Sistemas

COD_Genero integer,
Nome_Genero varchar(40) UNIQUE NOT NULL,
PRIMARY KEY (COD_Genero)
);

Exemplo 4

Finalmente, vamos criar a tabela de livros, incluindo os relacionamentos com as demais tabelas por
meio do uso de chaves estrangeiras:

CREATE TABLE tabela_livros (


COD_Livro int UNIQUE NOT NULL,
Nome_Livro varchar(50) NOT NULL,
Autor int NOT NULL,
Editora int NOT NULL,
Data_Pub date,
Genero int NOT NULL,
Preco_Livro float,
FOREIGN KEY (Autor) REFERENCES tabela_autores (codigo_Autor) ON DELETE
CASCADE,
PRIMARY KEY (COD_Livro)
);

A palavra SERIAL na criação da coluna COD_Livro, usa o auto-incremento nesta coluna. Isso significa
que os CODs dos livros serão números gerados automaticamente pelo MySQL, de modo que não
precisaremos informar esse dado ao cadastrar os livros, o que faremos no próximo artigo. Além disso,
não precisamos informar o tipo de dados desta coluna, visto que o auto-incremento é sempre realizado
com números inteiros (integer).

Após criar as tabelas podemos descrevê-las individualmente com o comando \d, como segue:
\d nome_tabela

\d tabela_livros
\d tabela_autores
\d tabela_editoras
177
Módulo: Programação de Sistemas

\d tabela_generos

Outros exemplos de Create Table:

CREATE TABLE UNIQUE


CREATE TABLE Pessoa ( ID int NOT NULL,
Sobrenome varchar(255) NOT NULL, Nome varchar(255),
Age int, UNIQUE (ID)
);
CREATE TABLE PRIMARY KEY
CREATE TABLE Pessoa (
ID int NOT NULL,
Sobrenome varchar(255) NOT NULL, Nome varchar(255),
Age int,
PRIMARY KEY (ID)
);
CREATE TABLE FOREIGN KEY
CREATE TABLE Pedidos (
PedidoID int NOT NULL, PedidoNumr int NOT NULL, PessoaID int,
PRIMARY KEY (PedidoID),
FOREIGN KEY (PessoaID) REFERENCES Pessoa(PessoaID)
);

CREATE TABLE DEFAULT


CREATE TABLE Pessoa ( ID int NOT NULL,
Sobrenome varchar(255) NOT NULL, Nome varchar(255),
Idade int,
Cidade varchar(255) DEFAULT 'Sandnes'
);

CREATE TABLE check


CREATE TABLE Pessoa ( ID int NOT NULL,
Sobrenome varchar(255) NOT NULL, Nome varchar(255),
Idade int,
CHECK (Idade>=18)
);

178
Módulo: Programação de Sistemas

INSERINDO DADOS NAS TABELAS CRIADAS NO MYSQL:

O comando INSERT permite incluir novos dados dentro de uma tabela.

Sintaxe:

INSERT INTO nome_tabela


VALUES (valores);

ou I

INSERT INTO nome_tabela (campos)


VALUES (valores);

Exemplo
INSERT INTO tabela_autores VALUES (001, 'Carlos, 'Drumond de Andrade', '1902-10-31');
ou
INSERT INTO tabela_autores (COD_Autor, Nome_Autor, Sobrenome_Autor, Data_Nasc) VALUES (001,
'Carlos, 'Drumond de Andrade', '1902-10-31');

Questões
1. O que significa SQL?
2. O que é a Linguagem SQL?
3. Qual o comando de criação de banco de dados?
4. O que é Template na criação de um banco de dados??
5. O que faz a instrução tablespace?
6. Qual o comando de criação das tabels?
7. É possível especificar um esquema diferente do esquema atual para a criação
8. A sintaxe para a criação de uma tabela é:
9. O que é uma constraint de coluna?
10. O que faz a clausula check?

179
Módulo: Programação de Sistemas

MODELAGEM EM DML

As discussões anteriores sobre o modelo relacional contemplaram apenas os aspectos


estruturais. Agora, a atenção será voltada para a álgebra relacional, que é uma coleção de
operações utilizadas para manipular relações. Essas operações são usadas para
selecionar tuplas de uma determinada relação ou para combinar tuplas relacionadas a diversas
relações com o propósito de especificar uma consulta, uma requisição de recuperação sobre a base
de dados.

A linguagem de manipulação de dados (Data Manipulation Language, DML) é a linguagem que permite
aos usuários fazer o acesso a os dados ou manipulá-los, conforme modelo de dados apropriado.

SELECT

O operador SELECT é unário; isto é, ele é aplicado somente a uma relação. Assim, o SELECT não
pode ser usado para selecionar tuplas de mais de uma relação. Observe também que a operação de
seleção é aplicada individualmente para cada tupla. Assim, as condições de seleção não podem ser
aplicadas a mais que uma tupla. O grau da relação resultante é a mesma que a relação original.

O número de tuplas da relação resultante é sempre menor ou igual ao número de tuplas da relação
original. O comando SELECT permite recuperar os dados de um objeto do banco de dados, como uma
tabela, view e, em alguns casos, uma stored procedure (alguns bancos de dados permitem a criação
de procedimentos que retornam valor).

A sintaxe mais básica do comando é:

É possível selecionar o conteúdo de uma tabela parcial colocando restrições para as linhas a serem
incluídas no resultado. Isto é feito com a utilização da cláusula WHERE para adicionar restrições
condicionais ao comando SELECT. A sintaxe a seguir permite especificar quais linhas serão
selecionadas:

180
Módulo: Programação de Sistemas

O comando SELECT recupera todas as linhas que atendam às condições especificadas – também
conhecidas como critérios condicionais – na cláusula where. A lista de condições em where é uma
representação por uma ou mais expressões condicionais, separadas por operadores lógicos.

A cláusula where é opcional. Se nenhuma linha atender aos critérios especificados nesta cláusula, o
usuário verá uma tela em branco ou uma mensagem dizendo que nenhuma linha foi retornada.

Operadores SQL

Os operadores aritméticos desempenham operações matemáticas em duas expressões de um ou mais


dos tipos de dados da categoria de tipo de dados numéricos.

Operador Significado
+ (Somar) Adição
- (Subtrair) Subtração
* (Multiplicar) Multiplicação
/ (dividir) Divisão
% (módulo) Retorna o resto inteiro de uma divisão. Por exemplo, 12% 5 = 2 porque o resto de 12
dividido por 5 é 2.
= (Operador de atribuição)
O sinal de igual (=) é o único operador de atribuição Transact-SQL.

O operador de atribuição também pode ser usado para estabelecer a relação entre um título de coluna
e a expressão que define os valores para a coluna.

SELECT FirstColumnHeading = ‘xyz',


SecondColumnHeading = ProductID
FROM Production.Product;

Operadores compostos

181
Módulo: Programação de Sistemas

Os operadores compostos executam alguma operação e definem um valor original para o resultado da
operação.

Operadores lógicos

UPDATE

O comando UPDATE é responsável por alterar um ou mais registros de uma tabela, dependendo de
suas condições e é claro respeitando as restrições da tabela, sintaxe:

DELETE

182
Módulo: Programação de Sistemas

O comando DELETE nos permite remover um ou mais registros de uma tabela, sintaxe:

Excluindo dados de uma tabela


O comando delete é utilizado para excluir linhas de uma tabela. No exemplo vamos apagar os pedidos que
tenham seu número acima de 1000.
Exemplo
DELETE FROM Pedidos
WHERE PedidoNumr>=1000

Questões

1. Qual o significado de DML?


2. Quais são os comandos DML?
3. O que é um operador de atribuição?
4. Quais são as cláusulas obrigatórias no comando select?
5. Para que servem os operadores compostos?
6. O que faz o comando Update?
7. Dê um exemplo.
8. O que faz o comando INSERT?
9. Apresente um exemplo de como é possível usar um operador numa busca.
10. O que faz o comando DELETE?

CONDIÇÕES DE FILTRAGEM EM BUSCAS SQL

WHERE

A cláusula WHERE permite aplicar uma condição para que seja realizado o comando SQL. O objetivo
dele é fazer a filtragem dos dados determinados pelos comandos SELECT, UPDATE e DELETE.A
condição é construída através de uma comparação entre dois valores, utilizando os operadores
relacionais.

Operadores Relacionais

183
Módulo: Programação de Sistemas

Para aplicar a condição (ou filtro) podem ser utilizados os operadores de comparação: =, >, <, >=, <=
e <> (diferente). A tabela mostra os operadores de comparação que são usados:

Exemplos: para saber se um determinado valor está abaixo de 100, podemos utilizar a comparação:
valor < 100. Podemos testar se o código é igual

GROUP BY
Os dados resultantes de uma seleção podem ser agrupados de acordo com um critério específico. Este
procedimento é realizado usando a cláusula group by.
Exemplo
SELECT COUNT(PedidoNumr) FROM Pedidos GROUP BY PedidoNumr

Junções (join)
Quando precisamos realizar consultas que envolvam mais de uma tabela, uma das soluções seria a utilização
de junções. As junções permitem que acessemos mais de uma tabela utilizando apenas um SELECT.

Junção interna (inner Join)

A junção interna entre tabelas é a modalidade de junção que faz com que somente participem da
relação resultante as linhas das tabelas de origem que atenderem à cláusula de junção.

SELECT * FROM tabela_Livros


INNER JOIN tabela_autores
ON tabela_Livros.ID_Autor = tabela_autores.ID_Autor;

Junções externas (outer join)

Na junção externa, os registros que participam do resultado da junção não obedecem obrigatoriamente
à condição de junção, ou seja, a não inexistência de valores correspondentes não limita a participação
de linhas no resultado de uma consulta.

Sintaxe:

SELECT coluna
184
Módulo: Programação de Sistemas

FROM tabela_esq
RIGHT (OUTER) JOIN tabela_dir
ON tabela_esq.coluna=tabela_dir.coluna
WHERE tabela_esq.coluna IS NULL;

Exemplo:

SELECT * FROM tabela_Livros


RIGHT JOIN tabela_editoras
ON tabela_Livros.ID_editora = tabela_editoras.ID_editora
WHERE tabela_Livro.ID_editora IS NULL;

COMANDO: SELECT...INTO

Esse comando é usado para armazenar o resultado de uma consulta em uma variável.

SELECT Nome, Sobrenome INTO Relacao_Autores


FROM tabela_Autores
where ID = ID_Autor

O resultado da consulta deve ter sempre como retorno somente uma linha, caso o resultado tenha
mais de uma linha, deve ter o mesmo número de variáveis para receber esses valores.

Questões

1. Crie dois comandos utilizando a cláusula between.


2. Qual o significado da cláusula where?
3. Crie dois comandos utilizando a cláusula where.
4. Crie um comando delete usando a cláusula where.
5. Crie um comando usando a cláusula set.
6. Apresente um exemplo usando group by.
7. Apresente um exemplo usando inner join.
8. Apresente um exemplo usando Select into.
9. Como armazenar o conteúdo de uma busca em uma variável?
10. Como se pode fazer consultas em mais de uma tabela?

185
Módulo: Programação de Sistemas

TEMA 5. MODELAGEM DDL

Em tese, uma linguagem de banco de dados permite a criação de banco de dados e estruturas de
tabelas para executar tarefas básicas de gerenciamento de dados (adicionar, excluir e modificar) e
consultas complexas, transformando dados brutos em informações úteis. Além disso, essa linguagem
deve executar essas funções básicas exigindo o menor esforço possível do usuário, com uma estrutura
e sintaxe de comandos fáceis de aprender.

Comandos de Definição de Dados.

Os comandos de definição de dados SQL devem ser portáveis, ou seja, adequar-se há um padrão
básico para que os usuários não tenham de reaprender o básico quando passarem de um SGBDR
para outro. A SQL atende bem a essas exigências ideais de linguagens de banco de dados.

Suas funções de enquadram em duas amplas categorias:

• Linguagem de definição de dados (DDL): A SQL inclui comandos para criar objetos de banco
de dados como tabelas, índices e views. Bem como comandos para definir direitos de acesso
a esses objetos.

186
Módulo: Programação de Sistemas

O comando alter table


O comando alter table permite alterar a estrutura de uma tabela acrescentando, alterando, retirando
e alterando nomes, formatos das colunas e a integridade referencial definidas em uma determinada
tabela.
• nome-tabela representa o nome da tabela que será atualizada.
• nome-coluna representa o nome da coluna que será criada.
• tipo-do-dado a cláusula que define o tipo e tamanho dos campos definidos para a tabela.
• DROP nome-coluna realiza a retirada da coluna especificada na estrutura da tabela.
ADD nome-coluna tipo-do-dado realiza a inclusão da coluna especificada na estrutura da
tabela. Na coluna correspondente a este campo nos registros já existentes será preenchido o
valor NULL (Nulo). As definições NOT NULL e NOT NULL WITH DEFAULT são semelhantes
à do comando CREATE TABLE.
• MODIFY nome-coluna tipo-do-dado permite a alteração na característica da coluna
especificada.

Apagando uma coluna de uma tabela


Imagine que você deseja, por alguma razão, apagar a coluna que armazena o nome Nome_Genero
dos livros da tabela tabela_generos.
Exemplo
ALTER TABLE tabela_generos
DROP Nome_Genero;

Modificando uma coluna de uma tabela


Se precisássemos mudar as características de uma coluna da tabela após a sua criação, usaríamos
o comando modify. Como exemplo, imagine que desejamos aceitar valores nulos no atributo
PedidoNumr da tabela Pedidos.
CREATE TABLE Pedidos (

187
Módulo: Programação de Sistemas

PedidoID int NOT NULL, PedidoNumr int NOT NULL, PessoaID int,
PRIMARY KEY (PedidoID),
FOREIGN KEY (PessoaID) REFERENCES Pessoa(PessoaID)
);

Exemplo
ALTER TABLE Pedidos
MODIFY PedidoNumr INTEGER NULL;

O COMANDO DROP TABLE


O comando drop table serve para destruirmos uma tabela. Se, por exemplo, precisássemos destruir
a tabela Pedidos ,

Exemplo
DROP TABLE Pedidos;

Questões

1. Qual o comando utilizado para alterar uma coluna em uma tabela?


2. Qual o comando utilizado para criar um esquema de banco de dados?
3. Quais são os comandos disponíveis em DDL?
4. Qual o comando utilizado para remover uma tabela de um banco de dados?
5. Qual o comando utilizado para criação de uma tabela em um esquema específico de banco de
dados?
6. Qual o comando utilizado para modificar uma coluna de uma tabela?
188
Módulo: Programação de Sistemas

7. E para alterar um tipo de dados de uma coluna?


8. Qual o comando utilizado para validar as remoções em um banco de dados?
9. Para que serve o comando Drop table?
10. Apresente um exemplo de Drop Table.

RECURSOS AVANÇADOS DE DDL

Antes de podermos utilizar um novo SGBDR, é necessário realizar duas tarefas: primeiro, criar a
estrutura do banco de dados e segundo, criar as tabelas que manterão os dados do usuário final. Para
realizar a primeira tarefa o SGBDR cria os arquivos físicos que conterão o banco de dados.

Recursos avançados de DDL

Quando se utiliza um SGBDR empresarial, antes de começar a criar tabelas é necessário ser
autenticado por esse sistema. A autenticação é o processo por meio do qual um SGBD garante que
somente usuários registrados possam acessar o banco de dados. Para ser autenticado, deve-se fazer
login no SGBDR utilizando um ID de usuário e uma senha criada pelo administrador de banco de
dados. Em um SGBDR empresarial todo ID de usuário está associado a um esquema de banco de
dados.

189
Módulo: Programação de Sistemas

Conectando no MySQL

Esquema de banco de dados:

Quando se utiliza um SGBDR empresarial, antes de começar a criar tabelas é necessário ser
autenticado por esse sistema. A autenticação é o processo por meio do qual um SGBD garante que
somente usuários registrados possam acessar o banco de dados. Para ser autenticado, deve-se fazer

login no SGBDR utilizando um ID de usuário e uma senha criada pelo administrador de banco de
dados. Em um SGBDR empresarial todo ID de usuário está associado a um esquema de banco de
dados.No ambiente de SQL esquema é um grupo de objetos de banco de dados como tabelas e índices
relacionados entre si. Geralmente o esquema pertence a um único usuário ou aplicação. Um único
banco de dados pode manter vários esquemas que pertençam a vários usuários ou aplicações. Pense
no esquema como um agrupamento lógico de objetos de banco de dados, como tabelas, índices e
views. Eles são úteis, pois agrupam as tabelas por proprietários (ou função) e aplicam o primeiro nível
de segurança permitindo que cada usuário veja apenas as tabelas que lhe pertencem.

Os padrões de SQL ANSI definem um comando para a criação de um esquema de banco de dados:

CREATE SCHEMA AUTHORIZATION {CRIADOR}

190
Módulo: Programação de Sistemas

Após a criação do esquema de banco de dados, estamos prontos para definir as estruturas das tabelas
no banco de dados.

Especificações

Quando for indispensável haver dados disponíveis, a especificação NOT NULL não permitirá que o
usuário deixe o atributo vazio (sem nenhuma entrada de dados).

UNIQUE

Restrições são regras que o Mecanismo de Banco de Dados do SQL Server impõe a você. Por
exemplo, você pode usar as restrições UNIQUE para garantir que não há valores duplicados inseridos
em colunas específicas que não participam de uma chave primária. Embora a restrição UNIQUE e a
restrição PRIMARY KEY impõem exclusividade, use a restrição UNIQUE em vez da restrição
PRIMARY KEY quando for impor a exclusividade de uma coluna, ou uma combinação de colunas, que
não seja uma chave primária.

Diferente das restrições PRIMARY KEY, as restrições UNIQUE permitem o valor NULL. Porém, como
com qualquer valor que participa de uma restrição UNIQUE, só um valor nulo é permitido por coluna.
Uma restrição UNIQUE pode ser referenciada por uma restrição FOREIGN KEY.

Quando uma nova restrição UNIQUE é adicionada a uma coluna ou colunas existentes em uma tabela,
o Banco de Dados, por padrão, examina os dados existentes nas colunas para certificar-se de que
todos os valores são únicos. Se uma restrição UNIQUE for adicionada a uma coluna que tem valores
duplicados, o mecanismo de Banco de Dados retornará um erro e não adicionará a restrição.

A especificação UNIQUE cria um índice exclusivo no respectivo atributo. Utilize-o para evitar a
duplicidade de valores em uma coluna.

Além dos formatos apresentados na tabela, a SQL dá suporte a muitos outros tipos de dados, incluindo
TIME(Hora), TIMESTAMP (registro de data e hora), REAL (número real), DOUBLE (duplo), FLOAT
(ponto flutuante), e intervalos como INTERVAL, DAY TO HOUR. Muitos SGBDR´s também expandiram
a lista para incluir outros tipos de dados como LOGICAL (lógico), CURRENCY (moeda),
AUTONUMBER (numeração automática) e sequência.

Permissões dos usuários


191
Módulo: Programação de Sistemas

O MySQL é um sistema gerenciador de banco de dados de código aberto que ajuda os usuários a
armazenar, organizar e posteriormente recuperar dados.

Ele possui diversas opções para garantir a usuários específicos permissões dentro de tabelas e bancos
de dados.

Quando um usuário é criado, não possui permissões para fazer nada com os bancos de dados. Na
verdade, mesmo se tentar fazer login (com a senha password), ele não será capaz de chegar ao shell
do MySQL.

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

Portanto, a primeira coisa a ser feita é fornecer ao usuário o acesso às informações que eles irão
precisar.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Os asteriscos do comando referem-se ao banco de dados e tabela que ele pode acessar . Este comando
permite que o usuário leia, edite, execute e realize todas as tarefas em todos os bancos de dados e tabelas.
Observe que, nesse exemplo, estamos concedendo ao usuáirio acesso root completo a tudo em nosso banco
de dados.

Outras permissões dos usuários

• ALL PRIVILEGES — como vimos anteriormente, isso garante ao usuário do MySQL acesso
completo a um banco de dados (ou, se nenhum banco de dados for selecionado, acesso global
a todo o sistema)
• CREATE — permite criar tabelas ou bancos de dados
• DROP — permite deletar tabelas ou bancos de dados
• DELETE — permite excluir linhas de tabelas
• INSERT — permite inserir linhas em tabelas
• SELECT - permite usar o comando SELECT para ler os bancos de dados
• UPDATE — permite atualizar linhas de tabelas
• GRANT OPTION — permite conceder ou remover privilégios de outros usuários

Atividades

1. O que é necessário antes de criar uma tabela em um banco de dados?


2. Complete a syntax CREATE SCHEMA AUTHORIZATION
3. Quais são os direitos do usuário root no schema root?
4. Quais as permissões um usuário tem ao ser criado?
5. O ID de usuário está associado a que objeto de banco de dados?
192
Módulo: Programação de Sistemas

6. Como funciona a especificação NOT NULL?


7. Como funciona a especificação UNIQUE?
8. Qual uma alternativa para a especificação UNIQUE?

OUTROS RECURSOS

Funções agregadas
Muitas vezes, precisamos de informações que resultado de alguma operação aritmética ou de
conjunto sobre os dados contidos nas tabelas de um banco de dados. Para isso, utilizamos as
funções agregadas. A seguir apresentaremos algumas delas.

Função count( )
A função count, como o próprio nome sugere, conta a quantidade de linhas de uma tabela que
satisfazem uma determinada condição.
Para contar o número de pedidos que existe na tabela pedidos, pode-se usar o count.
Exemplo
SELECT COUNT(PedidoNumr) FROM Pedidos

Função avg( )
A função avg é responsável por extrair a média aritmética dos valores de uma coluna.
Para calcular a média de pedidos da tabela pedidos, pode-se usar o avg.
Exemplo
SELECT AVG(PedidoNumr) FROM Pedidos

Função sum( )
A função sum é responsável por realizar a soma dos valores de uma coluna.
Para somar o total de pedidos abaixo de 1000 da tabela pedidos, pode-se usar o sum.
Exemplo
SELECT SUM(PedidoNumr) FROM Pedidos WHERE PedidoNumr<1000

193
Módulo: Programação de Sistemas

CRIAÇÃO DE ÍNDICE
No banco de dados MySQL os índices podem ser criados com considerável facilidade, tanto no
momento da concepção da tabela quanto em uma tabela já existente.

CREATE INDEX
CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);

Neste exemplo é criada uma tabela chamada CLIENTES com dois campos: Codigo, do tipo inteiro e
Nome do tipo texto.
CREATE TABLE CLIENTES(
Codigo INT,
Nome VARCHAR(50),
INDEX (Codigo)
);

194
Módulo: Programação de Sistemas

O índice é criado com o uso da palavra reservada INDEX, seguida do nome da(s) coluna(s) a
ser(em) indexada(s). Porém, nem sempre sabemos onde vamos precisar de um índice e muitas
vezes é preciso criá-los quando a tabela já existe e inclusive quando já possui registros. Isso pode
ser feito com uma instrução DDL (Data Definition Language), como veremos a seguir. Inicialmente
criamos a tabela sem índice algum, em seguida adicionamos o índice à coluna “Codigo”.
CREATE TABLE CLIENTES(
Codigo INT,
Nome VARCHAR(50
);

Criando o índice separadamente


CREATE INDEX idx_CLIENTES_CODIGO ON CLIENTES(Codigo);

Nesse caso precisamos definir um nome para o índice (por questão de padronização, alguns
profissionais optam por iniciar o nome do índice com um prefixo que indique que ele é um índice,
como “id” ou “idx” de “index”, em inglês). Após o nome do índice adicionamos a palavra reservada
“ON” que indica em que tabela e coluna o índice será criado, dados que vêm logo em seguida, como
vemos na listagem.
Nem sempre o uso de índice trará um bom desempenho, pois a escolha incorreta de um índice pode
causar um desempenho insatisfatório. Portanto, a tarefa do otimizador de consulta é selecionar um
índice ou uma combinação de índices apenas quando isso gerar melhoria de desempenho e evitar a
recuperação indexada quando isso atrapalhar o desempenho.
VIEW
Uma View é um objeto que pertence a um banco de dados, definida baseada em declarações
SELECT´s, retornando uma determinada visualização de dados de uma ou mais tabelas.Esses
objetos são chamados por vezes de “virtual tables“, formada a partir de outras tabelas que por sua
vez são chamadas de “based tables” ou ainda outras Views.

CRIANDO UMA VIEW


Create view
CREATE VIEW view_name AS SELECT column1, column2, ...
FROM table_name
WHERE condition;
ou
CREATE VIEW nome_da_view AS SELECT * FROM nome_tabela;

Verificar se a View foi criada


SHOW TABLES;

Caso exista uma nova tabela chamada “nome_da_view” foi o nome que definimos para essa nova
view; A criação da view foi executada com sucesso.
Alterando uma View
ALTER VIEW nome_da_view AS SELECT * FROM nome_outra_tabela;
195
Módulo: Programação de Sistemas

Excluindo uma View


DROP VIEW nome_da_view;

E alguns casos, as Views são atualizáveis e podem ser alvos de declaração INSERT, UPDATE e
DELETE, que na verdade modificam sua “based tables“.

Questões

1. O que são Funções agregadas?


2. Qual o papel da função count( )?
3. O que faz a função avg( )?
4. Qual o papel da função sum( )
5. O que é um index?
6. O que é uma view?
7. Como criar uma view?
8. E como é possível verificar se a View foi criada?
9. Qual o comando para remover uma visualização?
10. Como alterar uma view?

COMANDOS DCL

A Linguagem de consulta (SQL) estruturada como todos sabemos é a linguagem de banco de dados pelo uso de
que podemos realizar determinadas operações no banco de dados existente e podemos usar essa linguagem
para criar um banco de dados. O SQL usa certos comandos como Create, Drop, Insert etc. para realizar as
tarefas necessárias. A Linguagem de Controle de Dados, ou do inglês Data Control Language(DCL), é uma
linguagem de computador e um subconjunto de SQL, usada para controlar o acesso aos dados em um banco
de dados.

Esses comandos SQL são principalmente categorizados e uma dessa categoria será discutida neste
tema.

Banco de Dados consistente

196
Módulo: Programação de Sistemas

Um banco de dados consistente é aquele em que são satisfeitas as restrições de integridade de banco
de dados. Para assegurar a consistência do banco de dados, toda transação deve começar com o
banco de dados em estado considerado consistente. Se ele não estiver nesse estado, a transação
resultará em um banco de dados inconsistente e violará suas regras de integridade e de negócios. Por
esse motivo todas as transações são controladas e executadas pelo SGBD para garantir a integridade
do banco de dados. A maioria das transações reais é formada por duas ou mais solicitações. A
solicitação de banco de dados é o equivalente a um único comando de SQL em um aplicativo ou
transação. Para executar operações DML em uma tabela, as permissões são necessárias e são
chamadas Privilégios. Esses privilégios podem ser controlados eficientemente usando as instruções
do MySQL DCL.

O MySQL Data Control Language é semelhante ao SQL Data Control Language e estes são
classificados em dois tipos:

Grant

Grant é usado para conceder permissões aos clientes. No banco de dados MySQL, ele oferece ao
servidor e ao cliente uma grande quantidade de privilégios de controle. No lado do servidor do
procedimento, ele incorpora a possibilidade de o servidor controlar determinados benefícios do cliente
sobre o banco de dados MySQL e reduzir suas permissões de conexão do banco de dados ou
conceder autorizações limitadas para uma tabela específica.

Concessões em objetos do banco de dados

Esta funcionalidade do comando GRANT concede privilégios específicos sobre um objeto do banco de
dados para um ou mais papéis. Estes privilégios são adicionados aos já existentes, caso haja algum.

197
Módulo: Programação de Sistemas

A palavra-chave PUBLIC indica que os privilégios devem ser concedidos para todos os papéis,
inclusive aos que vierem a ser criados posteriormente. PUBLIC pode ser considerado como um grupo
definido implicitamente que sempre inclui todos os papéis. Um determinado papel possui a soma dos
privilégios concedidos diretamente para ele, mais os privilégios concedidos para todos os papéis que
este seja membro, mais os privilégios concedidos para PUBLIC.

Se for especificado WITH GRANT OPTION quem receber o privilégio poderá, por sua vez, conceder o
privilégio a terceiros. Sem a opção de concessão, quem recebe não pode conceder o privilégio. A
opção de concessão não pode ser concedida para PUBLIC.

Não é necessário conceder privilégios para o dono do objeto (geralmente o usuário que o criou), porque
o dono possui todos os privilégios por padrão (Entretanto, o dono pode decidir revogar alguns de seus
próprios privilégios por motivo de segurança). O direito de remover um objeto, ou de alterar a sua
definição de alguma forma, não é descrito por um privilégio que possa ser concedido; é inerente ao
dono e não pode ser concedido ou revogado. O dono possui também, implicitamente, todas as opções
de concessão para o objeto.

Dependendo do tipo do objeto, os privilégios padrão iniciais podem incluir a concessão de alguns
privilégios para PUBLIC. O padrão é: não permitir o acesso público às tabelas, esquemas e espaços
de tabelas; para os bancos de dados conceder o privilégio CONNECT e o privilégio de criação de
tabela TEMP; para as funções conceder o privilégio EXECUTE; e para as linguagens conceder o
privilégio USAGE. O dono do objeto poderá, é claro, revogar estes privilégios (para a máxima
segurança o comando REVOKE deverá ser executado na mesma transação que criar o objeto; dessa
forma não haverá espaço de tempo para outro usuário utilizar o objeto).

Os privilégios possíveis são:

SELECT

Permite consultar (SELECT) qualquer coluna da tabela, visão ou seqüência especificada. Também
permite utilizar o comando COPY TO. Para as seqüências, este privilégio também permite o uso da
função currval.

INSERT

Permite inserir (INSERT) novas linhas na tabela especificada. Também permite utilizar o comando
COPY FROM.

UPDATE

198
Módulo: Programação de Sistemas

Permite modificar (UPDATE) os dados de qualquer coluna da tabela especificada. Os comandos


SELECT ... FOR UPDATE e SELECT ... FOR SHARE também requerem este privilégio (além do
privilégio SELECT). Para as seqüências, este privilégio permite o uso das funções nextval e setval.

DELETE

Permite excluir (DELETE) linhas da tabela especificada.

REFERENCES

Para criar uma restrição de chave estrangeira é necessário possuir este privilégio, tanto na tabela que
faz referência quanto na tabela que é referenciada.

TRIGGER

Permite criar gatilhos na tabela especificada (Consulte o comando CREATE TRIGGER).

CREATE

Para bancos de dados, permite a criação de novos esquemas no banco de dados.

Para esquemas, permite a criação de novos objetos no esquema. Para mudar o nome de um objeto
existente é necessário ser o dono do objeto e possuir este privilégio no esquema que o contém. Para
espaços de tabelas, permite a criação de tabelas e índices no espaço de tabelas, e permite a criação
de bancos de dados possuindo este espaço de tabelas como seu espaço de tabelas padrão (Deve ser
observado que revogar este privilégio não altera a colocação dos objetos existentes).

CONNECT

Permite ao usuário se conectar ao banco de dados especificado. Este privilégio é verificado no


estabelecimento da conexão (além de serem verificadas as restrições impostas por pg_hba.conf).

TEMPORARY - TEMP

Permite a criação de tabelas temporárias ao usar o banco de dados.

EXECUTE

Permite utilizar a função especificada e qualquer operador implementado utilizando a função. Este é o
único tipo de privilégio aplicável às funções (Esta sintaxe funciona para as funções de agregação
também).

USAGE
199
Módulo: Programação de Sistemas

Para as linguagens procedurais, permite o uso da linguagem especificada para criar funções nesta
linguagem. Este é o único tipo de privilégio aplicável às linguagens procedurais.Para os esquemas,
permite acessar os objetos contidos no esquema especificado (assumindo que os privilégios
requeridos para os próprios objetos estejam atendidos). Essencialmente, concede a quem recebe o
direito de "procurar" por objetos dentro do esquema. Sem esta permissão ainda é possível ver os
nomes dos objetos, por exemplo consultando as tabelas do sistema. Além disso, após esta permissão
ter sido revogada os servidores existentes poderão conter comandos que realizaram anteriormente
esta procura, portanto esta não é uma forma inteiramente segura de impedir o acesso aos objetos.

ALL PRIVILEGES

Concede todos os privilégios disponíveis de uma só vez. A palavra chave PRIVILEGES é requerida
pelo SQL estrito. Os privilégios requeridos por outros comandos estão listados nas páginas de
referência dos respectivos comandos.

Sintaxe

GRANT {ALL | statement [ ,…n ] }

Exemplo

Visualizando o exemplo abaixo, o conceito de comando grant pode ser facilmente entendido.

Descrição: O comando revoke cancelará todas as permissões do usuário. Sintaxe:

200
Módulo: Programação de Sistemas

REVOKE

O comando REVOKE revoga, de um ou mais papéis, privilégios concedidos anteriormente. A palavra-


chave PUBLIC se refere ao grupo contendo todos os usuários, definido implicitamente. O significado
dos tipos de privilégio deve ser visto na descrição do comando GRANT.

Deve ser observado que um determinado papel possui a soma dos privilégios concedidos diretamente
para o próprio papel, mais os privilégios concedidos para os papéis dos quais o papel é membro no
momento, mais os privilégios concedidos para PUBLIC.

Daí, por exemplo, revogar o privilégio SELECT de PUBLIC não significa, necessariamente, que todos
os papéis perderão o privilégio SELECT para o objeto: os papéis que receberam o privilégio
diretamente, ou através de outro papel, ainda terão o privilégio.

Se for especificado GRANT OPTION FOR somente a opção de concessão do privilégio é revogada, e
não o próprio privilégio. Caso contrário, tanto o privilégio quanto a opção de concessão serão
revogados.

Se o usuário possui um privilégio com opção de concessão, e concedeu este privilégio para outros
usuários, então os privilégios que estes outros usuários possuem são chamados de privilégios
dependentes. Se o privilégio ou a opção de concessão que o primeiro usuário possui for revogada, e
existirem privilégios dependentes, estes privilégios dependentes também serão revogados se for
especificado CASCADE, senão a ação de revogar falhará.

Esta revogação recursiva somente afeta os privilégios que foram concedidos através de uma cadeia
de usuários começando pelo usuário objeto deste comando REVOKE. Portanto, os usuários afetados
poderão manter o privilégio, se o privilégio também tiver sido concedido por outros usuários.

Ao revogar o privilégio de membro de um papel, GRANT OPTION passa a se chamar ADMIN OPTION,
mas o comportamento é semelhante.

Deve ser observado, também, que esta forma do comando não inclui a palavra GROUP.

<priv_type> [<column_list>]
[priv_type [<column_list>]] … ON [object_type] priv_level FROM user [user] …
REVOKE ALL PRIVILEGES, GRANT OPTION

FROM user [user] …

CREATE USER

201
Módulo: Programação de Sistemas

Usada para criar um usuário no sistema (sem privilégios)

Sintaxe:

CREATE USER usuário@host IDENTIFIED BY 'senha';

host é o nome do host a partir de onde o usuário pode se conectar ao banco de dados; geralmente
usamos localhost para a máquina local. Se não for especificado um host, o MySQL acrescentará
automaticamente o símbolo % como nome do host, o que significa que o usuário poderá se conectar
de qualquer lugar. É possível também usar o endereço IP de um host (por exemplo, 127.0.0.1 para o
host local).

Após a criação do usuário, ele não terá nenhum privilégio em nenhum banco de dados. Os privilégios
podem ser atribuídos por meio da declaração GRANT, que estudaremos na próxima lição.

Exemplos:
1. Criando um usuário de nome “fabio” com senha “1234” no MySQL, com acesso a partir do host local:

CREATE USER fabio@localhost IDENTIFIED BY '1234';

Verificando se o usuário foi criado como especificado:

SELECT User, Host FROM mysql.user;

2. Criando um usuário de nome “ana” com acesso a partir de qualquer local:

CREATE USER ana IDENTIFIED BY "1234";

202
Módulo: Programação de Sistemas

Note que na coluna Host aparece o símbolo % para a usuária ana, significando que ela pode acessar
o SGBD de qualquer local.

3. Criando um usuário de nome marcos sem senha definida no momento:

CREATE USER marcos@localhost;

Para alterar ou configurar uma senha para esse usuário posteriormente, use o comando SET PASSWORD:
SET PASSWORD FOR 'marcos'@'localhost' = PASSWORD('1234');

Alteramos a senha do usuário marcos para 1234 com essa declaração.

Nas versões mais recentes do MySQL, a declaração SET PASSWORD foi deprecada, e não será mais
utilizada nas próximas versões.

RENAME USER

Usada para renomear um usuário do MySQL. Se o usuário possuir privilégios configurados, eles são
mantidos para o novo nome de usuário.

Sintaxe:

RENAME USER nome_atual TO novo_nome;

Exemplo:
1. Vamos renomear a usuária ana para monica:

RENAME USER ana TO monica;

203
Módulo: Programação de Sistemas

DROP USER

Usada para excluir um usuário do MySQL. Esta declaração elimina o usuário e seus privilégios do
sistema.

Sintaxe: DROP USER nome_usuário;

Exemplo:
Vamos remover a usuária monica: DROP USER monica;

Visualizando o exemplo abaixo, o conceito de comando revogar pode ser facilmente entendido.

Questões

1. O que é DCL?
2. Quais são os comandos DCL?
3. O que é o comando grant?
4. Explique a funcionalidade do comando revoke grant option.
5. Apresente a sintaxe e um exemplo do comando revoke.
6. Explique o que é a possibilidade de ALL PRIVILEGES.
7. Crie um comando DCL utilizando a funcionalidade all privileges.
8. Crie um comando Create user.
9. Crie um comando drop
10. Explique o comando rename

204
Módulo: Programação de Sistemas

TEMA 6 : CONECTIVIDADE EM PYTHON

205
Módulo: Programação de Sistemas

Você necessita de um banco de dados para salvar informações em seus programas do Python, os
principais que podem ser acessados por ele são: MySQL, SQLite, PostgreSQL e Interbase/Firebird.
Falaremos sobre o MySQL. Primeiro temos que construir conexão com o MySQL. O seguinte irá se
conectar ao banco de dados MySQL no programa Python

Primeiro nós importamos o pyMySQL, então estabelecemos uma conexão. O pyMySQL.connect () leva
quatro argumentos. O primeiro é o nome do host, ou seja, o localhost, e os três restantes são como
são declarados. Usando esta conexão, criamos um cursor que será usado para diferentes consultas.

Para criar uma conexão com o banco de dados, use o nome de usuário e a senha do seu banco de
dados MySQL:

import mysql.connector

mydb = mysql.connector.connect(

host="localhost",

user="yourusername",

password="yourpassword"

print(mydb)

Criando um banco de dados


Para criar um banco de dados no MySQL, use uma instrução "CREATE DATABASE":
Exemplo
Crie um banco de dados chamado "mydatabase":
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",

206
Módulo: Programação de Sistemas

password="yourpassword"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")

Verifique se existe banco de dados


Você pode verificar se existe um banco de dados listando todos os bancos de dados em seu sistema usando
uma instrução "SHOW DATABASES":

Exemplo
Retorne uma lista dos bancos de dados do seu sistema:
import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)

mycursor = mydb.cursor()
mycursor.execute("SHOW DATABASES")

for x in mycursor:
print(x)

Ou você pode tentar acessar o banco de dados ao fazer uma conexão:

Exemplo
Tente se conectar ao banco de dados "meu banco de dados":
import mysql.connector

mydb = mysql.connector.connect(
host="localhost",

207
Módulo: Programação de Sistemas

user="yourusername",
password="yourpassword",
database="mydatabase"
)

Python MySQL creating table

Vamos agora criar uma tabela chamada Artist com colunas - name, id e track

Python MySQL insert

Agora nosso interesse é inserir algumas entidades de linha na tabela. Primeiro você tem que escrever
as consultas para inserir dados diferentes e, em seguida, executá-lo com a ajuda do cursor.

208
Módulo: Programação de Sistemas

Python MySQL select

Nós inserimos duas linhas no código acima. Agora queremos recuperá-los. Para fazer isso, dê uma
olhada no seguinte exemplo:

Selecione com um filtro


Ao selecionar registros de uma tabela, você pode filtrar a seleção usando a instrução "WHERE":
Exemplo
Selecione o (s) registro (s) em que o endereço seja "Park Lane 38": resultado:

209
Módulo: Programação de Sistemas

import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)

mycursor = mydb.cursor()

sql = "SELECT * FROM customers WHERE address ='Park Lane 38'"

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Caracteres curinga
Você também pode selecionar os registros que constam, incluindo ou terminam com uma determinada letra
ou frase.

Use o % para representar caracteres curinga:

Exemplo
Selecione os registros em que o endereço contenha a palavra "caminho":
import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
210
Módulo: Programação de Sistemas

mycursor = mydb.cursor()

sql = "SELECT * FROM customers WHERE address LIKE '%way%'"

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

CRUD - ( Create, Read, Update e Delete)


Pode ser traduzido como: criar, ler, atualizar e excluir, engloba os principais comandos da linguagem SQL
(Structured Query Language) para a manipulação de dados, que são: INSERT (inserir), READ (ler), UPDATE
(alterar) e DELETE (remover). As interfaces CRUD permitem cadastrar (create), visualizar (read), editar (update)
e excluir (delete) registros de um sistema.

INSERT – CREATE
Esse comando é responsável por inserir dados na tabela. Assim, toda vez que você quiser adicionar algo novo,
você precisa usar o comando INSERT, seguido do campo e do valor que você quer adicionar.

SELECT – READ
O SELECT é de longe o comando mais utilizado do CRUD. Justamente porque é ele quem traz todo o resultado
da busca que você quer saber. Assim, ele traz para você exatamente o que você quer saber quando pesquisa
algo no banco de dados.

211
Módulo: Programação de Sistemas

UPDATE
O comando UPDATE tem por finalidade a atualização dos dados que você inseriu na tabela. Se por algum
motivo você quer modificar um campo, atualizar o valor ou acrescentar novos dados, é o UPDATE que você vai
utilizar.

Python MySQL Update

Exemplo
UPDATE cliente SET endereco = ‘Rua da Flor’ WHERE nome = ‘Joana das Flores’;

Para atualizar um campo, basta especificar qual campo você vai modificar, com o valor antigo pelo valor que
você quer substituir.

DELETE
Por fim temos o comando DELETE que simplesmente exclui o dado especificado. Muito cuidado, pois, uma vez
excluído não tem Ctrl + z para voltar no tempo e desfazer o erro.

Python MySQL Delete

Exemplo
DELETE from cliente WHERE nome = ‘Joana das Flores’;

212
Módulo: Programação de Sistemas

Python MySQL – Drop Table

Impedir injeção de SQL


Quando os valores da consulta são fornecidos pelo usuário, você deve escapar dos valores.
Isso evita injeções de SQL, que é uma técnica comum de hacking para destruir ou usar indevidamente seu
banco de dados.
O módulo mysql.connector tem métodos para escapar dos valores da consulta:
Exemplo
Escape dos valores da consulta usando o %s método de placholder :
import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)

mycursor = mydb.cursor()

sql = "SELECT * FROM customers WHERE address = %s"


adr = ("Yellow Garden 2", )

mycursor.execute(sql, adr)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

213
Módulo: Programação de Sistemas

Limite o resultado
Você pode limitar o número de registros retornados da consulta, usando uma instrução "LIMIT":

Exemplo
Selecione os 5 primeiros registros na tabela "clientes":
import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)

mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM customers LIMIT 5")

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Comece de outra posição


Se você deseja retornar cinco registros, a partir do terceiro registro, você pode usar uma palavra-chave
"OFFSET":

Exemplo
Comece na posição 3 e retorne 5 registros:
import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"

214
Módulo: Programação de Sistemas

mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM customers LIMIT 5 OFFSET 2")

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Questões

1. O que é o Python?
2. Por que é uma ferramenta interessante de se usar com MySQL?
3. Crie um comando para inserir uma linha usando Python e MySQL.
4. Crie um comando para selecionar os dados inseridos usando Python e MySQL.
5. Crie um comando para atualização de dados usando Python e MySQL.
6. Crie um comando para deletar um objeto de banco de dados usando Python e MySQL.
7. O que é o CRUD em Python e MySQL.
8. Apresente um exemplo de CRUD.
9. Explique como criar um banco de dados MySQL e Python.
10. Como limitar buscas?

DATA WAREHOUSE

O surgimento do conceito Data Warehouse surgiu em decorrência às


dificuldades que muitas organizações começaram a ter com uma grande
quantidade de dados que suas aplicações estavam gerando. O volume
de dados e a dificuldade de reuni-los para a análise eficiente, foram os
responsáveis pela iniciativa de reunir, em um único local, os dados
considerados relevantes ao processo decisório.

Evolução da tecnologia

Com o avanço da internet e crescimento das transações online com alta performance, começaram a
ser necessários programas de extração de dados. Esses programas têm como princípio percorrer os
arquivos do banco de dados usando condições e critérios e, ao encontrar os dados específicos,
direciona-os para um arquivo de extração do banco de dados. O processo de extração se
popularizou rapidamente, em decorrência do aumento de informações e necessidade de análise de

215
Módulo: Programação de Sistemas

dados por todos os segmentos de organizações, fossem privadas ou governamentais, formando a


chamada “arquitetura de desenvolvimento espontâneo” ou “teia de aranha”. O processo destas
operações se baseava nas extrações, seguidas pelas extrações das extrações, assim como as
extrações das extrações das extrações, tudo em um processo de busca por filtragem dos dados.

Esta estrutura era utilizada com uma arquitetura de desenvolvimento espontâneo, a qual não
garantia credibilidade dos dados, a produtividade era limitada e a dificuldade de transformar dados
puros em informações muito grande.

O AMBIENTE PROJETADO
A arquitetura de desenvolvimento espontâneo não era suficiente para atender as necessidades do
futuro das empresas, fazendo-se necessário uma mudança de arquitetura, surgindo o ambiente
projetado de Data Warehouse. No cerne do ambiente projetado está a percepção de que há
fundamentalmente duas espécies de dados – dados primitivos e dados derivados. A Tabela 1 mostra
algumas das principais diferenças entre dados primitivos e derivados.

Data warehouse é uma coleção de dados orientada por assuntos, integrada, variante no tempo e não
volátil, que tem por objetivo dar suporte aos processos de tomada de decisão. O objetivo é fornecer
uma “imagem única da realidade do negócio”. De uma forma geral, sistemas de Data warehouse
compreendem um conjunto de programas que extraem dados do ambiente de dados operacionais da
empresa, um banco de dados que os mantém, e sistemas que fornecem estes dados aos seus
usuários. É, ainda, o epicentro da infraestrutura estratégica da empresa. Ele suporta processamento
informacional promovendo uma sólida plataforma de dados históricos integrados para serem
analisados com visão corporativa.

O Data warehouse é um banco de dados contendo dados extraídos do ambiente de produção da


empresa, que foram selecionados e depurados tendo sido otimizados para processamento de consulta
e não para processamento de transações. Em geral, um Data warehouse requer a consolidação de
outros recursos de dados além dos armazenados em banco de dados relacionais, incluindo
informações provenientes de planilhas eletrônicas, documentos textuais, etc.
Sistemas de Data warehouse revitalizam sistemas da empresa, pois:
• Permitem que sistemas mais antigos continuem em operação;

216
Módulo: Programação de Sistemas

• Consolidam dados inconsistentes dos sistemas mais antigos em conjuntos coerentes;


• Extraem benefícios de novas informações oriundas das operações correntes;
• Provêm ambiente para planejamento de novos sistemas de cunho operacional.

É importante considerar, no entanto, que um Data warehouse não contém apenas dados resumidos,
podendo conter também dados primitivos. É desejável prover ao usuário a capacidade de aprofundar-
se num determinado tópico, investigando níveis de agregação menores ou mesmo o data primitivo,
permitindo também a geração de novas agregações ou correlações com outras variáveis.

Extração de dados
O objetivo do Data Warehouse é centralizar os dados retirados de diversas fontes e facilitar a consulta.
Os dados podem ser extraídos de:
• Planilhas;
• ERPs;
• CRMs

Com diversos formatos, entre os quais:

• Bancos de Dados (SQL)


• XLS
• TXT
• CSV

Após a extração, os dados normalmente são acomodados na área destinada aos processos de
qualidade e padronização dos dados. Posteriomente podem ser direcionados ao Enterprise Data
Warehouse (EDW) ou aos Data Marts diretamente. Viabiliza a busca por todas as informações
relevantes em um único espaço – organizado, atualizado, criado com foco em facilitar a consulta.

TIPOS DE DATA WAREHOUSE

Integrado: Data warehouses integrados têm como principal função gerar relações consistentes entre
dados de fontes variadas. Eles são capazes de padronizar informações que vêm de sistemas
diferentes, permitindo que, posteriormente, elas sejam tratadas dentro dele.

Variável ao longo do tempo: Já os que se caracterizam por ser variáveis ao longo do tempo usam
recursos de data mining, que tomam como referência principal um ou mais períodos.
Dessa forma, a mineração de dados não se aplica em tempo real, como acontece em bancos OLTP.

217
Módulo: Programação de Sistemas

Por assunto: Por sua vez, os armazenamentos de dados organizados por assunto são aqueles que
atendem aos objetivos de negócios em contextos específicos.
Como exemplo, um escritório contábil que precisa listar e cadastrar diferentes clientes e contribuintes,
assim como os impostos que eles tenham que apurar e recolher.

Não volátil: Dados em data warehouses são sempre tratados para posterior processamento.
Isso significa que, antes de eles serem utilizados pelo usuário final, devem passar por processos de
exclusão e consultas, nos quais são modificados. Desse modo, eles passam a ser estáticos, ou não
voláteis.

Questões
1. que é um data warehouse?
2. Para que serve?
3. Como é utilizado?
4. Porque utilizar um DW nas empresas?
5. Quais as principais características de um DW?
6. Como os dados são armazenados em um DW?
7. Explique o conceito de modelo dimensional.
8. que são ferramentas OLAP? Para que serve?
9. Qual a diferença entre OLAP e OLTP?
10. Quais os métodos de armazenamento das ferramentas OLAP?

218
Módulo: Programação de Sistemas

TEMA 7: BUSINESS INTELLIGENCE

No competitivo mundo dos negócios, a sobrevivência de uma empresa depende de como rápido eles
são capazes de reconhecer dinâmicas de negócios em mudança e desafios, e responder corretamente
e rapidamente. As empresas também devem antecipar tendências, identificar novas oportunidades,
transformar sua estratégia e reorientar os recursos para ficar à frente da competição. A chave para o
sucesso é a informação.

As empresas coletam volumes significativos de dados e têm acesso a ainda mais dados de fora de
seus negócios. Eles precisam da capacidade de transformar esses dados brutos informações
acionáveis, capturando, consolidando, organizando, armazenando, distribuir, analisar e fornecer
acesso rápido e fácil a ele. Isto é vantagem competitiva, mas também o desafio. Tudo isso é o objetivo
da inteligência de negócios (BI).

Com a utilização dos dados, das informações agrupadas e do conhecimento, é possível compreender
o conceito conhecido atualmente por inteligência de negócios (BI - business intelligence) que, segundo
a definição, serve para aumentar a competitividade e alavancar os resultados empresariais. Com essa
poderosa solução, as empresas obterão velocidade de respostas tanto no nível estratégico como no
tático e operacional, conquistando com isso enormes ganhos.

O BI é o uso de diversas e variadas fontes de informação que as organizações utilizam para definir
estratégias e subsidiar processos organizacionais.

Atualmente, o modelo de negócios das empresas vem se transformando e, consequentemente,


aumentando a busca por ferramentas de BI para atender a demanda de gerenciamento das
informações, pois elas impactam diretamente no processo de tomada de decisão.

219
Módulo: Programação de Sistemas

Os conceitos de Big Data e BI são convergentes, levando alguns pesquisadores e técnicos a


considerar as duas concepções como uma apenas.

Big Data é um conjunto de tecnologias voltadas para a gestão de grandes volumes de dados em
diferentes formatos, tem como características possibilitar a gestão dos dados em grande velocidade
de processamento, mas não se refere especificamente à sua organização, nem à rastreabilidade dos
dados processados.

O conceito vem evoluindo nos últimos dez anos e a sua origem está no BI, que é o resultado do
processo de mineração de dados analíticos voltados para a combinação de dados, aporte de
comentários, formatação de metadados e de conteúdo a serem usados no processo decisório.

O BI é um conceito que surgiu com o propósito de realizar a integração e extração de dados de variadas
fontes homogêneas e heterogêneas, e posteriormente efetuar a transformação desses dados obtidos
em informações de valor para conhecimento organizacional, valorização da experiência, e a contínua
pesquisa por relações de causa e efeito de riscos em projetos, com base em hipóteses que darão
suporte para o desenvolvimento de ações rápidas e estratégias competitivas.

Para o autor, o BI representa as técnicas e habilidades que permitem gerar conhecimento para
empresas e gestores, a partir de dados e informações que até então não tinham muita relevância,
assim, pode-se afirmar que dados e informações no BI são tidas como matérias primas para o
desenvolvimento de novas percepções, soluções e padrões que auxiliam a melhores tomadas de
decisões nos negócios e projetos.

Na atualidade, qualquer empresa necessita de uma integração de seus dados e informações


procedente de sua cadeia de valor, e toda organização que utiliza o BI para resolver seus problemas
operacionais, pode beneficiar-se com a autonomia da gestão de negócios ou projetos ao planejar e
gerenciar, tanto dos riscos e ações estratégicas, como o processo de controle de mudanças.

Vantagens do BI

O BI proporciona alguns benefícios, como a expansão do conhecimento do negócio, assim como


uma melhor visão da variação do mercado com a perspectiva de novas oportunidades.

Uma das principais vantagens do Business Intelligence é que ele permite uma visão nova para a
organização buscar maior eficácia e maior competitividade no mercado com suas ferramentas de
análise e cruzamento de informações.

220
Módulo: Programação de Sistemas

O BI tem como vantagem sua tecnologia, que é capaz de superar a concorrência e, ao mesmo tempo,
atender às necessidades de informação dos gestores da organização.

O BI agiliza processos, diminui o desperdício de tempo e transforma dados em informações relevantes.


A implantação de uma ferramenta de BI consegue agilizar processos do negócio através de
automatização, extraindo dados, fazendo cruzamentos e análises, montando e enviando relatórios com
gráficos de forma automática e inteligente. O resultado das etapas que formam o BI pode estar
disponível de forma online, e ser acessado na nuvem.

Existem inúmeras outras vantagens na adoção de BI, como redução de retrabalho, informações
confiáveis, documentos padronizados e recebimento das informações em tempo real, entre outros.

Um dos principais benefícios do BI é a sua capacidade de fornecer informações confiáveis e precisas


em tempo real para as decisões, planejamento estratégico e para a sobrevivência organizacional.

Desvantagens do BI

Nem tudo são flores na área tecnológica. Muitas ferramentas acabam tendo impactos inesperados e
negativos na organização.

A principal desvantagem da aplicação do BI em pequenas e médias empresas é o alto custo da


ferramenta é a mais apontada. Muitas vezes estas empresas não possuem recursos financeiros
necessários para viabilizar o projeto.

Além disso, pode ser que seja necessária a adaptação de toda sua estrutura operacional para a
implantação do BI, gerando despesas de hardware e software, assim como despesas com mão-de-
obra especializada como contratação de programadores, analistas de BI, adaptação na estrutura de
segurança. O suporte tem custo elevado e a manutenção e atualização necessárias dos sistemas.

Muitos projetos não alcançam o sucesso por falta de foco da empresa e dos envolvidos no processo,
faltando maturidade da gestão para trabalhar com indicadores e múltiplas informações, que podem
acabar dificultando a análise estratégica. Em alguns casos é apontada uma curva de aprendizado lenta
e prejudicial para o sucesso do BI na organização.

Assim, o BI é importante ao suprir a necessidade de qualidade de informações que auxiliem o gestor


no momento de decidir sobre algo. Nesse contexto, as tecnologias da informação, mais
especificamente o BI assumem papel preponderante no tocante ao suporte aos tomadores de
decisões, que sempre estão em busca de diferenciais competitivos para sua empresa e projetos.

Modelagem de dados

221
Módulo: Programação de Sistemas

De um modo geral, um modelo é uma abstração e reflexão do mundo real. A modelagem nos dá a
capacidade de visualizar o que ainda não conseguimos perceber. É o mesmo com modelagem de
dados. O objetivo principal de um modelo de dados é garantir que todos os objetos de dados exigidos
pela empresa são representados de maneira precisa e completa.

Da perspectiva de negócios, um modelo de dados pode ser facilmente verificado porque o modelo é
construído usando notações e linguagem que são fáceis de entender e decifrar.

No entanto, do ponto de vista técnico, o modelo de dados também é detalhado o suficiente para serve
como um modelo para o DBA ao criar o banco de dados físico. Por exemplo, o modelo pode ser
facilmente usado para definir os elementos-chave, como as chaves primárias, chaves estrangeiras e
tabelas que serão usadas no design dos dados estrutura.

Modelos de dados são sobre captura e apresentação de informações. Toda organização tem
informações que normalmente estão no formato operacional (como OLTP aplicativos) ou o formulário
informativo (como o data warehouse).

Tradicionalmente, os modeladores de dados utilizaram o diagrama E / R, desenvolvido parte do


processo de modelagem de dados, como uma mídia de comunicação com o negócio analistas. O foco
do modelo de E / R é capturar as relações entre várias entidades da organização ou processo para o
qual projetamos o modelo.

O diagrama E / R é uma ferramenta que pode ajudar na análise de requisitos de negócios e no design
da estrutura de dados resultante.

No entanto, o foco do modelo dimensional está nos negócios. Modelagem dimensional nos dá uma
capacidade melhorada para visualizar as questões muito abstratas que os analistas de negócios são
obrigados a responder. Utilizando modelagem dimensional os analistas podem facilmente entender e
navegar na estrutura de dados e explorar completamente os dados. Na verdade, os dados são
simplesmente um registro de todas as atividades de negócios, recursos e resultados da organização.
O modelo de dados é um modelo bem organizado abstração desses dados. Então, é bastante natural
que o modelo de dados tenha se tornado melhor método para entender e gerenciar os negócios da
organização. Sem um modelo de dados, seria muito difícil organizar a estrutura o conteúdo dos dados
no data warehouse.

222
Módulo: Programação de Sistemas

Modelagem dimensional

Um modelo dimensional também é comumente chamado de esquema em estrela. Este tipo de modelo
é muito popular no data warehousing porque pode fornecer consultas muito melhores desempenho,
especialmente em consultas muito grandes, do que um modelo E / R. no entanto também tem o maior
benefício de ser mais fácil de entender. Consiste, tipicamente, de uma grande tabela de fatos
(conhecida como tabela de fatos), com várias outras tabelas em torno dele que contém dados
descritivos, chamados dimensões. Quando é desenhado, assemelha-se à forma de uma estrela,
portanto, o nome.

Características da tabela fato

A tabela de fatos contém valores numéricos do que você pode medir. Por exemplo, um valor de fato
de 20 pode significar que 20 itens foram vendidos. Cada tabela de fatos contém as chaves para as
tabelas de dimensões associadas. Essas são chamadas chaves estrangeiras na tabela de fatos.
Tabelas de fatos geralmente contêm um pequeno número de colunas. Comparado às tabelas de
dimensão, as tabelas de fatos possuem um grande número de linhas. As informações em uma tabela
de fatos possuem características, como:

• É numérica e usada para gerar agregados e resumos. Os valores de dados precisam ser
aditivos ou semi-aditivos para permitir resumo de muitos valores.
• Todos os fatos no Segmento 2 devem referir-se diretamente às chaves de dimensão Segmento
1 da estrutura, permite o acesso a informações adicionais das tabelas de dimensão.

223
Módulo: Programação de Sistemas

Atividades

1. O que é BI?
2. Em quais situações o uso do BI nas empresas é indicado?
3. Qual o ganho que as ferramentas de BI podem trazer para as empresas?
4. Quais as principais características de um BI.
5. Qual é a diferença entre tabela Fato e tabela Dimensão?
6. Como as tabelas fato e dimensão se relacionam?
7. Explique o que é modelo estrela.
8. Explique o que é modelo snow flake ou floco de neve.
9. Qual a importância do modelo estrela para o uso do BI?
10. Quais as vantagens do BI?

224
Módulo: Programação de Sistemas

REFERÊNCIAS BIBLIOGRÁFICAS

ABITEBOUL, Serge. Et al. Gerenciando dados na Web. Rio de Janeiro. Campus, 2010.

ALBERTIN, Alberto Luiz. Et al. Tecnologia da Informação. São Paulo. Atlas, 2004.

BASTOS, Alberto Mourão. Et. Al. Linguagem C Programação e Aplicações. Rio de Janeiro, LTC –
Livros Técnicos e Científicos, 1987.

DEITEL, H. M. Java como programar. Porto Alegre, Bookman, 2001.

FERRAZ, Inhaúma Neves. Programação com arquivos. Barueri-SP. Manole, 2003.

FOROUZAN, Behrouz. Et al. Fundamentos da ciência da computação- Tradução da segunda edição


internacional: São Paulo-SP. Cengage learning, 2011.

HOLZNER, Steven. Visual Basic 6 - Programação Básica, 1999.

NITZ, Marcello. Et al. Mathcad 12: guia prático. São Paulo. Érica. 1ª Ed, 2005.

STUART, Brian L. Princípios de sistemas operacionais – Projetos e aplicações: São Paulo- SP.
Cengage Learning, 2011.

225

Você também pode gostar