📘 CodingMarble Learn

Programação avançada e aplicações

Programação avançada é escolher a estrutura de dados certa (array, lista encadeada, pilha, fila), escrever e testar código em uma IDE, criar gráficos e animações, usar funções de planilha e guardar dados com segurança em um banco de dados relacional que você consulta com SQL.

🎬 História passo a passo

  1. Um array tem um número fixo de posições, aqui seis. O tamanho é decidido antes. Se ele encher, não dá para colocar mais nada.
  2. Uma lista encadeada cresce quando precisa. Cada nó guarda um valor e um link para o próximo. O último aponta para nada (null). Aperte Adicionar.
  3. Uma pilha funciona como uma pilha de pratos. Você coloca (push) no topo e tira (pop) do topo. O último que entra é o primeiro que sai.
  4. Uma fila funciona como a fila do ingresso. Você entra no fim e sai pela frente. O primeiro que entra é o primeiro que sai.
  5. Um banco de dados guarda os dados em tabelas. Duas tabelas se ligam por uma chave, o id. Uma consulta SQL escolhe só as linhas que você quer, aqui notas a partir de 50.
  6. Sua vez. Escolha lista, pilha ou fila e aperte os botões para adicionar e remover itens.

Dica: arraste a cena 3D para girar. Use dois dedos para dar zoom.

🤔 Dúvidas comuns, esclarecidas

Por que não consigo adicionar um sétimo item ao array?

O tamanho de um array é fixo desde que ele é criado. No passo 0, as seis posições são o array inteiro. Para uma coleção que cresce, use uma lista.

Onde a lista encadeada guarda a ordem?

Nos links. Cada nó conhece só o próximo, então você anda seguindo as setas. Veja o passo 1.

Por que o pop devolve o último item que adicionei?

Uma pilha tem uma só ponta aberta, o topo. O item mais novo fica no topo, então é o primeiro a sair. Veja o passo 2.

Como a fila é diferente da pilha?

Na fila você adiciona no fim e remove pela frente, então o mais antigo sai primeiro. Aperte os botões no passo 3.

Por que usar duas tabelas e não uma?

Para guardar cada fato uma só vez. Os nomes ficam em uma tabela e as notas em outra, ligadas pelo id. Assim, para corrigir um nome basta mudar em um lugar só. Veja o passo 4.

Qual estrutura devo usar?

Precisa de tamanho fixo e acesso rápido por índice: array. Coleção que cresce: lista. Desfazer e voltar: pilha. Fila de espera: fila. Teste cada uma no passo 5.

Estruturas de dados: array, lista encadeada, pilha, fila

Uma estrutura de dados é um jeito de organizar os dados para o programa usá-los de forma rápida e fácil.

As bibliotecas já trazem essas ferramentas. No Python, uma list funciona como pilha (append, pop) e collections.deque funciona como uma fila rápida. Use a biblioteca quando ela existir; não reescreva o que já está pronto.

stack = []
stack.append(5); stack.append(8)
stack.pop()      # gives 8
from collections import deque
q = deque([4, 9]); q.append(2)
q.popleft()      # gives 4

Usando uma IDE: escrever, executar, testar

Uma IDE (ambiente de desenvolvimento integrado) reúne editor, botão de executar, depurador e ferramentas em um só lugar. Ela colore o código, sugere nomes e mostra os erros enquanto você digita.

Visualização e animação em 2D e 3D

Imagens nos ajudam a ver padrões. Os programas podem desenhar gráficos (de barras, de linhas, de dispersão), desenhos em 2D e cenas em 3D. Uma animação é o mesmo desenho refeito várias vezes, com uma pequena mudança a cada vez (cerca de 30 a 60 vezes por segundo). Um jeito simples: guarde uma variável como x, some um pouco a ela a cada quadro e redesenhe. O 3D desta página é feito do mesmo modo, com uma biblioteca 3D.

Funções avançadas de planilha

As planilhas fazem trabalho de programa com funções:

Bancos de dados relacionais e SQL

Um banco de dados relacional guarda os dados em tabelas de linhas e colunas. Cada tabela tem uma chave primária, uma coluna cujos valores são únicos (o id). Outra tabela usa esse valor como chave estrangeira para se ligar a ela. Um bom projeto guarda cada fato uma só vez, sem dados repetidos.

SQL é a linguagem para fazer perguntas e alterar dados:

SELECT name, score FROM students
JOIN marks ON students.id = marks.id
WHERE score >= 50 ORDER BY score DESC;

INSERT INTO marks (id, score) VALUES (5, 67);
UPDATE marks SET score = 55 WHERE id = 2;
DELETE FROM marks WHERE id = 5;

Integridade significa que os dados continuam corretos: as chaves são únicas, uma chave estrangeira precisa apontar para uma linha real e os valores têm de ter o tipo certo. Segurança significa senhas para os usuários, dar a cada usuário só os direitos de que ele precisa, fazer backups e nunca montar o SQL juntando o texto do usuário à consulta (use parâmetros), o que evita a injeção de SQL.

Contribuindo com recursos abertos

Muitas ferramentas e bibliotecas são de código aberto (open source): qualquer pessoa pode ler, usar e melhorar, de acordo com uma licença. Você pode ajudar corrigindo um erro, melhorando um guia, traduzindo uma página ou acrescentando um exemplo. Leia sempre a licença, dê os créditos e escreva mensagens claras e educadas ao sugerir uma mudança.

Experimente

No passo 5 do 3D, faça push de 3 itens em uma pilha e depois pop neles. Anote a ordem. Faça o mesmo com uma fila. Depois, primeiro preveja e só depois confira: se você adicionar 4, 9 e 2 e remover um item, que valor sobra na frente da fila e no topo da pilha?

Fórmulas e definições principais

Exemplos resolvidos

1. Os itens 5, 8 e 2 entram em uma pilha nessa ordem. Depois é feito pop duas vezes. O que está no topo agora?

Pilha depois dos pushes: 5, 8, 2 (o 2 no topo). O pop tira o 2 e depois o 8. Sobra: 5. Topo = 5.

2. Os itens 4, 9, 2 entram em uma fila nessa ordem. Faz-se um dequeue. Qual item está na frente agora?

O primeiro a entrar sai, então o 4 é removido. A frente é o 9.

3. Tabela de notas: ids de 1 a 4 com notas 72, 45, 88, 51. Quantas linhas WHERE score >= 50 devolve?

72, 88 e 51 são 50 ou mais. São 3 linhas.

4. As células B2:B5 têm 72, 45, 88, 51. Quanto dá =SUMIF(B2:B5,">=50")?

Ela soma só 72, 88 e 51: 72 + 88 + 51 = 211.

5. Por que usar uma pilha para verificar parênteses como ( [ ] ) em uma expressão?

Faça push de cada parêntese que abre. Quando vier um que fecha, faça pop e confira se combina. O último que abriu tem de ser o primeiro a fechar (LIFO), e é isso que a pilha oferece. Se a pilha estiver vazia no fim, os parênteses combinam.

Erros comuns

Quiz de prática

1. Qual estrutura é LIFO?
2. Qual estrutura cresce um nó por vez, ligado por links?
3. No SQL, qual cláusula escolhe as linhas que seguem uma regra?
4. Uma coluna com valor único em cada linha é uma:
5. O que faz um breakpoint no depurador?

Prática: responda você mesmo

Digite ou escolha sua resposta e aperte Conferir. Use a dica se travar; a solução completa aparece depois que você responder.

Perguntas frequentes

Qual é a diferença entre um array e uma lista encadeada?

Um array tem tamanho fixo e deixa você pular direto para qualquer item pelo índice. Uma lista encadeada pode crescer e encolher, mas você precisa seguir os links um a um para chegar a um item.

O que são chave primária e chave estrangeira?

A chave primária é uma coluna que dá a cada linha um valor único, como um número de matrícula. A chave estrangeira é uma coluna de outra tabela que guarda esse valor para ligar as duas tabelas.

Por que a injeção de SQL é perigosa e como evitá-la?

Se você cola o texto do usuário direto em um comando SQL, uma pessoa esperta pode acrescentar comandos próprios e ler ou apagar dados. Use consultas parametrizadas, para que o texto seja sempre tratado só como dado.

Aprenda antes

Aprenda depois