O conteúdo aborda os conceitos básicos de software, programas, algoritmos, tipos de software, linguagens de programação, paradigmas, ciclo de vida do software e exemplos práticos de modelagem de algoritmos.
Entender que o algoritmo é a base lógica que precede a codificação; sem um algoritmo bem definido, o programa e o software não terão comportamento correto.
O estudo demonstra que software é o resultado da combinação de algoritmos, programas e estruturas de dados, e que seu desenvolvimento segue um ciclo estruturado que garante qualidade e manutenção ao longo do tempo.
Algoritmo: descrição informal ou formal de passos para resolver um problema (ex.: dividir dois números, verificando divisor zero). Programa: implementação concreta do algoritmo em uma linguagem de programação que a máquina pode executar. Software: conjunto de programas, dados e estruturas de dados que realizam uma ou mais funções para o usuário.
Definem como os dados são organizados e acessados (vetores, listas, árvores, grafos). São essenciais para que os programas manipulem informações de forma eficiente.
Um algoritmo deve ser finito, correto (produz a solução esperada para toda entrada válida) e eficiente (uso ótimo de tempo e espaço).
Modelagem de algoritmo com estruturas condicionais (se o estepe está vazio, chamar o borracheiro) e laços de repetição (desparafusar/parafusar cada parafuso). Demonstra como transformar um problema real em pseudocódigo.
Representação textual simplificada que aproxima a sintaxe de uma linguagem de programação, facilitando a transição para código real.
Resposta correta: B) Algoritmo é a sequência lógica de passos, programa é a implementação desse algoritmo em linguagem e software é o conjunto de programas, dados e estruturas que atendem a um objetivo.
Explicação: Essa alternativa apresenta a definição clássica de cada termo, distinguindo claramente os três níveis de abstração.
Resposta correta: B) Funcional enfatiza imutabilidade e funções de ordem superior; lógico utiliza cláusulas de fato e regra; orientado‑a‑objetos modela entidades como objetos.
Explicação: Cada afirmação da alternativa B descreve corretamente as características essenciais dos três paradigmas citados.
Resposta correta: C) Requisitos → Desenvolvimento → Testes → Manutenção
Explicação: Essa é a ordem tradicional do ciclo de vida de software, garantindo que os requisitos sejam atendidos antes da implementação, seguida de validação e, por fim, manutenção.
Resposta correta: A) Ler as duas entradas como strings, usar `try/catch` para converter para inteiro; se falhar, imprimir erro e encerrar; caso contrário, somar e imprimir. Complexidade O(1).
Explicação: Essa alternativa garante corretude (tratamento explícito de entrada inválida) e mantém a complexidade constante, evitando loops desnecessários.
Olá, alunas e alunos do Cossidio de Trotissão e Cossidio de Contação, nesta vídeo-áulio, que falou um pouquinho sobre software.
Vou começar, mostrando as diferenças entre software, programas e algoritmos, depois estipos de software, vamos aprofundar um pouquinho no ângulo dos algoritmos, depois mencionarem um pouco a respeito de linguagem de programação e o ciclo de desviva de software.
Um algoritmo, ele descreve de uma forma mais informal, a sequência de passos que um programa tem que executar o programa em um determinado linguagem.
Você pode usar, por exemplo, para o português para fazer essa descrição, como temos no exemplo aqui.
Vamos realizar a divisão de dois números, então eu tenho a entrada, que é receber o dia de dentro de um dia de zô, só que para fazer a divisão, eu tenho que checar se divisou a la idea.
Se ele valizar, eu vou exibir uma mensagem dizendo que a divisão vai ser possível.
Por outro lado, eu vou poder calcular a divisão, se o divisor não for nubo, fazer a divisão armazenão, resultado e exibir.
Se eu for dividir por zero, termino a execução, porque não faz sentido continuar.
Por outro lado, se for possível continuar, eu faço a divisão, exibo o resultado e também termino cótico.
O programa já é uma sequência de instruções que descritas por um algoritmo que permite ter um preocupador realista na tarefa, ou seja, o algoritmo descreva para só passo para resolver um problema.
O programa, ele descreve seu algoritmo numa linguagem que a máquina consegue entender, porque esse programa também vai ser traduzido por uma linguagem de máquina.
Então, aqui nós temos um código em ser, no programa, desenvolvido em ser para a sóna, a mesma coisa, recebemos os valores, avaliamos se o divisor é nubo, fazemos as exibições de mensagem e se eu traremos, por exemplo, com 10, zero, a mensagem de cada divisão não é possível, vai aparecer, se eu traremos com 10 e 3, vou ter o resultado da divisão.
Então, aqui nós teríamos um programa relacionado àquele algoritmo.
Já o software, ele é formado por uma das programas estruturas de dados.
As estruturas de dados, elas definem a organização, os métodos de acesso, as opções de processamento, de uma coleção de itens de informação que vão estar sendo manipulantes pelo programa.
Então, a partir disso eu posso gerar software usando programas estruturas de dados, 3 executar alguma tarefa que vai tornar mais fácil a minha vida ou a vida da minha organização.
Então, o software vai ter uma finalidade específica.
Hoje em dia, muito do software, a gente já não está, mas com CD, você comprou a AI, nem estava na sua máquina, muito joguinhos, a gente faz desse cheio.
Bom, nesse contexto, então, o algoritmo, ele é a primeira etapa onde eu defino como que pretendo atacar aquele problema através de instruções bem definidas.
Em seguida, eu codifico isso em um programa através de uma linguagem de programação e esse programa, como o caso aqui para fazer a soma, pode fazer parte de um software que, além de sonar, realiza outros cálculos.
Como é o caso do Matinábio, uma ferramenta ou software utilizado para diferentes cálculos em matemática e engenharia.
Os tipos de software, nós vamos ter do software básico, o de sistema que seria as coleções de programas escritivos para apoiar.
Eles vão apoiar outros programas.
Eles vão ter um contato mais direto com o hardware, direciando a execução de outros software.
É o caso dos sistemas operacionais.
Eles coordena um acesso à recursos do computador e dos dispositivos de entrada e saída.
Também temos, como o software de sistema, os computadores e interpretadores.
Eles traduzem programas que estão na linguagem para uma linguagem de hardware, para a linguagem de máquina.
Nesse caso, com o compilador, a diferença do compilador do interpretador é que o compilador ele pega o programa, compila todas as instruções, ele fica se tem problemas, se tiver tudo ok, ele vai transformar em linguagem de máquina, gerando executável.
E a partir daí você pode obter os dados, usar esse executável para ter receitas desejáveis.
No caso do interpretador, esse processamento já ocorre linha de instrução.
Por um exemplo disso seria o Python.
Para cada linha você já vai ter aquela instrução sendo interpretada, os dados sendo processados e já sendo possível você interpretar e ter uma saída disso.
O software utilitario são programas que são úteis ao bom funcionamento do sistema computacional, o caso dos faio-os, visantiviros e os software de aplicação, as tendo aí as planílias, os editores e outras ferramentas que nos ajudam a executar tarefas.
O plugin já seria o conceito de uma extensão de software.
Um bom exemplo disso hoje em dia são os navegadores, eles têm plugins que permitem você tocar música de uma estação de rádio, assistir filmes online, codificar e decodificar e meio, realizar operações bancárias, tudo isso são funcionalidades que você é distanciante que você pode estar em conduncê no navegador, a mesma coisa para outros tipos de software, como por exemplo os jogos em que você pode fazer as extensões.
O Fino é um conjunto de programas que atua dentro de sistemas embarcados, ou de dispositivos de uso específico.
No caso é um conjunto de programas que já vem de fábrica, está armazenado no que eu falei na uma passada da rede online memory, da primeira um, que vai ter que uma vez que você desliga o dispositivo, aquele sistema continua ali embarcado, continua ali gravado no caso, podendo estar gravado na memória da rede online memory.
Então, de uma classe específico de software de computador, que for nisso que não controla mais de paixonível para o rádio é específico daquele dispositivo, como é o caso aqui, por exemplo, de um roteador.
Boa algoritmo, uma boa definição de algoritmo, aquele é um conjunto finito de regras bem definido, ou seja, não tem no pibuidade, voltava a solução de um problema em tempo finito, ele vai ter fim.
Logo ele vai ter três qualidades, cada passo da algoritmo vai ser realizada para uma instrução que capaz de ser entendida pela máquina, a ordem dos passos deve ser precisamente determinada, não gerar nenhum tipo de impubbidade, o algoritmo deve ter fim.
Dois aspectos quando você está projetando o algoritmo devem ser devagar desincontas, a sua corretude, a sua eficiência, a corretude vai na linha de que, para cada entrada possível, o algoritmo terá fim, como já mencionado, e vai produzir a solução desejada, ou seja, para a entrada, não posso ter uma saída, um tipo de entrada, saída e, para a mesma entrada, outro tipo de saída nesse algoritmo.
Então, eu tenho que ter uma consistência de resultado, uma corretude de resultado.
A eficiência tem a ver com os recursos consumidos por esse algoritmo, principalmente temos tempo e a anasenamento.
Então, por exemplo, você tem o seu resolução, resolvi solucionar um problema, eu bolei dois algoritmos, sendo que um levo por tempo para solucionar aquele programa significa que o algoritmo que resolveu mais rápido é uma ideia mais eficiente para tratar aquele problema.
Bom, vamos ilustrar agora a ideia do algoritmo, através de um tradicional exemplo da troca de pneu de o carro.
Você pode pensar, bom, a pessoa falou que o algoritmo tem que ter fim, então ele vai ter um início.
Eu vou mandar trocar o pneu, a um portanto, trocar o pneu, e aí, enfim, só que a pessoa ajuda muito, principalmente, o coitado, que vai desenvolver esse código, você não deu muitas pistas.
Então, trocar pneu envolve mais coisas, por exemplo, o meu step está vazio, sim, então eu vou chamar um borrâcheiro, então eu estou na verdade acionando outro sistema, outro algoritmo, senão eu vou ter que trocar o pneu, fim, só que tudo bem, o borrâcheiro ele vai tratar esse problema para mim.
Agora, eu trocar o pneu, trocar o pneu, eu posso especificar mais.
Nesse caso, eu voltei que levantar o carro, isso para fuzar a roda, colocar o step, para fuzar a roda, baixar o carro.
Observem que aqui nós temos a partir de uma estrutura condicional duas decisões, a de chamar o borrâcheiro, ou a de trocar o pneu, dependendo dessa condição, aqui, isso o step está vazio, ou não.
Partir essa estrutura condicional, nós conseguimos, então, definir aqui uma sequência de passos, por caso, eu não preciso trocar o pneu, só que dá para ir além, porque? Porque eu vou precisar repetir uma tarefa chata de desaparafuzar a roda para cada um dos parafusos, e o mesmo depois para afuzar.
Pásicamente, é o mesmo tipo, uma instrução muito parecida que eu vou repetir várias vezes, aí, entre o conceito da estrutura de repetição.
Então, nós vimos aqui uma estrutura de condicional, condicional, um desvio condicional, sim ou não.
E agora nós vamos compor uma estrutura de repetição com o parafuso da preso.
Se ele tiver preso, eu vou precisar desaparafuzar, desaparafuzar.
Nesse caso, eu vou ficar que preso nesse laço enquanto o parafuso tiver preso.
Quando não tiver mais parafuso preso, eu vou poder colocar o step, então, aqui, eu tenho uma estrutura de repetição, com uma condição de saída, porque isso tem que ter fim.
O próximo passo é parafuso, está preso, a mesma questão.
Só que agora, se a resposta for não, eu vou precisar parafusar.
E eu vou ficar nessa situação enquanto o parafuso não tiver preso.
Quando todos tiverem preso, eu saio fim do meu algoritmo.
Então, aqui, nós temos a ideia do algoritmo que também pode ser representada através de um piceu do código.
Que seria, na forma simples de escrever, só que o piceu do código se aproxima mais de uma syntax, de das normas utilizadas por uma linguagem de programação.
Mas ainda é informal, só que ele vai ser por isso, porque essa proximidade, ele facilita uma piamento para uma linguagem de programação.
Então, por exemplo, aqui para fazer uma som.
Eu posso declarar valores variáveis que eu vou estar armazenando os valores que eu vou receber esses valores em unidos, vou só mais guardar em soma, e depois escreveu o resultado dessa som.
Uma linguagem de programação, ela permite escrever o algoritmo de uma maneira que o computador consegue entender.
Isso consegue ser convertido para linguagem de máquina.
Toda linguagem de programação, ela trabalha com o conjunto de símbolos estruturas de dados e comando para criar esses programos.
No caso tivemos as mais nem sempre foi assim, as linguagens de primeira geração eram muito próximas de uma linguagem de máquina.
Você trabalha com sequências de bits, onde os dados ou serem processados ou a localização deles é a dada mesmo por um tipo de representação binária capaz de ser entendida pela máquina, por exemplo, através de cartões de perfurados.
A linguagem de montagem que já faz parte da segunda geração, ainda eu vou justamente porque ela tinha programas tradutores, os assemblurs que permitiam você escrever usando algumas abreliações de comandos e isso era traduzido para a linguagem de máquina.
Bom, a partir dessa ideia dos programas tradutores, nós temos isso propició o surgimento das linguagens de mais alto nível, de terceira geração, como é o caso do C, você tem os programas ainda, eles ainda eram compilados e trabalhosos nas linguagens de segunda geração, porque demandava um grande número de instruções.
Já as linguagens de alto nível permitiram você trabalhar com comandos simples, que pudiam ter o mesmo efeito com o confunto de comandos de uma linguagem de máquina.
Então justamente por causa dessa parte de tradução.
Então você ficou mais eficiente, você conseguia ter uma linguagem mais acessível, principalmente por um humano, poder modelar o que ele está querendo resolver usando essa linguagem.
Bom, a linguagem de corta geração ela ainda se aproxima mais ainda da linguagem natural.
Um bom exemplo disso são as linguagens que trabalham com bancos de dados, como é o caso do SQL, é usada para fazer consultas aos bancos de dados relacionais.
Então você vai ter seleção, selecte e outros comandos que permitem você buscar essas informações de uma maneira bastante mais simples, com uma linguagem bem mais simples.
No caso dos paradigmas de uma linguagem de programação, nós temos o paradigma imperativo que seria o de linguagens como você, fortrâneo, linguagens nessa linha, onde você tem uma sequência de comandos elementares que podem ser executados pelo rado.
Então você vai ter uma manipulação de dados e a a eleização de operações.
É um tipo de paradigma que se baseia justamente naquele processamento que a gente viu da arquitetura de voonóima, o tratamento dos dados e das instruções.
No paradigma funcionar, você vai fazer um processamento usando principalmente as funções.
Essa ideia surgiu com o adivento da inteligência artificial e um ospointe disso foi a linguagem listo que surgida por volta de 1958.
Mas tem outras linguagens que trabalham com esse paradigma, com esse tratamento através de funções como o rascal e Miranda.
O paradigma lógico também teve sua origem e a principalmente por conta do processo de inferência dedutivo.
E ele é um paradigma que está mais focado, nem tanto na solução de como o problema vai ser solucionado.
Como as instruções vão estar solucionando o problema, mas em representar aquele problema, modelar aquele problema os estados daquele problema.
Bom, e por último nós temos a orientação objeto que vai na linha de enxergar o mundo através de uma coleção de itens onde esses itens têm atributos e métodos.
Então por exemplo, se a gente está no carro, o carro tem uma capacidade para no tanque dele, tem uma potência no motor, tem quatro pneus e tem vários atributos.
E ele também tem funcionalidade.
Por exemplo, tem carros hoje em dia que gestação não sozinho.
O tem carro vai ter a funcionalidade de acelerar de 0 a 100 em poucos e 5 segundos.
O carro vira direita, vira a esquerda, tudo isso são funcionalidades daquele objeto, além dos atributos sinerentes a ele.
A orientação ou objetos trabalham com essa ideia para modelar os problemas e escrever os códicos.
Por exemplo, disso já avapai um de semanas mais.
Considerando agora o círculo de vida do software, quando você vai pensar na criação do software, primeira coisa, primeira etapa é a definição.
Quais são os requisitos desse software? Uma vez que você conversa com o cliente, você tem um cliente que quer um software para ajudar a resolver o problema dele, você vai precisar saber exatamente o que ele quer.
A partir da li você consegue já começar a estruturar os sistemas que vão estar envolvidos para lidar com aqueles requisitos.
Depois disso vem a partir de desenvolvimento onde você vai trabalhar os algoritmos, vai selecionar linguagem para implementar esses algoritmos e vai iniciar o processo de implementação.
Além disso, você vai precisar testar todas as etapas aqui, nós podemos ter avais e das evindas nesse processo.
Por último, vamos ter a manutenção, que é o que, antes de você entregar o produto efetivamente o software, você vai investir a necessidade de algum tipo de alteração, de algum tipo de correção ou vai adicionar alguma funcionalidade, além de preparar os manuais e muitas vezes você vai no seu cliente dar um treinamento para o uso daquela ferramenta.
Com isso, então, vimos algumas ideias relacionadas à software, espero que os conceitos tenham ficado claro para vocês e nos vemos na próxima aula.