PDS e Metodologias Ágeis
Levantamento de Requisitos

Este trabalho simula o dialogo entre um vendedor e um programador.

🟣 Entrevista 1 — Primeira Reunião (Levantamento Inicial)

CLIENTE:
Oi, tudo bem? Então… eu queria fazer um site pra minha loja de açaí, sabe? Um site bonito, que apareça as fotos dos potes bem cheios, com aquelas coberturas caindo assim…

Programador:
Oi, tudo ótimo! Ah, entendi, você quer um site que destaque bem as imagens dos seus produtos, certo?

CLIENTE:
Isso! E queria também que desse pra pessoa montar o açaí dela… tipo, ela escolhe o tamanho, os adicionais, põe leite condensado, paçoca… essas coisas.

Programador:
Entendi. Então seriam dois tipos de venda: produtos prontos (como um açaí tradicional 500ml) e o cliente montando o seu próprio açaí.

CLIENTE:
Exatamente! E sabe o que seria legal? Se tivesse música tocando no site!

Programador:
(risos) Música? Podemos pensar em colocar, mas talvez isso atrapalhe um pouco a navegação, sabe?
Você quer focar em vender ou fazer algo mais descontraído?

CLIENTE:
Ah, é… melhor vender né? Então esquece a música!

Programador:
Certo! Sobre os pedidos: como você quer receber? O cliente paga no site ou paga na hora?

CLIENTE:
Olha, ainda tô começando… queria que ele só mandasse o pedido. Daí eu confirmo no WhatsApp e combino o pagamento.

Programador:
Ok, pedido sem pagamento online. E você quer controlar o estoque também?

CLIENTE:
Estoque? Ah… seria bom saber quando tá acabando leite condensado, paçoca… Mas não precisa ser complicado, não. Se não der, deixa pra depois.

Programador:
Tudo bem, vou anotar como “controle simples de estoque” pra uma segunda fase.

CLIENTE:
Isso!


🟣 Entrevista 2 — Definindo o Básico (com mais detalhes)

Programador:
Oi, voltei! Organizei algumas ideias pra gente confirmar.

CLIENTE:
Ótimo! Vamos ver!

Programador:
Sobre os produtos: você quer cadastrar o nome do açaí, o preço, o tamanho (ex: 300ml, 500ml) e colocar uma foto. Correto?

CLIENTE:
Certo. Mas às vezes eu quero fazer promoções! Tipo, “Compre um de 500ml e ganhe uma granola grátis.”

Programador:
Entendi. Promoções podem ser configuradas também, mas talvez num segundo momento, combinado?

CLIENTE:
Tá bom! Primeiro vamos focar no básico.

Programador:
Sobre os adicionais: vamos ter uma listinha? Tipo: Banana, Paçoca, Leite condensado… cada um com um preço.

CLIENTE:
Sim! E às vezes eu queria dar adicionais grátis em dias especiais, tipo “sexta-feira da banana grátis”.

Programador:
Ok, posso deixar espaço para adicionar promoções depois. No momento, vamos focar no cliente escolher os adicionais e adicionar ao pedido.

CLIENTE:
Perfeito.

Programador:
Agora: o pedido.
O cliente seleciona o produto, escolhe os adicionais e informa o nome e telefone para contato, certo?

CLIENTE:
Isso! E o bairro também, né? Vai que eu começo a entregar…

Programador:
Boa ideia. Vamos incluir campo para Bairro também.

CLIENTE:
Ah, e se a pessoa quiser pedir dois açaís diferentes no mesmo pedido?

Programador:
Ótimo ponto. Então vamos deixar o carrinho com possibilidade de adicionar mais de um produto.


🟣 Entrevista 3 — Confirmando Tudo (com cliente viajando um pouco)

Programador:
Oi, tudo certo? Vim só pra validar antes de começar!

CLIENTE:
Opa! Tô animado!

Programador:
Então vamos lá:
No site, o cliente vai poder:

  • Ver a lista de produtos
  • Ver os adicionais
  • Escolher o produto e o tamanho
  • Escolher adicionais
  • Adicionar ao carrinho
  • Informar nome, telefone e bairro
  • Confirmar pedido
  • E o pedido vai pro seu WhatsApp.

CLIENTE:
Show! E se der, eu queria que o site piscasse alguma coisa, tipo uma estrela, quando a pessoa confirmasse o pedido!

Programador:
(risos) Vamos fazer uma mensagem de “Pedido enviado com sucesso”, pode ser?

CLIENTE:
Tá ótimo! Estrela piscando era bobagem minha, esquece!

Programador:
Beleza. Sobre o controle dos produtos: você vai conseguir acessar um painel pra:

  • Cadastrar novo açaí
  • Alterar preço
  • Cadastrar novos adicionais
  • Alterar fotos

CLIENTE:
Ahhh, legal! Quero também poder desativar um produto, tipo “acabou”, sem apagar tudo.

Programador:
Perfeito, vou colocar a opção de deixar um produto inativo.

CLIENTE:
E se eu mudar de ideia e quiser cobrar o pedido online?

Programador:
A gente consegue adicionar depois. Por enquanto vamos deixar como “pedido via WhatsApp” mesmo.

CLIENTE:
Combinado!

PDS e Metodologias Ágeis
PDS e Metodologias Ágeis

Resumo: Programação, Testes e Modelagem de Sistemas

1. Programação Orientada a Objetos com Python

Conceitos-chave:

  • Classes e Objetos:
    Uma classe é um molde; o objeto é o produto. Classes definem atributos (características) e métodos (ações).
  • Encapsulamento:
    Técnica que protege os dados dentro de uma classe, permitindo acesso controlado através de getters (leitura) e setters (modificação).

Aplicações práticas:

  • Criação de softwares modulares e organizados.
  • Utilização de boas práticas como separação de responsabilidades, reutilização de código e manutenção mais fácil.

Exemplos:

  • Criar uma classe Carro com atributos como cor e métodos como acelerar().

Boas práticas destacadas:

  • Utilizar convenções de encapsulamento (_atributo).
  • Planejar o código com esboços no papel antes da implementação.

2. Testes Não Funcionais: Desempenho, Segurança e Usabilidade

Desempenho

  • Testes de carga e stress:
    Avaliam se o sistema suporta alta demanda (ex.: Black Friday).
  • Otimização de recursos:
    Melhor uso de memória, CPU e armazenamento, como fazem Netflix e Spotify.
  • Monitoramento contínuo:
    Ferramentas como Google Analytics analisam o desempenho em tempo real.

Segurança

  • Testes de invasão (PenTest) e vulnerabilidade:
    Simulam ataques para descobrir falhas.
  • Autenticação e Autorização:
    Como o uso de 2FA (Autenticação de dois fatores).
  • Compliance:
    Seguir normas como GDPR para proteger dados dos usuários.

Exemplo real:
O ataque à Sony Pictures (2014) mostrou falhas como falta de 2FA e servidores desatualizados.

Usabilidade

  • Avaliação heurística:
    Avaliar a facilidade de uso seguindo princípios como os de Nielsen.
  • Testes com usuários reais:
    Observar o uso prático para melhorar a experiência.
  • Acessibilidade:
    Tornar sistemas usáveis para todos, como faz a Apple com seus recursos para deficientes.

3. Diagramas de Casos de Uso (UML)

Exemplo de diagrama de caso de uso: Referencia: https://medium.com/operacionalti/uml-diagrama-de-casos-de-uso-29f4358ce4d5

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

O que são:

  • Diagramas que mostram como os usuários (atores) interagem com o sistema.
  • Representam funcionalidades e ajudam no entendimento, planejamento e comunicação do sistema.

Componentes principais:

  • Atores: quem usa (pessoas ou outros sistemas).
  • Casos de uso: o que o sistema faz para atender o ator.
  • Relacionamentos: associação, inclusão e extensão.

Exemplos:

  • E-commerce: Cliente compra produtos; administrador gerencia estoque.
  • Sistema bancário: Cliente faz saques e consultas.
  • Educação: Aluno assiste aula, professor publica material.

Importância prática:

  • Clarificam requisitos e interações antes da programação.
  • Ajudam a prever problemas e definir prioridades de desenvolvimento.

Resumo Final para Aula

TemaPontos PrincipaisExemplos Reais
Programação O.O.Classes, Objetos, EncapsulamentoPython (classe Carro)
Testes Não FuncionaisCarga, Segurança, UsabilidadeNetflix, Sony Pictures
Diagramas de Casos de UsoVisualizar ações do sistemaE-commerce, Saúde, Educação

💬 Sugestão de abordagem com os alunos:

“Hoje vamos aprender como construir softwares organizados, seguros e fáceis de usar, entendendo como desenhar, testar e programar melhor!”

Resumo Elaborado: Programação, Modelagem de Dados e Requisitos de Software


1. Diagramas UML: Casos de Uso, Classes e Sequências

Diagramas de Casos de Uso ​​

  • Representam as funcionalidades que o sistema oferece e como os usuários (atores) interagem com ele.
  • Principais elementos:
    • Atores: Pessoas ou sistemas externos que usam o sistema.
    • Casos de uso: Ações realizadas pelo sistema.
    • Relacionamentos: Mostram como atores e casos de uso se conectam.
  • Aplicações práticas: e-commerce, bancos, sistemas de ensino.
  • Objetivo: Melhorar a comunicação entre desenvolvedores, clientes e usuários.

Diagramas de Classes

referencia: https://slideplayer.com.br/slide/13956163/

  • Representam a estrutura estática do sistema.
  • Cada classe mostra seus atributos (informações) e métodos (ações que podem ser realizadas).
  • Exemplo: Classe “Usuário” com atributos como nome, email e métodos como logar().

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

Diagramas de Sequência

Referencia: https://medium.com/documenta%C3%A7ao-uml/introdu%C3%A7%C3%A3o-ao-diagrama-de-sequ%C3%AAncia-1ea5e9563594

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

  • Mostram como os objetos interagem no tempo para realizar funções.
  • Utilizados para representar o fluxo de mensagens entre usuários, sistemas e bases de dados.
  • Exemplo: Usuário adiciona produto ao carrinho → Sistema processa → Estoque é atualizado.


2. Modelagem de Dados Relacional ​​

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

Fundamentos:

  • Entidades: Representam objetos reais, como Clientes, Produtos, Pedidos.
  • Relacionamentos: Como esses objetos se conectam (ex.: Cliente faz Pedido).

Normalização dos dados:

  • 1ª Forma Normal (1NF): Cada campo com um único valor.
  • 2ª Forma Normal (2NF): Eliminar dependências parciais em chaves compostas.
  • 3ª Forma Normal (3NF): Eliminar dependências transitivas.

Melhores práticas:

  • Chaves primárias e chaves estrangeiras para manter integridade dos dados.
  • Indexação para melhorar a performance de consultas.
  • Monitoramento contínuo do banco para otimizar consultas grandes.

Exemplo de aplicação:

  • Em sistemas de vendas, é necessário dividir dados em tabelas como Clientes, Pedidos, Produtos para evitar repetição de informações.

3. Modelagem de Requisitos de Software ​​

Requisitos de Software:

  • Requisitos Funcionais:
    Descrevem o que o sistema faz (ex.: “Usuário pode se cadastrar”).
  • Requisitos Não Funcionais:
    Definem qualidades do sistema (ex.: “O sistema deve carregar em 2 segundos”).
  • Requisitos de Domínio:
    Específicos de uma área (ex.: um sistema médico que precisa seguir normas de saúde).

Levantamento de requisitos:

  • Técnicas: entrevistas, questionários, observação direta, workshops.
  • Ferramentas: UML, JIRA, Trello.

Documentação:

  • Especificação de Requisitos de Software (SRS): documento técnico detalhado.
  • User Stories (Histórias de Usuário):
    Exemplo: “Como cliente, quero adicionar produtos ao carrinho para finalizar minha compra.”

Requisitos em Metodologias Ágeis:

  • Flexibilidade:
    Permitem mudanças rápidas durante o desenvolvimento.
  • Priorização:
    Entregam primeiro o que é mais importante.
  • User Stories e Critérios de Aceitação:
    Validam se a funcionalidade foi entregue corretamente.

Quadro Resumo para Aula

TemaPontos PrincipaisExemplos
Diagramas de Casos de UsoComo o usuário interage com o sistemaLoja online, Banco, Escola
Diagramas de ClassesEstrutura de dados do sistemaCadastro de clientes
Diagramas de SequênciaOrdem de interação entre objetosCompra online
Modelagem de DadosOrganização eficiente de informaçõesBanco de dados de vendas
Modelagem de RequisitosO que o sistema faz e como deve se comportarCadastro rápido e seguro

Sugestão para Apresentação Oral

Você pode dizer algo assim:

“Hoje vamos conhecer ferramentas essenciais para criar sistemas modernos: vamos entender como desenhar os requisitos de um sistema, organizar seus dados, planejar suas funções e testar se tudo está funcionando corretamente.”

Tabela de Jargões e Significados

JargãoSignificado
UML (Unified Modeling Language)Linguagem usada para desenhar diagramas que explicam como um sistema funciona.
Diagrama de Casos de UsoDesenho que mostra o que o sistema faz e como os usuários (atores) interagem com ele.
AtorQuem interage com o sistema (pessoa, sistema ou dispositivo).
Caso de UsoAção ou funcionalidade que o sistema deve realizar.
Relacionamento (UML)Ligação entre atores e casos de uso ou entre casos de uso diferentes.
Diagrama de ClassesRepresentação das partes de um sistema: suas informações (atributos) e ações (métodos).
Diagrama de SequênciaMostra a ordem em que as ações acontecem entre os objetos de um sistema.
Linha de VidaRepresenta o tempo de vida de um objeto enquanto ele interage no sistema.
Mensagem SíncronaComunicação onde quem envia espera uma resposta antes de continuar.
Mensagem AssíncronaComunicação onde quem envia não precisa esperar resposta para continuar.
Modelagem de Dados RelacionalTécnica para organizar as informações em bancos de dados, evitando erros e repetição.
EntidadeRepresentação de um objeto ou conceito real (ex: cliente, produto).
Relacionamento (Dados)Conexão entre duas entidades no banco de dados.
NormalizaçãoProcesso para organizar os dados em tabelas de forma correta, evitando repetições.
Chave PrimáriaIdentificador único de cada registro numa tabela (ex: CPF de uma pessoa).
Chave EstrangeiraLigação entre duas tabelas diferentes.
User StoryPequena história escrita do ponto de vista do usuário dizendo o que ele precisa fazer.
Critério de AceitaçãoCondições que mostram que uma funcionalidade foi feita corretamente.
MoSCoWTécnica para priorizar tarefas: Must (deve ter), Should (deveria ter), Could (poderia ter), Won’t (não terá agora).
Levantamento de RequisitosProcesso de descobrir tudo o que o sistema precisa fazer.
SRS (Software Requirements Specification)Documento formal que descreve todos os requisitos do sistema.
Framework ÁgilModelo de trabalho que permite fazer entregas rápidas e adaptáveis no desenvolvimento de software.
CI/CD (Integração Contínua/Entrega Contínua)Técnicas para automatizar testes e entregas de novos códigos em sistemas de forma rápida e segura.
WorkshopReunião prática e interativa para resolver problemas ou levantar informações.
ProtótipoModelo simples de um sistema feito para testar ideias antes de fazer a versão final.
Elicitação de RequisitosColeta de informações necessárias para definir o que o sistema precisa fazer.

Resumo Geral para Apresentação — Sistemas, Modelagem e Testes


1. Modelagem de Dados Relacionais

  • Conceitos-chave:
    Entidades (como “Cliente” ou “Produto”), Relacionamentos e Normalização (1ª, 2ª e 3ª Formas Normais)​.
  • Objetivo:
    Garantir organização dos dados, evitando redundância e melhorando a integridade.
  • Exemplos:
    Cadastro de clientes, pedidos em lojas virtuais.

2. Modelagem de Dados Não Relacionais

  • Tipos de bancos:
    • Documentos: Estruturam informações como JSON (ex: MongoDB).
    • Grafos: Representam conexões complexas (ex: Redes Sociais)​.
    • Chave-Valor: Para acesso ultra rápido de informações, como sessões de usuários​.
  • Importância:
    Usados onde precisamos de alta escalabilidade, consultas rápidas ou análise de redes.

3. Diagramas UML: Casos de Uso, Classes e Sequências

  • Casos de Uso:
    Mostram como usuários interagem com o sistema​.
  • Classes:
    Estruturam informações e métodos em sistemas​​.
  • Sequência:
    Representam o fluxo temporal de interações entre objetos​​.
  • Exemplos práticos:
    E-commerce (Cliente → Carrinho → Pagamento → Estoque).

4. Requisitos de Software

  • Funcionais:
    Definem o que o sistema faz (ex: “Cadastrar usuário”).
  • Não Funcionais:
    Definem qualidades do sistema (ex: “Tempo de resposta menor que 2 segundos”).
  • User Stories:
    Pequenas histórias que ajudam a entender melhor o que o usuário precisa.

5. Testes de Software

Testes Funcionais

  • O que são:
    Verificam se o sistema cumpre seus requisitos.
  • Técnicas:
    • Caixa Preta (testar sem saber o código).
    • Testes de equivalência, valor-limite.
    • Automação de testes (ex: usando pytest).
  • Importância:
    Garante que o sistema faça exatamente o que foi prometido.

Testes Não Funcionais ​

  • Tipos:
    • Desempenho:
      Avalia velocidade, escalabilidade e estabilidade.
    • Segurança:
      Testa vulnerabilidades e proteção de dados.
    • Usabilidade:
      Garante facilidade de uso e compatibilidade com vários dispositivos.
  • Exemplos reais:
    • Black Friday: Testes de carga para aguentar milhões de acessos​.
    • Aplicativos bancários: Testes de segurança e compatibilidade em vários celulares​.

6. Planejamento e Gestão de Testes

  • Planejamento de Testes:
    Definição de escopo, cronograma e recursos necessários​.
  • Gestão de Defeitos:
    • Identificar.
    • Registrar (documentar claramente).
    • Monitorar (corrigir e validar).
  • Testes Ágeis:
    Testar continuamente usando integração contínua (CI/CD).

Resumo Final para Aula

TemaFocoExemplos
Modelagem RelacionalOrganização e estruturação de dadosBanco de dados de vendas
Modelagem Não RelacionalEficiência e escalabilidadeMongoDB, Redis, Neo4j
Diagramas UMLEntender funcionamento e interaçõesSistema de Compras Online
RequisitosDefinir o que fazer e como se comportarCadastrar usuário rapidamente
Testes FuncionaisVerificar se tudo funciona como planejadoCadastro de clientes
Testes Não FuncionaisGarantir qualidade, segurança e desempenhoTeste de carga em Black Friday

💬 Sugestão de Introdução para Apresentação:

“Hoje vamos explorar como projetar sistemas, organizar dados, definir funções e testar tudo para garantir que a tecnologia funcione de maneira rápida, segura e fácil de usar no nosso dia a dia.”

carreiras e competencias
Carreiras e Competências, resumo segundo semestre.

Tema principal:

Desenvolvimento profissional na área de Técnico em Desenvolvimento de Sistemas — explorando competências, planos de carreira e autoconhecimento.


[SIS]ANO1CCMB2S10A1 – Alternativas no mercado de trabalho e caminhos de carreira​

  • Carreira vs. Profissão:
    • Profissão é parte da carreira (analogia A ⊂ B de conjuntos).
  • Tipos de Carreira:
    • Tradicional (estável), Sem Fronteiras (flexível) e Exponencial (crescimento rápido).
  • Exemplos práticos:
    • Glória Maria (carreira tradicional).
    • Exemplos de desenvolvedores que seguiram caminhos diferentes.
  • Reflexão sobre escolha de carreira:
    • Importância de ser protagonista da própria trajetória.

[SIS]ANO1CCMB2S10A2 – Planos de carreira​

  • Definição de Plano de Carreira:
    • Metas e caminhos para o crescimento profissional.
  • Tipos de Plano de Carreira:
    • Linha (vertical, como serviço público/militar).
    • Paralelo (duas áreas ao mesmo tempo).
    • Rede (vários contatos e projetos).
    • Horizontal (sem hierarquia, com foco em habilidades).
    • Y (técnico ou gestor).
    • W (combinação técnico + gestão).
    • T (especialista em uma área + conhecimentos diversos).
  • Estudo de casos reais e exemplos fictícios:
    • Aplicação prática dos tipos de carreira.

[SIS]ANO1CCMB2S10A3 – Teste de Carreira​

  • Atividade prática:
    • Realização de um teste de carreira online para autoconhecimento.
  • Possíveis caminhos profissionais para Técnico em Desenvolvimento de Sistemas:
    • Web, mobile, QA, IA, consultoria, serviço público, educação, empreendedorismo.
  • Caminhos de carreira abordados:
    • Pública, Privada, Militar, Acadêmica, Autônoma, Política, Artística, Terceiro Setor e Empreendedora.

[SIS]ANO1CCMB2S9A1 – Desenvolvimento de Competências​

  • Conceito de habilidades técnicas (hard skills) e socioemocionais (soft skills):
    • Hard skills: programação, LGPD, frameworks ágeis.
    • Soft skills: resiliência, comunicação, gestão de tempo.
  • Importância de construir um perfil completo:
    • Aliar competências técnicas e socioemocionais para crescer na carreira.
  • Atividade prática:
    • Brainstorming de competências a partir de pesquisa no mercado de trabalho.

[SIS]ANO1CCMB2S9A2 – Metas SMART​

  • Como desenvolver habilidades e competências:
    • Educação formal, estágios, autoaprendizado.
  • Importância das soft skills:
    • Proatividade, adaptabilidade, consciência cultural, resiliência.
  • Metodologia SMART para definição de metas:
    • Específicas, Mensuráveis, Atribuíveis, Realistas e Temporais.
  • Atividade prática:
    • Jogo de priorização de metas.

[SIS]ANO1CCMB2S9A3 – Mapa Mental de Carreira​

  • Criação de plano de carreira em formato visual:
    • Usando matriz SWOT pessoal e planejamento estratégico.
  • Importância da mentalidade de crescimento:
    • Estar aberto a aprender e evoluir constantemente.
  • Sugestões de plataformas e cursos gratuitos:
    • Leapy, Sebrae, Escola Virtual Fundação Bradesco, FGV.

✨ PRINCIPAIS PONTOS FINAIS:

  • Carreira ≠ Profissão.
  • Existem múltiplas formas de traçar a carreira: linha, paralelo, Y, W, T, rede, horizontal.
  • Competências técnicas e socioemocionais são essenciais.
  • O autoconhecimento é base para o sucesso profissional.
  • Planejamento estratégico (como metas SMART) é fundamental.
  • A flexibilidade e a disposição para aprender são chaves para o futuro.

📚 RESUMO GERAL – Parte 2


[SIS]ANO1CCMB2S11A1 – Como construir um bom currículo​

  • Importância do Currículo:
    • Expressa quem você é profissionalmente.
    • Deve ser objetivo, direto e organizado.
  • Erros mais comuns:
    • Fotos inadequadas, fontes decorativas, inclusão de documentos pessoais, e-mail não profissional.
  • Currículo deve ser simples, de fácil leitura e conter informações relevantes.
  • Hoje em dia, softwares (ATS) filtram currículos automaticamente.

[SIS]ANO1CCMB2S11A2 – Desenvolvimento do currículo​

  • Tipos de Currículo:
    • Cronológico (ordem inversa de experiência).
    • Funcional (por habilidades).
    • Acadêmico (para pesquisa e educação).
  • Outros formatos:
    • Portfólios, LinkedIn e currículos online.
  • Dicas importantes:
    • Evitar erros, criar e-mail profissional, focar na clareza e na objetividade.

[SIS]ANO1CCMB2S11A3 – Preenchendo e finalizando o currículo​

  • Campos adicionados:
    • Experiência profissional, experiência extracurricular, formação complementar.
  • Importância do texto de apresentação ao enviar currículo.
  • Palavras-chave:
    • Adaptar o currículo usando palavras específicas das vagas.
  • Atividade prática:
    • Aplicar palavras-chave em currículos simulados.

[SIS]ANO1CCMB2S12A1 – Início da jornada empreendedora​

  • Do Sonho à Realidade:
    • Identificar sonhos, transformá-los em ideias, buscar oportunidades e definir metas e estratégias.
  • Exemplo real:
    • Edu Lyra e o projeto Gerando Falcões.
  • Ferramenta prática:
    • Matriz de priorização de ideias para escolher o problema a ser trabalhado.

[SIS]ANO1CCMB2S12A2 – Empreendedorismo social e os 5 porquês​

  • Empreendedorismo social:
    • Foca em gerar valor social (educação, saúde, meio ambiente).
  • Ferramenta dos 5 porquês:
    • Técnica para encontrar a causa raiz dos problemas.
  • Ligação com os ODS:
    • Relacionar problemas locais com os Objetivos de Desenvolvimento Sustentável da ONU.

[SIS]ANO1CCMB2S12A3 – Jornada Empreendedora: Construção e Desenvolvimento​

  • Etapas da Jornada:
    • Você (autoconhecimento).
    • Modelando (planejamento).
    • Decolando (implementação).
    • Operando (controle e operação).
    • Futuro (sustentabilidade e inovação).
  • Importância do Autoconhecimento:
    • Base para entender problemas e criar soluções.
  • Atividade prática:
    • Criar projetos de empreendedorismo social pensando também em sustentabilidade futura.

✨ Principais Lições Finais:

  • Carreira bem-sucedida exige planejamento, desenvolvimento contínuo de habilidades técnicas e socioemocionais.
  • Currículo é seu cartão de visitas: claro, objetivo, atualizado e adaptado para cada vaga.
  • Empreendedorismo social nasce da identificação de problemas e da criação de soluções sustentáveis.
  • Ferramentas como Metas SMART, 5 Porquês e Matriz SWOT são fundamentais para planejar e executar projetos.
  • Mentalidade de crescimento e resiliência são essenciais para evolução profissional e pessoal.

📚 Jargões e Expressões Técnicas

Jargão / TermoSignificado
AutoconhecimentoCapacidade de entender suas próprias emoções, pontos fortes, fraquezas e motivações. Fundamental para orientar a carreira e as decisões profissionais.
Hard SkillsSão habilidades técnicas comprováveis, como programação, uso de ferramentas, domínio de idiomas, etc.
Soft SkillsSão habilidades socioemocionais, como comunicação, trabalho em equipe, resiliência e liderança.
Power SkillsConjunto de habilidades altamente valorizadas no mercado atual, unindo técnicas e socioemocionais (ex.: pensamento crítico, criatividade, liderança adaptativa).
CompetênciasIntegração de conhecimentos, habilidades e atitudes que são aplicadas em situações de trabalho ou estudo.
Pitch pessoalApresentação rápida (normalmente de 30 segundos a 1 minuto) sobre quem você é, suas habilidades e o que busca profissionalmente.
Linha do tempo pessoalRepresentação gráfica dos principais eventos e conquistas da vida pessoal e profissional.
Matriz SWOT pessoalAnálise dos seus Pontos Fortes, Pontos Fracos, Oportunidades e Ameaças no seu desenvolvimento pessoal e profissional.
Mandala IkigaiFerramenta japonesa que ajuda a encontrar o propósito de vida, combinando o que você ama, sabe fazer, pode ser pago para fazer e o que o mundo precisa.
Pirâmide de MaslowRepresentação das necessidades humanas em níveis: necessidades básicas, segurança, sociais, estima e autorrealização.
BrainstormingTécnica de geração de ideias livremente, sem julgamentos, para explorar soluções ou identificar possibilidades.
Metas SMARTModelo para definir metas específicas, mensuráveis, atribuíveis (com responsáveis), realistas e temporais (com prazo).
Empreendedorismo SocialAto de criar negócios que tenham impacto positivo na sociedade, resolvendo problemas sociais ou ambientais.
Objetivos de Desenvolvimento Sustentável (ODS)Agenda global da ONU com 17 objetivos para erradicar a pobreza, proteger o planeta e garantir prosperidade para todos até 2030.
Técnica dos 5 PorquêsTécnica para descobrir a causa raiz de um problema, perguntando “por quê?” sucessivamente até chegar à origem do problema.
Matriz de PrioridadeFerramenta usada para comparar ideias ou projetos com base no impacto (alto ou baixo) e no custo (alto ou baixo).
Jornada do EmpreendedorConjunto de etapas que o empreendedor percorre: Você → Modelando → Decolando → Operando → Futuro.
Currículo CronológicoModelo de currículo organizado em ordem do trabalho mais recente para o mais antigo.
Currículo FuncionalModelo de currículo que destaca habilidades e competências mais que experiências cronológicas.
Currículo AcadêmicoModelo voltado para área de pesquisa, ensino e extensão, com ênfase em publicações e projetos.
ATS (Applicant Tracking System)Softwares usados pelas empresas para rastrear, ler e filtrar currículos automaticamente antes de serem analisados por um recrutador humano.
Palavras-chaveTermos estratégicos extraídos de descrições de vagas para adaptar currículos e facilitar sua aprovação nos sistemas automáticos.
Livro de CarreiraCaderno pessoal ou digital usado para registrar reflexões, atividades práticas, ideias de carreira e aprendizados.
Canvas PessoalVersão adaptada do Business Model Canvas para planejar sua vida ou carreira, organizando suas competências, paixões e objetivos.
PersonaRepresentação fictícia do público-alvo de um projeto ou produto, baseada em características reais.
NetworkingRede de contatos profissionais construída para apoio, troca de informações e oportunidades de trabalho.

✨ Observações:

Grande parte foca em planejamento, análise e ação estratégica tanto na construção da carreira quanto na criação de projetos sociais.

Muitos jargões envolvem carreira, empreendedorismo social e desenvolvimento pessoal.

[SIS]ANO1CCMB2S13A1 – Mapa de Empatia​

  • Empatia: Compreender sentimentos e perspectivas dos outros.
  • Mapa de Empatia: Ferramenta para entender o público-alvo, respondendo perguntas como: o que vê, sente, fala, faz, ouve e precisa.
  • Objetivo: Conhecer melhor a comunidade para criar projetos mais eficazes.

[SIS]ANO1CCMB2S13A2 – Business Model Canvas​

  • Business Model Canvas (BMC): Modelo visual de negócios dividido em 9 blocos (proposta de valor, segmentos de clientes, canais, relacionamento, fontes de receita, atividades-chave, recursos-chave, parcerias, custos).
  • Aplicação: Primeira parte do preenchimento focada na proposta de valor, público e canais.

[SIS]ANO1CCMB2S13A3 – Canvas de Negócios (continuação)​

  • Continuação do Canvas: Preenchimento dos blocos restantes: relacionamento com cliente, fontes de receita, recursos-chave, atividades-chave, parcerias e estrutura de custos.
  • Importância: Organizar visualmente o projeto antes da execução.

[SIS]ANO1CCMB2S14A1 – Educação Financeira​

  • Educação Financeira: Habilidade de gerenciar dinheiro de forma consciente.
  • Perfis financeiros: Poupador, gastador e desligado.
  • Quatro pilares da educação financeira: Reconhecer, Registrar, Revisar, Realizar.

[SIS]ANO1CCMB2S14A2 – Controle Financeiro e Ferramentas​

  • Controle financeiro: Necessidade de anotar receitas, gastos fixos, variáveis e analisar ao final do mês.
  • Ferramentas sugeridas: Bloco de notas, planilhas de Excel, aplicativos como MoneyWise e Sebrae.

[SIS]ANO1CCMB2S15A1 – Introdução ao Plano de Ação​

  • Plano de Ação: Documento que define as tarefas, responsáveis, prazos e recursos para alcançar metas.
  • Diferença Canvas x Plano de Ação: Canvas modela o negócio, plano de ação operacionaliza as metas.

[SIS]ANO1CCMB2S15A2 – Como montar um Plano de Ação​

  • 5 passos para Plano de Ação:
    • Definir objetivos.
    • Planejar estratégias.
    • Atribuir responsabilidades.
    • Criar cronograma.
    • Monitorar e ajustar.
  • Ferramenta 5W2H: Técnica de organização perguntando o quê, por quê, onde, quem, quando, como e quanto custa.

[SIS]ANO1CCMB2S15A3 – Execução prática do Plano de Ação​

  • Atividade prática: Organizar brainstorming em plano de ação com base na metodologia 5W2H.
  • Importância: Sair do campo das ideias e começar a execução dos projetos de forma organizada.

Principais temas reforçados nesses PDFs:

  • Empatia como chave para projetos sociais eficazes.
  • Planejamento de negócios com Canvas.
  • Educação financeira para estabilidade pessoal e empreendedora.
  • Construção e execução de planos de ação eficientes com ferramentas práticas.

[SIS]ANO1CCMB2S16A1 – Introdução ao LinkedIn​

  • História do LinkedIn: Criado em 2003, hoje tem mais de 1 bilhão de usuários e pertence à Microsoft.
  • Objetivos da plataforma: Conectar profissionais, facilitar networking, acompanhar tendências e buscar empregos.
  • Imagem profissional: Foto de perfil de boa qualidade e imagem de fundo bem escolhida são fundamentais para uma boa presença online.

[SIS]ANO1CCMB2S16A2 – Construção do Perfil no LinkedIn​

  • Cover Story: Pequeno vídeo de até 20 segundos apresentando quem você é profissionalmente.
  • Perfil inicial: Nome completo sem apelidos, foto profissional e título objetivo (exemplo: “Estagiário em Desenvolvimento de Sistemas”).
  • Importância do vídeo: Torna o perfil mais humano e atrativo para recrutadores.

[SIS]ANO1CCMB2S16A3 – Perfil Profissional Atrativo no LinkedIn​

  • Melhorias no perfil: Incluir resumo (sobre), experiências, formações, competências e certificados.
  • URL personalizada: Criar um endereço amigável para o perfil (ex.: linkedin.com/in/seunome).
  • Networking ativo: Participar de grupos, conectar-se com ex-alunos, professores, e recrutar recomendações.
  • Uso de recursos: Criar enquetes, interagir com a rede e sempre manter o perfil atualizado.

Principais temas desses PDFs:

  • Construir presença profissional forte no LinkedIn.
  • Valorizar a imagem pessoal e profissional.
  • Desenvolver networking estratégico para impulsionar oportunidades.
  • Atualizar sempre o perfil e usar recursos como enquetes, recomendações e o selo “Open to Work”.

📚 Novos Jargões e Termos Técnicos

Jargão / TermoSignificado
LinkedInRede social voltada para conexões profissionais, desenvolvimento de carreira e networking.
Cover Story (LinkedIn)Pequeno vídeo (até 20 segundos) que apresenta o profissional de maneira breve no perfil do LinkedIn.
Título Profissional (Headline)Linha abaixo do nome no LinkedIn, descrevendo a profissão ou área de atuação (ex.: “Técnico em Desenvolvimento de Sistemas”).
Open to WorkSelo do LinkedIn que indica que o usuário está disponível para novas oportunidades de trabalho.
URL Personalizada do LinkedInEndereço do perfil ajustado para ficar mais “limpo” e fácil de compartilhar (ex.: linkedin.com/in/maria-silva).
Resumo (About)Seção no perfil do LinkedIn usada para apresentar quem você é profissionalmente em até 3 parágrafos.
Endossos e RecomendaçõesValidações feitas por colegas, chefes ou parceiros sobre suas habilidades e competências no LinkedIn.
Networking EstratégicoConectar-se intencionalmente com profissionais e empresas que podem impulsionar sua carreira.
Enquetes no LinkedInFerramenta que permite criar pesquisas rápidas e interativas para gerar engajamento na rede.
Marca PessoalImagem e percepção pública construída a partir da maneira como você se apresenta, interage e compartilha conteúdo profissional.
Linha do Tempo (Timeline)Área do LinkedIn onde aparecem atualizações, posts e interações suas e da sua rede de contatos.
Salvar Perfil como PDFFuncionalidade que permite baixar seu perfil do LinkedIn como um arquivo PDF, útil para processos de recrutamento ou portfólio.
Postura Profissional OnlineComportamento adequado nas redes sociais profissionais, mantendo ética, respeito e linguagem apropriada.
Pitch Pessoal em VídeoPequeno discurso gravado em vídeo para apresentar rapidamente suas habilidades, objetivos e perfil profissional.

✨ Observações:

  • Estes novos termos estão muito focados no LinkedIn e na construção de imagem profissional online.
  • Estão totalmente alinhados ao tema de planejamento de carreira, marketing pessoal e busca de oportunidades.
Python SQLite
Finalizando a web api

Tutorial: Web Services em Python para Todas as Tabelas da Loja de Açaí

Neste tutorial, aprenderemos a criar uma API REST simples em Python utilizando o Flask para consumir as tabelas do banco de dados de uma loja de açaí. Serão abordadas as tabelas:

  • Clientes
  • Produtos
  • Materiais
  • Vendas
  • Consumo

Utilizaremos os verbos HTTP GET, POST, PUT e DELETE para realizar operações de leitura, criação, atualização e exclusão dos registros.


Requisitos

  • Python 3 instalado
  • Pacote Flask (instalável via pip install flask)
  • Banco de dados SQLite (loja_acai.db) já criado com as tabelas definidas conforme o tutorial anterior.

Estrutura das Tabelas

Para referência, veja abaixo a estrutura básica de cada tabela:


-- Clientes:
CREATE TABLE clientes (
  id_cliente INTEGER PRIMARY KEY AUTOINCREMENT,
  nome TEXT NOT NULL,
  telefone TEXT,
  email TEXT
);

-- Produtos:
CREATE TABLE produtos (
  id_produto INTEGER PRIMARY KEY AUTOINCREMENT,
  nome TEXT NOT NULL,
  preco REAL NOT NULL
);

-- Materiais:
CREATE TABLE materiais (
  id_material INTEGER PRIMARY KEY AUTOINCREMENT,
  nome TEXT NOT NULL,
  custo REAL
);

-- Vendas:
CREATE TABLE vendas (
  id_venda INTEGER PRIMARY KEY AUTOINCREMENT,
  id_cliente INTEGER,
  data_venda TEXT,
  total REAL,
  FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente)
);

-- Consumo:
CREATE TABLE consumo (
  id_consumo INTEGER PRIMARY KEY AUTOINCREMENT,
  id_venda INTEGER,
  id_produto INTEGER,
  quantidade INTEGER,
  FOREIGN KEY (id_venda) REFERENCES vendas(id_venda),
  FOREIGN KEY (id_produto) REFERENCES produtos(id_produto)
);

Com as tabelas criadas, já podemos construir nossa API.


Código Completo do Web Service

O código a seguir implementa os endpoints para cada uma das tabelas, seguindo o mesmo padrão para facilitar a manutenção e a compreensão:


from flask import Flask, request, jsonify, abort
import sqlite3

app = Flask(__name__)
DATABASE = 'loja_acai.db'  # Nome do banco de dados SQLite

def get_db():
    """Retorna uma conexão com o banco de dados configurada para retornar dicionários."""
    conn = sqlite3.connect(DATABASE)
    conn.row_factory = sqlite3.Row
    return conn

# ===================== Clientes =====================

@app.route('/clientes', methods=['GET'])
def get_clientes():
    conn = get_db()
    clientes = conn.execute("SELECT * FROM clientes").fetchall()
    conn.close()
    return jsonify([dict(row) for row in clientes])

@app.route('/clientes/<int:id>', methods=['GET'])
def get_cliente(id):
    conn = get_db()
    cliente = conn.execute("SELECT * FROM clientes WHERE id_cliente = ?", (id,)).fetchone()
    conn.close()
    if cliente is None:
        abort(404)
    return jsonify(dict(cliente))

@app.route('/clientes', methods=['POST'])
def create_cliente():
    if not request.json or 'nome' not in request.json:
        abort(400)
    cliente = {
        'nome': request.json['nome'],
        'telefone': request.json.get('telefone', ''),
        'email': request.json.get('email', '')
    }
    conn = get_db()
    cur = conn.cursor()
    cur.execute("INSERT INTO clientes (nome, telefone, email) VALUES (?, ?, ?)",
                (cliente['nome'], cliente['telefone'], cliente['email']))
    conn.commit()
    cliente['id_cliente'] = cur.lastrowid
    conn.close()
    return jsonify(cliente), 201

@app.route('/clientes/<int:id>', methods=['PUT'])
def update_cliente(id):
    if not request.json:
        abort(400)
    campos = []
    valores = []
    for campo in ['nome', 'telefone', 'email']:
        if campo in request.json:
            campos.append(f"{campo} = ?")
            valores.append(request.json[campo])
    if not campos:
        abort(400)
    valores.append(id)
    conn = get_db()
    conn.execute(f"UPDATE clientes SET {', '.join(campos)} WHERE id_cliente = ?", valores)
    conn.commit()
    conn.close()
    return jsonify({'result': True})

@app.route('/clientes/<int:id>', methods=['DELETE'])
def delete_cliente(id):
    conn = get_db()
    conn.execute("DELETE FROM clientes WHERE id_cliente = ?", (id,))
    conn.commit()
    conn.close()
    return jsonify({'result': True})

# ===================== Produtos =====================

@app.route('/produtos', methods=['GET'])
def get_produtos():
    conn = get_db()
    produtos = conn.execute("SELECT * FROM produtos").fetchall()
    conn.close()
    return jsonify([dict(row) for row in produtos])

@app.route('/produtos/<int:id>', methods=['GET'])
def get_produto(id):
    conn = get_db()
    produto = conn.execute("SELECT * FROM produtos WHERE id_produto = ?", (id,)).fetchone()
    conn.close()
    if produto is None:
        abort(404)
    return jsonify(dict(produto))

@app.route('/produtos', methods=['POST'])
def create_produto():
    if not request.json or 'nome' not in request.json or 'preco' not in request.json:
        abort(400)
    produto = {
        'nome': request.json['nome'],
        'preco': request.json['preco']
    }
    conn = get_db()
    cur = conn.cursor()
    cur.execute("INSERT INTO produtos (nome, preco) VALUES (?, ?)",
                (produto['nome'], produto['preco']))
    conn.commit()
    produto['id_produto'] = cur.lastrowid
    conn.close()
    return jsonify(produto), 201

@app.route('/produtos/<int:id>', methods=['PUT'])
def update_produto(id):
    if not request.json:
        abort(400)
    campos = []
    valores = []
    for campo in ['nome', 'preco']:
        if campo in request.json:
            campos.append(f"{campo} = ?")
            valores.append(request.json[campo])
    if not campos:
        abort(400)
    valores.append(id)
    conn = get_db()
    conn.execute(f"UPDATE produtos SET {', '.join(campos)} WHERE id_produto = ?", valores)
    conn.commit()
    conn.close()
    return jsonify({'result': True})

@app.route('/produtos/<int:id>', methods=['DELETE'])
def delete_produto(id):
    conn = get_db()
    conn.execute("DELETE FROM produtos WHERE id_produto = ?", (id,))
    conn.commit()
    conn.close()
    return jsonify({'result': True})

# ===================== Materiais =====================

@app.route('/materiais', methods=['GET'])
def get_materiais():
    conn = get_db()
    materiais = conn.execute("SELECT * FROM materiais").fetchall()
    conn.close()
    return jsonify([dict(row) for row in materiais])

@app.route('/materiais/<int:id>', methods=['GET'])
def get_material(id):
    conn = get_db()
    material = conn.execute("SELECT * FROM materiais WHERE id_material = ?", (id,)).fetchone()
    conn.close()
    if material is None:
        abort(404)
    return jsonify(dict(material))

@app.route('/materiais', methods=['POST'])
def create_material():
    if not request.json or 'nome' not in request.json:
        abort(400)
    material = {
        'nome': request.json['nome'],
        'custo': request.json.get('custo', 0.0)
    }
    conn = get_db()
    cur = conn.cursor()
    cur.execute("INSERT INTO materiais (nome, custo) VALUES (?, ?)",
                (material['nome'], material['custo']))
    conn.commit()
    material['id_material'] = cur.lastrowid
    conn.close()
    return jsonify(material), 201

@app.route('/materiais/<int:id>', methods=['PUT'])
def update_material(id):
    if not request.json:
        abort(400)
    campos = []
    valores = []
    for campo in ['nome', 'custo']:
        if campo in request.json:
            campos.append(f"{campo} = ?")
            valores.append(request.json[campo])
    if not campos:
        abort(400)
    valores.append(id)
    conn = get_db()
    conn.execute(f"UPDATE materiais SET {', '.join(campos)} WHERE id_material = ?", valores)
    conn.commit()
    conn.close()
    return jsonify({'result': True})

@app.route('/materiais/<int:id>', methods=['DELETE'])
def delete_material(id):
    conn = get_db()
    conn.execute("DELETE FROM materiais WHERE id_material = ?", (id,))
    conn.commit()
    conn.close()
    return jsonify({'result': True})

# ===================== Vendas =====================

@app.route('/vendas', methods=['GET'])
def get_vendas():
    conn = get_db()
    vendas = conn.execute("SELECT * FROM vendas").fetchall()
    conn.close()
    return jsonify([dict(row) for row in vendas])

@app.route('/vendas/<int:id>', methods=['GET'])
def get_venda(id):
    conn = get_db()
    venda = conn.execute("SELECT * FROM vendas WHERE id_venda = ?", (id,)).fetchone()
    conn.close()
    if venda is None:
        abort(404)
    return jsonify(dict(venda))

@app.route('/vendas', methods=['POST'])
def create_venda():
    if not request.json or 'id_cliente' not in request.json or 'data_venda' not in request.json or 'total' not in request.json:
        abort(400)
    venda = {
        'id_cliente': request.json['id_cliente'],
        'data_venda': request.json['data_venda'],
        'total': request.json['total']
    }
    conn = get_db()
    cur = conn.cursor()
    cur.execute("INSERT INTO vendas (id_cliente, data_venda, total) VALUES (?, ?, ?)",
                (venda['id_cliente'], venda['data_venda'], venda['total']))
    conn.commit()
    venda['id_venda'] = cur.lastrowid
    conn.close()
    return jsonify(venda), 201

@app.route('/vendas/<int:id>', methods=['PUT'])
def update_venda(id):
    if not request.json:
        abort(400)
    campos = []
    valores = []
    for campo in ['id_cliente', 'data_venda', 'total']:
        if campo in request.json:
            campos.append(f"{campo} = ?")
            valores.append(request.json[campo])
    if not campos:
        abort(400)
    valores.append(id)
    conn = get_db()
    conn.execute(f"UPDATE vendas SET {', '.join(campos)} WHERE id_venda = ?", valores)
    conn.commit()
    conn.close()
    return jsonify({'result': True})

@app.route('/vendas/<int:id>', methods=['DELETE'])
def delete_venda(id):
    conn = get_db()
    conn.execute("DELETE FROM vendas WHERE id_venda = ?", (id,))
    conn.commit()
    conn.close()
    return jsonify({'result': True})

# ===================== Consumo =====================

@app.route('/consumo', methods=['GET'])
def get_consumo():
    conn = get_db()
    consumos = conn.execute("SELECT * FROM consumo").fetchall()
    conn.close()
    return jsonify([dict(row) for row in consumos])

@app.route('/consumo/<int:id>', methods=['GET'])
def get_consumo_item(id):
    conn = get_db()
    consumo = conn.execute("SELECT * FROM consumo WHERE id_consumo = ?", (id,)).fetchone()
    conn.close()
    if consumo is None:
        abort(404)
    return jsonify(dict(consumo))

@app.route('/consumo', methods=['POST'])
def create_consumo():
    if not request.json or 'id_venda' not in request.json or 'id_produto' not in request.json or 'quantidade' not in request.json:
        abort(400)
    consumo = {
        'id_venda': request.json['id_venda'],
        'id_produto': request.json['id_produto'],
        'quantidade': request.json['quantidade']
    }
    conn = get_db()
    cur = conn.cursor()
    cur.execute("INSERT INTO consumo (id_venda, id_produto, quantidade) VALUES (?, ?, ?)",
                (consumo['id_venda'], consumo['id_produto'], consumo['quantidade']))
    conn.commit()
    consumo['id_consumo'] = cur.lastrowid
    conn.close()
    return jsonify(consumo), 201

@app.route('/consumo/<int:id>', methods=['PUT'])
def update_consumo(id):
    if not request.json:
        abort(400)
    campos = []
    valores = []
    for campo in ['id_venda', 'id_produto', 'quantidade']:
        if campo in request.json:
            campos.append(f"{campo} = ?")
            valores.append(request.json[campo])
    if not campos:
        abort(400)
    valores.append(id)
    conn = get_db()
    conn.execute(f"UPDATE consumo SET {', '.join(campos)} WHERE id_consumo = ?", valores)
    conn.commit()
    conn.close()
    return jsonify({'result': True})

@app.route('/consumo/<int:id>', methods=['DELETE'])
def delete_consumo(id):
    conn = get_db()
    conn.execute("DELETE FROM consumo WHERE id_consumo = ?", (id,))
    conn.commit()
    conn.close()
    return jsonify({'result': True})

if __name__ == '__main__':
    app.run(debug=True)

Entendendo os Verbos HTTP Utilizados

Nesta API, utilizamos os seguintes métodos HTTP:

  • GET: Recupera dados dos registros. Por exemplo, GET /clientes retorna todos os clientes e GET /clientes/<id> retorna um cliente específico.
  • POST: Cria um novo registro. Por exemplo, POST /produtos espera dados em JSON para criar um novo produto.
  • PUT: Atualiza um registro existente. Por exemplo, PUT /materiais/<id> atualiza as informações do material indicado.
  • DELETE: Remove um registro do banco. Exemplo: DELETE /vendas/<id> remove a venda informada.

Como Executar e Testar a API

Siga os passos abaixo para executar e testar a API:

  1. Salve o código em um arquivo, por exemplo, app.py.
  2. Verifique se o banco de dados loja_acai.db existe e está configurado com as tabelas apresentadas.
  3. Instale o Flask, se ainda não o fez: pip install flask
  4. Execute o aplicativo: python app.py
  5. Utilize ferramentas como Postman ou curl para testar cada endpoint.

Conclusão

Este tutorial demonstrou como criar web services em Python para consumir as tabelas de um banco de dados SQLite da loja de açaí, abrangendo as tabelas Clientes, Produtos, Materiais, Vendas e Consumo. Ao utilizar o Flask e os principais verbos HTTP, você obteve uma API REST simples e modular, facilitando a integração com outras aplicações.

Experimente testar cada endpoint e ajustar o código conforme as necessidades do seu projeto!

Python SQLite
Exemplo prático de Python para loja Açaí

Tutorial: Web Services em Python para a Tabela Clientes

Neste tutorial, vamos criar uma API REST simples em Python utilizando o Flask para consumir a tabela Clientes de um banco de dados SQLite. Você aprenderá como utilizar os principais verbos HTTP (GET, POST, PUT e DELETE) para realizar operações de leitura, criação, atualização e exclusão de registros.


Requisitos

  • Python 3 instalado
  • Pacote Flask (instalável via pip install flask)
  • Banco de dados SQLite já criado com a tabela clientes

Estrutura da Tabela Clientes

Considere que a tabela clientes foi criada com a seguinte estrutura:


CREATE TABLE clientes (
  id_cliente INTEGER PRIMARY KEY AUTOINCREMENT,
  nome TEXT NOT NULL,
  telefone TEXT,
  email TEXT
);

Código do Web Service

O código a seguir implementa uma API REST utilizando Flask. Ele define uma rota para cada operação (GET, POST, PUT e DELETE) na tabela clientes:


from flask import Flask, request, jsonify, abort
import sqlite3

app = Flask(__name__)
DATABASE = 'loja_acai.db'  # Nome do banco de dados SQLite

def get_db():
    """Abre uma conexão com o banco de dados e define o row_factory para retornar dicts."""
    conn = sqlite3.connect(DATABASE)
    conn.row_factory = sqlite3.Row
    return conn

# 1. GET /clientes - Retorna todos os clientes
@app.route('/clientes', methods=['GET'])
def get_clientes():
    conn = get_db()
    clientes = conn.execute("SELECT * FROM clientes").fetchall()
    conn.close()
    return jsonify([dict(row) for row in clientes])

# 2. GET /clientes/&lt;id&gt; - Retorna um cliente específico
@app.route('/clientes/&lt;int:id&gt;', methods=['GET'])
def get_cliente(id):
    conn = get_db()
    cliente = conn.execute("SELECT * FROM clientes WHERE id_cliente = ?", (id,)).fetchone()
    conn.close()
    if cliente is None:
        abort(404)
    return jsonify(dict(cliente))

# 3. POST /clientes - Cria um novo cliente
@app.route('/clientes', methods=['POST'])
def create_cliente():
    if not request.json or 'nome' not in request.json:
        abort(400)
    cliente = {
        'nome': request.json['nome'],
        'telefone': request.json.get('telefone', ''),
        'email': request.json.get('email', '')
    }
    conn = get_db()
    cur = conn.cursor()
    cur.execute("INSERT INTO clientes (nome, telefone, email) VALUES (?, ?, ?)",
                (cliente['nome'], cliente['telefone'], cliente['email']))
    conn.commit()
    cliente['id_cliente'] = cur.lastrowid
    conn.close()
    return jsonify(cliente), 201

# 4. PUT /clientes/&lt;id&gt; - Atualiza um cliente existente
@app.route('/clientes/&lt;int:id&gt;', methods=['PUT'])
def update_cliente(id):
    if not request.json:
        abort(400)
    campos = []
    valores = []
    for campo in ['nome', 'telefone', 'email']:
        if campo in request.json:
            campos.append(f"{campo} = ?")
            valores.append(request.json[campo])
    if not campos:
        abort(400)
    valores.append(id)
    conn = get_db()
    conn.execute(f"UPDATE clientes SET {', '.join(campos)} WHERE id_cliente = ?", valores)
    conn.commit()
    conn.close()
    return jsonify({'result': True})

# 5. DELETE /clientes/&lt;id&gt; - Remove um cliente
@app.route('/clientes/&lt;int:id&gt;', methods=['DELETE'])
def delete_cliente(id):
    conn = get_db()
    conn.execute("DELETE FROM clientes WHERE id_cliente = ?", (id,))
    conn.commit()
    conn.close()
    return jsonify({'result': True})

if __name__ == '__main__':
    app.run(debug=True)

Entendendo os Verbos HTTP

Neste exemplo, utilizamos os seguintes métodos HTTP:

  • GET: Utilizado para recuperar dados. Temos dois endpoints:
    • GET /clientes – retorna todos os clientes;
    • GET /clientes/<id> – retorna um cliente específico.
  • POST: Utilizado para criar um novo recurso. O endpoint POST /clientes recebe dados no formato JSON para inserir um novo cliente.
  • PUT: Utilizado para atualizar um recurso existente. O endpoint PUT /clientes/<id> recebe os campos que devem ser atualizados do cliente informado.
  • DELETE: Utilizado para remover um recurso. O endpoint DELETE /clientes/<id> exclui o cliente com o id informado.

Como Executar e Testar a API

Siga os passos abaixo para executar e testar a API:

  1. Salve o código em um arquivo, por exemplo, app.py.
  2. Certifique-se de que o banco de dados loja_acai.db existe e contém a tabela clientes.
  3. Instale o Flask se ainda não o fez: pip install flask
  4. Execute o aplicativo: python app.py
  5. Acesse os endpoints utilizando ferramentas como Postman ou o curl via linha de comando.

Conclusão

Este tutorial apresentou de forma didática como criar web services em Python para a tabela clientes utilizando Flask, explorando os verbos HTTP básicos necessários para a manipulação dos dados (GET, POST, PUT e DELETE). Essa estrutura pode ser facilmente expandida para incluir outras tabelas e funcionalidades em seu projeto.

Experimente testar e modificar os endpoints para adaptar à sua aplicação.

SQLite
Roteiro de exercícios auto aplicáveis

Roteiro de Exercícios Práticos com SQLite Studio para uma Loja de Açaí

Neste post, você encontrará um roteiro autoaplicado com 10 exercícios práticos para trabalhar com o SQLite Studio. Assumimos que o banco de dados já foi criado e abrimos o editor SQL para que você possa seguir cada passo, criando e manipulando tabelas relacionadas a uma loja de açaí: clientes, produtos, materiais, vendas e consumo.


Exercício 1: Criação das Tabelas

Objetivo: Criar a estrutura básica do banco de dados com as tabelas clientes, produtos, materiais, vendas e consumo.

Tarefa: Execute os comandos abaixo no editor SQL do SQLite Studio para definir as tabelas:


-- Tabela de Clientes
CREATE TABLE clientes (
  id_cliente INTEGER PRIMARY KEY AUTOINCREMENT,
  nome TEXT NOT NULL,
  telefone TEXT,
  email TEXT
);

-- Tabela de Produtos (opções de açaí)
CREATE TABLE produtos (
  id_produto INTEGER PRIMARY KEY AUTOINCREMENT,
  nome TEXT NOT NULL,
  preco REAL NOT NULL
);

-- Tabela de Materiais (ingredientes e insumos)
CREATE TABLE materiais (
  id_material INTEGER PRIMARY KEY AUTOINCREMENT,
  nome TEXT NOT NULL,
  custo REAL
);

-- Tabela de Vendas
CREATE TABLE vendas (
  id_venda INTEGER PRIMARY KEY AUTOINCREMENT,
  id_cliente INTEGER,
  data_venda TEXT,
  total REAL,
  FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente)
);

-- Tabela de Consumo (itens consumidos em cada venda)
CREATE TABLE consumo (
  id_consumo INTEGER PRIMARY KEY AUTOINCREMENT,
  id_venda INTEGER,
  id_produto INTEGER,
  quantidade INTEGER,
  FOREIGN KEY (id_venda) REFERENCES vendas(id_venda),
  FOREIGN KEY (id_produto) REFERENCES produtos(id_produto)
);

Dica: Execute os comandos um a um para verificar a criação correta de cada tabela.


Exercício 2: Inserção de Dados na Tabela de Clientes

Objetivo: Inserir registros para simular os clientes da loja.

Tarefa: Cadastre pelo menos 3 registros utilizando comandos INSERT INTO:


INSERT INTO clientes (nome, telefone, email) VALUES ('Ana Silva', '123456789', 'ana@gmail.com');
INSERT INTO clientes (nome, telefone, email) VALUES ('Bruno Souza', '987654321', 'bruno@hotmail.com');
INSERT INTO clientes (nome, telefone, email) VALUES ('Carlos Pereira', '555123456', 'carlos@exemplo.com');

Cada comando adiciona um cliente, enquanto o id_cliente é gerado automaticamente.


Exercício 3: Inserção de Dados na Tabela de Produtos

Objetivo: Cadastrar os produtos ofertados pela loja (por exemplo, diferentes tamanhos ou opções do açaí).

Tarefa: Insira registros com nome do produto e preço:


INSERT INTO produtos (nome, preco) VALUES ('Açaí Pequeno', 12.50);
INSERT INTO produtos (nome, preco) VALUES ('Açaí Médio', 18.00);
INSERT INTO produtos (nome, preco) VALUES ('Açaí Grande', 25.00);

Esses comandos simulam as diferentes porções de açaí oferecidas.


Exercício 4: Inserção de Dados na Tabela de Materiais

Objetivo: Registrar os ingredientes (materiais) utilizados na preparação dos produtos.

Tarefa: Cadastre os insumos com nome e custo:


INSERT INTO materiais (nome, custo) VALUES ('Polpa de Açaí', 5.00);
INSERT INTO materiais (nome, custo) VALUES ('Granola', 2.00);
INSERT INTO materiais (nome, custo) VALUES ('Leite Condensado', 3.00);

Cada material possui um custo que pode ser utilizado para cálculos financeiros e de lucratividade.


Exercício 5: Inserção de Registros na Tabela de Vendas

Objetivo: Registrar as vendas realizadas e associá-las aos clientes.

Tarefa: Insira registros de vendas, relacionando cada venda a um cliente, com data e valor total:


INSERT INTO vendas (id_cliente, data_venda, total) VALUES (1, '2025-04-10', 25.00);
INSERT INTO vendas (id_cliente, data_venda, total) VALUES (2, '2025-04-10', 18.00);

Observe que o id_cliente referencia um cliente já cadastrado, e a data segue o formato ‘YYYY-MM-DD’.


Exercício 6: Inserção de Registros na Tabela de Consumo

Objetivo: Associar cada venda aos produtos consumidos, detalhando a quantidade.

Tarefa: Registre os itens consumidos por venda:


INSERT INTO consumo (id_venda, id_produto, quantidade) VALUES (1, 3, 1);
INSERT INTO consumo (id_venda, id_produto, quantidade) VALUES (2, 2, 2);

Exemplo: A venda com id_venda = 1 incluiu 1 unidade do produto com id_produto = 3 (Açaí Grande), e a venda com id_venda = 2 registrou 2 unidades do produto com id_produto = 2.


Exercício 7: Consultas Simples (SELECT)

Objetivo: Visualizar os dados inseridos em cada tabela.

Tarefa: Crie consultas SELECT para mostrar todos os registros:


SELECT * FROM clientes;
SELECT * FROM produtos;
SELECT * FROM materiais;
SELECT * FROM vendas;
SELECT * FROM consumo;

Essas consultas permitem verificar a correta inserção dos dados.


Exercício 8: Consultas com JOIN

Objetivo: Unir dados de tabelas relacionadas, por exemplo, vincular clientes às suas vendas.

Tarefa: Crie uma consulta que mostre o ID da venda, nome do cliente, data e total da venda:


SELECT v.id_venda, c.nome AS Cliente, v.data_venda, v.total 
FROM vendas v
JOIN clientes c ON v.id_cliente = c.id_cliente;

O comando JOIN associa cada venda ao cliente correspondente, facilitando a visualização dos registros.


Exercício 9: Funções de Agregação

Objetivo: Utilizar funções de agregação para resumir informações dos dados.

Tarefa: Crie consultas para calcular:

  • O valor total de todas as vendas.
  • A média dos valores das vendas.

-- Total das Vendas:
SELECT SUM(total) AS Total_Vendas FROM vendas;

-- Média dos Valores das Vendas:
SELECT AVG(total) AS Media_Vendas FROM vendas;

Essas funções são úteis para análises gerenciais dos resultados de vendas.


Exercício 10: Atualização e Exclusão de Registros

Objetivo: Praticar comandos de modificação de dados com UPDATE e DELETE.

Tarefa: Realize as seguintes operações:

  1. Atualize o preço de um produto.
  2. Exclua um registro de cliente (por exemplo, um registro duplicado ou inativo).

-- Atualizar o preço do produto com id_produto = 2:
UPDATE produtos SET preco = 20.00 WHERE id_produto = 2;

-- Excluir um cliente específico (supondo que o cliente com id_cliente = 3 seja removido):
DELETE FROM clientes WHERE id_cliente = 3;

Revisar sempre as condições para evitar atualizações ou exclusões indesejadas.


Considerações Finais

Com esses 10 exercícios, você poderá explorar desde a criação das tabelas até consultas avançadas e manipulação de dados utilizando o SQLite Studio para um banco de dados fictício de uma loja de açaí. Aproveite para experimentar variações e aprofundar seus conhecimentos, criando índices, views ou novas relações entre as tabelas.

Bom estudo e prática!

SQLite
Introdução SQLite

Treinamento Integrado: História, SGBD, SQL, Python com SQLite e o Futuro dos Bancos de Dados

Bem-vindo(a)! Neste treinamento, vamos explorar como os dados são organizados e gerenciados – desde a sua história até as tendências que estão moldando o futuro dos bancos de dados.

1. Introdução

Neste treinamento, você vai conhecer os Sistemas de Gerenciamento de Banco de Dados (SGBDs), aprender a utilizar a linguagem SQL para manipular os dados, entender como o Python se integra com o SQLite e ainda conhecer um pouco da história dos bancos de dados, além de explorar as principais tendências para o futuro.

2. História dos Bancos de Dados

  • Inícios e Arquivos Planos: Nos primeiros dias da computação, os dados eram armazenados em arquivos simples (arquivos planos), o que dificultava a organização, consulta e segurança das informações.
  • Surgimento dos SGBDs: Na década de 1960, com o aumento da complexidade e volume de informações, surgiram os SGBDs para organizar os dados de forma estruturada e eficiente.
  • O Modelo Relacional: Na década de 1970, Edgar F. Codd introduziu o modelo relacional, que organizava os dados em tabelas e utilizava chaves para relacioná-las, revolucionando a forma de armazenar informações.
  • Padronização e Evolução do SQL: Com a popularização dos bancos de dados relacionais, a linguagem SQL foi padronizada, facilitando a comunicação entre os desenvolvedores e os bancos de dados.
  • Diversificação e Inovações: A partir dos anos 2000, novas abordagens surgiram, como os bancos de dados NoSQL e o SQLite, que oferecem maior flexibilidade e são ideais para aplicações mais leves.

3. Sistemas de Gerenciamento de Banco de Dados (SGBDs)

Um Sistema de Gerenciamento de Banco de Dados (SGBD) é um software que organiza, armazena e gerencia os dados, permitindo operações como inserção, consulta, atualização e exclusão de informações de forma segura e estruturada.

  • Organização dos Dados: Armazena as informações de maneira estruturada para fácil acesso.
  • Segurança: Possui mecanismos para controlar o acesso e proteger os dados.
  • Escalabilidade: Atende desde pequenos projetos até sistemas empresariais complexos.

Exemplos de SGBDs incluem: MySQL, PostgreSQL, Oracle, Microsoft SQL Server e, para aplicações mais leves, o SQLite.

4. SQL: A Linguagem de Consulta

A linguagem SQL (Structured Query Language) é o padrão para interagir com os bancos de dados. Com ela, é possível:

  • Consultar Dados: Exemplo: SELECT * FROM alunos;
  • Inserir Dados: Exemplo: INSERT INTO alunos (nome, idade) VALUES ('João', 16);
  • Atualizar Dados: Exemplo: UPDATE alunos SET idade = 17 WHERE nome = 'João';
  • Excluir Dados: Exemplo: DELETE FROM alunos WHERE nome = 'João';

O SQL torna a manipulação dos dados simples e eficiente, mesmo para iniciantes, sem a necessidade de conhecer os detalhes internos do armazenamento.

5. Integração de Python com SQLite

O Python possui o módulo nativo sqlite3, que permite a integração com o SQLite de forma direta e prática. Essa combinação é ideal para o desenvolvimento de aplicações locais, protótipos e scripts, sem a necessidade de um servidor dedicado.

  • Leveza e Portabilidade: O SQLite armazena os dados em um único arquivo, eliminando a complexidade de configurar servidores.
  • Facilidade de Uso: Com o módulo sqlite3, você pode executar comandos SQL diretamente no Python.

Confira o exemplo prático a seguir:

import sqlite3

# Conectando ou criando um banco de dados
conn = sqlite3.connect('meu_banco.db')

# Criando um cursor para executar comandos SQL
cursor = conn.cursor()

# Criando uma tabela chamada "usuarios"
cursor.execute("""
    CREATE TABLE IF NOT EXISTS usuarios (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nome TEXT NOT NULL,
        idade INTEGER
    )
""")

# Inserindo um registro na tabela "usuarios"
cursor.execute("INSERT INTO usuarios (nome, idade) VALUES (?, ?)", ('Ana', 21))

# Salvando as alterações
conn.commit()

# Consultando os registros da tabela
cursor.execute("SELECT * FROM usuarios")
registros = cursor.fetchall()

# Exibindo os registros
for registro in registros:
    print(registro)

# Fechando a conexão com o banco de dados
conn.close()

6. Tendências Futuras dos Bancos de Dados

  • Dados em Nuvem: Os bancos de dados estão migrando para a nuvem, permitindo acesso remoto e escalabilidade dinâmica.
  • Bancos de Dados Distribuídos: Sistemas que distribuem dados por múltiplos servidores garantem alta disponibilidade e desempenho, mesmo em caso de falhas.
  • Integração com IoT: O crescimento da Internet das Coisas gera uma grande quantidade de dados que precisam ser processados em tempo real.
  • Inteligência Artificial e Machine Learning: Tecnologias que analisam grandes volumes de dados e automatizam processos estão em expansão.
  • NoSQL e Dados Não Estruturados: Além dos bancos relacionais, os bancos NoSQL oferecem maior flexibilidade para lidar com dados em formatos variados.

7. Conclusão

Neste treinamento, exploramos a história dos bancos de dados, os fundamentos dos SGBDs e da linguagem SQL, e como o Python se integra com o SQLite para facilitar o gerenciamento de dados. Também discutimos as tendências que estão revolucionando o armazenamento e a análise das informações na era digital.

Entender como os dados são organizados e manipulados é fundamental para quem deseja ingressar no mundo da tecnologia. As habilidades aprendidas aqui abrem portas para diversas áreas, como desenvolvimento de software, análise de dados e inteligência artificial.

Esperamos que este treinamento inspire você a explorar mais sobre este fascinante universo dos dados!

SQLite
Mini treinamento sobre SQLite

A seguir, um mini treinamento prático sobre SQLite, abordando os conceitos básicos, comandos essenciais e exemplos de uso.


1. Introdução ao SQLite

O que é SQLite?
SQLite é um sistema de gerenciamento de banco de dados relacional (SGBDR) leve, sem servidor e baseado em arquivos. Ele é ideal para aplicações que necessitam de um banco de dados simples, portátil e de fácil configuração. Alguns pontos importantes:

  • Leve e Portátil: O banco de dados é armazenado em um único arquivo.
  • Zero Configuração: Não há necessidade de instalar um servidor separado.
  • Amplamente Suportado: Utilizado em aplicações móveis, navegadores e projetos embarcados.

2. Instalação do SQLite

A instalação do SQLite varia de acordo com o sistema operacional:

  • Linux: Geralmente já vem instalado. Se não, você pode instalar via gerenciador de pacotes, por exemplo: sudo apt-get install sqlite3
  • Windows e macOS: Baixe o executável do site oficial do SQLite e siga as instruções para o seu sistema.

Para verificar se a instalação foi bem-sucedida, abra o terminal (ou prompt de comando) e digite:

sqlite3 --version

3. Criando e Conectando a um Banco de Dados

Para criar (ou abrir) um banco de dados, basta executar o comando:

sqlite3 meu_banco.db

Isso criará um arquivo chamado meu_banco.db no diretório atual e abrirá o ambiente interativo do SQLite.


4. Comandos SQL Básicos

Dentro do ambiente interativo do SQLite, você pode executar comandos SQL. Aqui estão os comandos essenciais:

a. Criar uma Tabela

CREATE TABLE usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
idade INTEGER
);

Esse comando cria a tabela usuarios com colunas para ID, nome, email e idade.

b. Inserir Dados

INSERT INTO usuarios (nome, email, idade) VALUES ('Ana Silva', 'ana@example.com', 28);
INSERT INTO usuarios (nome, email, idade) VALUES ('Bruno Souza', 'bruno@example.com', 35);

c. Consultar Dados

SELECT * FROM usuarios;

Esse comando exibe todos os registros da tabela usuarios.

d. Atualizar Dados

UPDATE usuarios
SET idade = 29
WHERE nome = 'Ana Silva';

e. Deletar Dados

DELETE FROM usuarios
WHERE id = 2;

5. Exemplos Práticos

Imagine que você precise gerenciar informações de usuários. Seguem alguns comandos de exemplo:

  1. Criar a Tabela
    Execute: sqlCopiarCREATE TABLE usuarios ( id INTEGER PRIMARY KEY AUTOINCREMENT, nome TEXT NOT NULL, email TEXT UNIQUE NOT NULL, idade INTEGER );
  2. Inserir Dados
    Para adicionar um novo usuário: sqlCopiarINSERT INTO usuarios (nome, email, idade) VALUES ('Carlos Pereira', 'carlos@example.com', 42);
  3. Consultar Dados
    Para listar todos os usuários: sqlCopiarSELECT * FROM usuarios;
  4. Atualizar Dados
    Para atualizar a idade do Carlos: sqlCopiarUPDATE usuarios SET idade = 43 WHERE nome = 'Carlos Pereira';
  5. Excluir um Registro
    Para remover um usuário, por exemplo, com ID 1: sqlCopiarDELETE FROM usuarios WHERE id = 1;

6. Ferramentas Adicionais e Recursos

  • DB Browser for SQLite: Uma ferramenta gráfica para visualizar e editar bancos de dados SQLite. É útil para quem prefere uma interface visual ao invés do terminal.
  • Documentação Oficial: A documentação do SQLite é um excelente recurso para aprender mais sobre comandos avançados e otimizações.

7. Dicas e Boas Práticas

  • Backup Regular: Como o banco de dados é um único arquivo, faça backups regulares para evitar perda de dados.
  • Validação de Dados: Utilize restrições como NOT NULL, UNIQUE e CHECK para manter a integridade dos dados.
  • Índices: Crie índices em colunas que são frequentemente utilizadas em condições de busca (WHERE) para melhorar a performance.

8. Exercícios Propostos

  1. Criar uma nova tabela chamada produtos com os campos id, nome, preco e quantidade.
  2. Inserir dados na tabela produtos com pelo menos três registros.
  3. Realizar uma consulta que retorne todos os produtos com preço acima de um determinado valor.
  4. Atualizar a quantidade de um produto específico.
  5. Deletar um produto com base em seu id.
en_USEnglish