Code Monkey home page Code Monkey logo

programming-logic-and-algorithms's Introduction

Curso Java - Entra21

Contatos

A criadora desse repositório é a Francielle Eliete Sales, graduada em engenharia civil e estudante de engenharia de software. Atualmente mora em Florianópolis, Santa Catarina.


Índice

Capítulo 1: Ambientação e metodologias ágeis

Manifesto ágil

Propõe valores e princípios para orientar as melhores práticas para o desenvolvimento de softwares.

Valores:

  • Indivíduos e interações valem mais do que processos e ferramentas.
  • Software em funcionamento vale mais do que documentação abrangente.
  • Colaboração com o cliente vale mais do que negociação de contratos.
  • Responder a mudanças vale mais do que seguir um plano.

Princípios:

  • Satisfazer o cliente através da entrega contínua e adiantada de software com valor.
  • Mudanças nos requisitos são bem-vindas, mesmo tardiamente. Processos ágeis tiram vantagem delas, buscando o melhor para o cliente.
  • Entregas frequentes do software funcionando.
  • Pessoas de negócio e desenvolvedores devem trabalhar em conjunto todos os dias.
  • Construir projetos em torno de indivíduos motivados.
  • Usar conversas face a face para transmitir informações.
  • Software funcionando é o mais importante.
  • Processos ágeis promovem desenvolvimento sustentável, com ritmo constante.
  • Excelência técnica e bom design aumentam a agilidade.
  • Simplicidade é essencial.
  • As melhores arquiteturas, requisitos e designs são provenientes de equipes auto-organizáveis.
  • A equipe deve refletir regularmente sobre como se tornar mais eficaz e ajustar seu comportamento de acordo.

Referências:

BECK, K et al. Manifesto para Desenvolvimento Ágil de Software. 2001. Disponível em: https://agilemanifesto.org/iso/ptbr/manifesto.html. Acesso em: 27 de abril de 2022.

BECK, K et al. Princípios por trás do Manifesto Ágil. 2001. Disponível em: https://agilemanifesto.org/iso/ptbr/principles.html. Acesso em: 27 de abril de 2022.

Scrum

Conforme já falado, o Scrum é um framework para gerenciamento de projetos. Ele é construído sobre a inteligência coletiva das pessoas, e baseia-se no empirismo e no Lean Thinking, ou seja, sua base busca unir conhecimento prático com concentração no que é essencial. O Scrum possui três pilares e cinco valores, que são apresentados a seguir.

Pilares fundamentais

  • Transparência: diz respeito à necessidade de existir clareza nos padrões, documentação e uso de boas práticas; permitindo a visibilidade tanto para quem executa o trabalho quanto para quem o recebe. Ela facilita a inspeção.
  • Inspeção: devem ocorrer reuniões frequentes com os envolvidos para analisar o que foi feito, o que será realizado e detectar problemas indesejados. Ela habilita a adaptação.
  • Adaptação: quando algum aspecto de um processo sair do limite tolerado, ou se o produto resultante não for aceitável, deve-se fazer um ajuste o mais rápido o possível para minimizar o surgimento de mais desvios.

Valores das pessoas envolvidas

  • Coragem;
  • Foco;
  • Comprometimento;
  • Respeito;
  • Abertura.

Observando-se os pilares do Scrum, pode-se perceber que ele é um processo circular. Sua unidade fundamental é um grupo pequeno de pessoas - indica-se que seja de 10 pessoas ou menos - chamado Scrum Team.

Scrum Team

  • Developers: criam incrementos utilizáveis. São responsáveis pela criação do Sprint Backlog, introduzir qualidade, adaptar seu plano para manter o planejamento e serem responsáveis pelas suas atividades.
  • Scrum Master: deve manter o Scrum, sendo responsável pela eficiência do Scrum Team. Precisa servir os Developers, o Product Owner e a organização.
  • Product owner: busca maximizar o valor do produto. Também é responsável por gerenciar o Product Backlog.

Caso seja necessário mais pessoas para desenvolver o projeto, recomenda-se a divisão delas em mais de um Scrum team. Outro ponto extremamente importante sobre Scrum, são os eventos que fazem parte da sua aplicação.

Eventos Scrum

  • Sprint: são eventos onde ideias são transformadas em valor, com duração fixa. Permitem progresso com previsibilidade, facilitando a inspeção e adaptação.
  • Sprint planning: define o trabalho a ser realizado na Sprint. Deve abordar o motivo da Sprint em questão ser valiosa, o que pode ser feito nela e como o trabalho selecionado será desenvolvido.
  • Daily Scrum: é uma reunião de 15 minutos com o objetivo de inspecionar o andamento das atividades e, caso necessário, fazer ajustes no planejamento para atingir a meta da Sprint.
  • Sprint review: é uma apresentação que busca inspecionar o resultado da sprint e discutir o progresso em direção à meta do produto, buscando determinar quais adaptações serão necessárias no futuro.
  • Sprint retrospective: busca promover formas de aumentar a qualidade e a eficácia.

Por fim, tem-se os artefatos, que representam trabalho ou valor. Cada um deles possui um compromisso.

Artefatos do Scrum

  • Product backlog: tem como compromisso a meta do produto.
  • Sprint backlog: tem como compromisso a meta da sprint.
  • Incremento: é a definição de pronto.

Durante o curso, aplicamos o Scrum durante as aulas e no desenvolvimento do projeto. No início das aulas era feita a Daily Scrum, com duração de 15 minutos, na qual eram respondidas as seguintes questões:

  • O que fiz ontem?
  • O que vou fazer?
  • O que está me atrapalhando?

No vídeo abaixo, pode-se ver o processo de forma mais visual:

Durante as aulas e o desenvolvimento do projeto, o Scrum será utilizado. Será feito um quadro no Trello para facilitar seu uso.

Referência

SCHWABER, K.; SUTHERLAND, J.. O Guia Definitivo para o Scrum: As Regras do Jogo. 2020. Disponível em: https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-PortugueseBR-2.0.pdf. Acesso em: 27 de abril de 2022.

Kanban

Kanban pode ser traduzido como quadro de sinal. Ele consiste em um quadro, que costuma ser dividido nas seguintes colunas: a fazer, em andamento e concluído. Basicamente, cartões com o trabalho a ser realizado são colocados na coluna "A fazer" e deslocados para as demais colunas conforme o seu andamento. Ele é um sistema bastante linear que auxilia na gestão e que pode ser usado em diversas áreas, pois pode ser ajustado para diferentes situações, conforme as variáveis em questão. Ele possui quatro princípios, apresentados abaixo.

Princípios

  • Comece com o que você está fazendo agora;
  • Concorde em buscar mudanças incrementais e evolutivas;
  • Inicialmente respeite os papéis, responsabilidades e cargos atuais;
  • Incentive atos de liderança em todos os níveis.

Ele é um sistema que limita o trabalho em progresso, auxiliando no desenvolvimento sustentável dos projeto. O fato de ser bastante visual, auxilia na identificação de problemas e incentiva a melhora da qualidade, ajudando a encurtar prazos de entrega, a melhorar a previsibilidade e o desempenho dos participantes. Essa melhora nos prazos de entrega e ganhos na previsibilidade ajudam a ganhar a confiança de outros departamentos, clientes, parceiros e fornecedores. Essa série de vantagens também contribui para a evolução cultural da organização, tornando o ambiente mais colaborativo, confiante, capacitado e com melhoria contínua. Além dos princípios já apresentados, o Kanban também possui cinco propriedades.

Propriedades

  • Visualização do fluxo de trabalho;
  • Limitação do trabalho em andamento;
  • Medição e gerenciamento do fluxo;
  • Construção de políticas e processos explícitos;
  • Uso de modelos para reconhecer as oportunidades de melhoria.

No vídeo abaixo, pode-se ver o processo de forma mais visual:

Durante as aulas e o desenvolvimento do projeto, o Kanban será utilizado. O quadro será feito no Trello.

Referência

ANDERSON, D. J. Kanban: Successful Evolutionary Change for Your Tecnology Business. Washington: Blue Hole Press, 2010.

Git e Github

São duas ferramentas que podem ser usadas em conjunto. O Git é utilizado para o controle de versão, ou seja, para gerenciar diferentes versões de um documento. Já o Github, é um serviço para compartilhar documentos que utiliza o Git para fazer o versionamento.

Clique aqui para acessar um curso gratuito de Git e Github

Passo a passo para atualizar arquivos no github após usá-los no Visual Studio Code, utilizando comandos Git

  1. Editar o arquivo no Visual Studio Code;
  2. Inserir a alteração no repositório local: git add .
  3. Fechar a inserção com descrição da alteração: git commit -m "nomeAlteracao"
  4. Enviar para do repositório local para a nuvem: git push
  5. Outros usuários podem fazer alteração nesse intervalo;
  6. Para baixar as alterações: git pull

Clique aqui para conhecer mais comandos Git

Trello

É uma ferramenta visual que pode ser utilizada para auxiliar no gerenciamento de projetos. Podem ser criados quadros com colunas onde podem ser adicionados cards com informações. É possível adicionar nos cards checklists, tags, arquivos, etc. O Trello também permite a adição de filtros, criação de automatizações e inclusão de power-ups. A imagem abaixo mostra um quadro criado pelo instrutor Adriano, que possibilita ver a aparência dessa ferramenta.


Capítulo 2: Lógica de programação

Em resumo, a lógica é uma construção racional e coerente do raciocínio. Nos tópicos a seguir, serão explicados a lógica formal, algoritmos, ambiente de desenvolvimento, variáveis, operadores e estruturas de seleção, repetição, manipulação de vetores e matrizes.

Lógica formal

A lógica faz parte do cotidiano das pessoas, que todos os dias executam atividades que consistem em uma sequência de ações que possuem início e obedecem uma determinada ordem, possuem um tempo de execução finito e permitem que seja atingido um resultado definido. A lógica formal é uma ferramenta que permite o desenvolvimento de uma cadeia de pensamentos, nos quais é possível reconhecer contradições e eliminar erros, o que auxilia na resolução de problemas complexos. Ela parte das proposições, que são sentenças para as quais podemos atribuir apenas os valores verdadeiro ou falso. Existem três princípios que devem ser atendidos por elas:

  • Princípio da identidade: todo objeto é identico a si mesmo.
  • Princípio da não contradição: uma proposição pode ser verdadeira ou falsa, nunca pode ser ambos.
  • Princípio do terceiro excluído: uma proposição só pode ser verdadeira ou falsa, não existe uma terceira opção.

Além desses princípios, tem-se os conhecimentos provenientes da lógica booleana, que trata do estudo das proposições. Suas leis fundamentais encontram-se elencadas a seguir:

  • Lei do meio excluído: uma proposição é verdadeira ou falsa, não existe um meio termo.
  • Lei da contradição: uma proposição não pode ser verdadeira e falsa simultâneamente.
  • Lei da funcionalidade: o valor lógico (verdadeiro ou falso) de uma proposição composta é determinado pelos valores lógicos das proposições que a constituem.

Pode-se perceber que existe uma forte ligação entre o princípio da identidade e a Lei do meio excluído, bem como entre o princípio da não contradição e a Lei da contradição. A seguir, serão comentados quais são os conectivos lógicos que podem ser utilizados para unir as proposições simples e formar as proposições compostas, e a forma correta de análise. Além disso, será apresentada a tabela verdade e como ela pode auxiliar na resolução dos problemas.

Referência

JUNIOR, V. H.. Lógica formal. Disponível em: http://docente.ifsc.edu.br/vilson.junior/md/02_LogicaFormal.pdf. Acesso em: 29 de abril de 2022.

Conectivos lógicos e tabela verdade

Os conectivos lógicos são utilizados para combinar proposições, e são os seguintes:

  • Negação: é o "NÃO", que inverte o valor da entrada.
  • Conjunção - é o "E", usado quando ambas as proposições precisam ser verdadeiras para que o seu resultado seja verdadeiro.
  • Disjunção inclusiva: é o "OU", que exige que apenas uma das proposições seja verdadeira para que o resultado seja verdadeiro.
  • Disjunção exclusiva: é o "OU ... OU ...", que diz que para que a proposição seja verdadeira, apenas uma das proposições deve ser verdadeira.
  • Condicional: é o "SE, ... ENTÃO ...", para o qual tem-se uma saída falsa caso a primeira proposição for verdadeira e a segunda negativa.
  • Bicondicional: é o "SE, E SOMENTE SE", situação em que tem-se uma saída verdadeira quando ambas as proposições forem verdadeira ou ambas forem falsas.

A sequência em que eles foram apresentados acima é a que deve ser utilizada na resolução dos problemas, a menos que existam parênteses, que possuem preferência na resolução. Já a tabela verdade é uma estrutura lógica que facilita o raciocínio humano, podendo ser utilizada pelos programadores para facilitar a construção de algoritmos. Para montá-la, coloca-se nas colunas as proposições e nas linhas os valores verdadeiro e falso, sendo que uma proposição composta com n proposições simples contém (2^n) linhas. Entre as proposições coloca-se colunas para calcular os resultados parciais e deve-se inserir também uma última coluna para o resultado final. O problema a seguir mostra como montar uma tabela verdade:

João gosta de comer tatuíra ou beber suco.

Podemos dividir a proposição acima em duas:

  • João gosta de comer tatuíra - que será chamada de T;
  • beber suco - que será chamada de S.

A figura a seguir mostra a tabela montada:

Algoritmo

É um conjunto de regras e procedimentos lógicos que levam a solução de um problema. Eles devem ser:

  • Finitos: ter um início e fim (quantidade finita de etapas).
  • Bem definidos: não devem existir ambiguidades em seus passos.
  • Efetivo: devem solucionar o problema desejado;
  • Completo: precisam prever as coisas que serão necessárias para resolver o problema.

Para resolver um problema com um algoritmo, recomenda-se seguir alguns passos, conforme mostrado na imagem a seguir:

É importante lembrar que muitas vezes existe mais de um caminho para resolver um problema, sendo possível a criação de algoritmos diferentes capazes de atingir o mesmo resultado. Além disso, é importante pensar em eficiência. Um algoritmo eficiente deve utilizar apenas a quantidade necessária de variáveis, para que não sejam alocados espaços de memória desnecessários. E quanto menos instruções forem executadas para resolver um problema, maior a eficiência do algoritmo.

Variáveis

Uma variável é um espaço reservado na memória do computador para armazenar um dado. Cada variável deve possuir um nome (seu identificador) e pode guardar um valor por vez.

Alguns tipos de variáveis

  • int: qualquer valor que pertença ao conjunto dos números inteiros.
  • float: qualquer valor que pertença ao conjunto dos números reais.
  • string: sequência de caracteres.
  • bool: engloba os valores lógicos verdadeiro (que também pode ser chamado de 1 ou sim) e falso (que também pode ser chamado de 0 ou não).

Operadores

Tem-se os operadores aritméticos, relacionais e lógicos, apresentados a seguir.

Operadores aritméticos

  • +: adição;
  • -: subtração;
  • *: multiplicação;
  • /: divisão;
  • ^: potenciação.

Ordem de execução dos operadores:

  1. Parênteses;
  2. Exponeciação;
  3. Multiplicação e adição;
  4. Adição e subtração;
  5. Para operadores com mesma prioridade, a execução é feita da esquerda para a direita

Operadores relacionais

  • =: igualdade;
  • <>: diferença;
  • <: menor que;
  • ">": maior que;
  • "<=": menor ou igual a;
  • ">=": maior ou igual a;

Operadores lógicos

  • E: intersecção (conjunção);
  • Ou: união (disjunção);
  • Não: negação.

Estruturas de seleção

São estruturas que permitem executar um ou mais comandos, sob a imposição de condições. Elas podem ser simples, compostas, alinhadas ou multiplas.

Simples

O comando só é executado se a condição for verdadeira;

  • Sintaxe:
Se ("Condição") então
    Instrução a ser executada se for verdadeiro
Fim

Composta

Verifica-se uma única expressão lógica, se ela for verdadeira executa-se uma instrução (ou bloco de instruções). Caso ela seja falsa, segue-se para a verificação de outra expressão lógica e segue-se nesse fluxo.

  • Sintaxe:
Se ("Condição") então
    Instrução a ser executada se for verdadeiro
Senão
    Instrução a ser executada se for falso
Fim

Estrutura condicional alinhada

É utilizada quando é necessário tomar uma decisão dentro de uma condição.

  • Sintaxe:
Se ("Condição") então
    Instrução a ser executada se for verdadeiro
    Se ("Condição") então
        Instrução a ser executada se for verdadeiro
    Senão
        Instrução a ser executada se for falso
    Fim
Senão
    Instrução a ser executada se for falso
Fim

Estrutura de descisão múltipla

Nesse tipo de estrutura, uma variável é controlada, o conteúdo dela é analisado e existe uma instrução associada a cada condição. Se a variável testada for igual a condição, a instrução é executada. Caso contrário, a linha seguinte é analisada. Esse tipo é bastante utilizado para a construção de menus.

  • Sintaxe:
Caso ("Variável a ser controlada")
    Seja ("Valor 1") faça (instrução 1)
    Seja ("Valor 2") faça (instrução 2)
    Seja ("Valor 3") faça (instrução 3)
    ...
    Seja ("Valor n") faça (instrução n)
    Senão
        Instrução a ser executada se for falso
fim

Referência

LEAL, G. C. L.; OLIVEIRA, P. M. Algoritmos e lógica de programação 1. Maringá: Unicasumar, 2020.

Estruturas de repetição

As estruturas de repetição permitem que uma ou mais instruções sejam repetidas sem que seja necessário repetir trechos do código para tal, e podem ser utilizada na entrada e na saída de dados. Elas podem ser do tipo contada ou condicional

Contada

Nas estruturas de repetição do tipo contada, o número de repetições do trecho de código é um valor conhecido.

Para

É uma estrutura de repetição do tipo contada, cuja quantidade de repetições é conhecida previamente. Costuma-se usar uma variável contadora para controlar a quantidade de repetições. Esse tipo de variável recebe um valor inicial, que é incrementado de forma constante a cada execução da estrutura de repetição.

  • Sintaxe:
Para (Variável) de (início) até (final) passo (incremento)
    Instrução a ser executada
Fim

A variável contadora deve ficar fora do bloco de repetição, para evitar um loop infinito.

Condicional

Nas estruturas de repetição do tipo condicional, o número de repetições do trecho de código é desconhecido, e depende de alguma condição pré-estabelecida, sendo que ela pode ser alterada dentro do laço de repetição.

Repita

É uma estrutura que depende de uma condição, e que costuma ser usada quando existe a necessidade de uma quantidade desconhecida de repetições e que precisa de um teste condicional no final do trecho de repetição.

  • Sintaxe:
Repita
    Instrução a ser executada
Até (Condição)

Enquanto

É uma estrutura que também depende de uma condição, e que costuma ser usada quando há necessidade de uma quantidade desconhecida de repetições e que necessita usar um teste condicional logo no início.

  • Sintaxe:
Enquanto (Condição) faça
    Instrução a ser executada
Fim

Estruturas de repetição encadeadas

Pode ser feito o encadeamento de estruturas de repetição, quando conveniente, e não existe uma regra para utilizá-lo.

Referência

LEAL, G. C. L.; OLIVEIRA, P. M. Algoritmos e lógica de programação 1. Maringá: Unicasumar, 2020.

Funções

Uma função é uma parte de código que executa alguma tarefa específica, podendo ser chamada quantas vezes for necessário. Elas permitem obter um código mais claro, mais reutilizável e mais independente. Podem ser definidas da seguinte forma:

[tipo de retorno da funçao] [nome da função] (parâmetro 1, parâmetro 2, ..., parâmetro n){
    //código
}

O tipo de retorno da função pode ser especificado conforme o resultado que ela retornará, como inteiro, real, cadeia, caractere, etc. Já os parâmetros são os valores fornecidos à função quando ela é chamada (algumas podem não ter parâmetros). Para chamar uma função, fazemos da seguinte forma:

[nome da função] (argumento 1, argumento 2, ..., argumento n)

Os argumentos são os valores dos parâmetros, e podem ser qualquer tipo de expressão. Algo importante de se ter em mente quando se trata de funções, é que as variáveis podem ser locais ou globais:

  • Variáveis locais: são declaradas dentro de uma função, e só são válidas dentro dela;
  • Variáveis globais: são válidas em qualquer parte do cógigo.

Uma função pode chamar ela mesma, e isso se chama recursividade.

Referência

Programar em C/Funções. Wikilivros, 2015. Disponível em: https://pt.wikibooks.org/wiki/Programar_em_C/Fun%C3%A7%C3%B5es. Acesso em: 17 de maio de 2022.

Estruturas de dados homogêneas

São estruturas que agrupam várias informações do mesmo tipo. Podem ser vetores ou matrizes.

Vetores

É uma variável unidimensional, com uma linha e que pode ter várias colunas. Cada coluna possui uma variável, , cuja posição é indicada por um índice. Podem ser declarados da seguinte forma:

<nome>: vetor [dimensão] de (tipo de dado)

As operações devem ser realizadas para cada elemento do vetor (só é possível operar sobre todo ele para vetor de caractere). Assim, para indicar um dado em uma posição específica, é necessário indicar o índice dele. Caso se queira operar sobre todo o vetor, pode-se usar as estruturas de reprodução.

Matrizes

É uma variável multidimensional, que pode ter várias linha e várias colunas. Cada posição é indicado por dois índices, um que se refere a linha e outro que se refere a coluna. O modelo abaixo mostra como podem ser declaradas, sendo que a dimensão 1 é a quantidade de linhas e a dimensão 2 é a quantidade de colunas:

<nome>: vetor [dimensão 1, dimensão 2] de (tipo de dado)

As operações também devem ser realizadas sobre cada elemento, devendo-se indicar o ídice da linha e o da coluna para acessar o dado. Caso se queira operar sobre toda a matriz, pode-se usar as estruturas de reprodução, e como existe mais de uma dimensão, é necessário usar mais de uma estrutura de repetição alinhadas (a quantidade de estruturas de repetição refere-se ao tamanho das dimensões).

Referência

LEAL, G. C. L.; OLIVEIRA, P. M. Algoritmos e lógica de programação 1. Maringá: Unicasumar, 2020.

IDE

É o acrônimo para Integrated Development Enviroment, que pode ser traduzido como Ambiente de Desenvolvimento Integrado. É um recurso que facilita o desenvolvimento de softwares, sendo possível escrever, compilar e testar aplicações. A escolha do IDE a ser utilizado depende do projeto que será desenvolvido e linguagem(ens) utilizada(s). A imagem abaixo mostra os 10 IDE's mais utilizados em maio de 2022. Para conferir o ranking completo, clique aqui.

O vídeo a seguir fala um pouco mais sobre esses ambientes:

programming-logic-and-algorithms's People

Contributors

franciellesales avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.