Programas

ImprimirCitar
Um diagrama mostrando como o usuário interage com software de aplicação em um computador desktop típico. A camada de software de aplicação interfaces com o sistema operacional, que por sua vez se comunica com o hardware. As setas indicam fluxo de informação.

Software é um conjunto de programas de computador e documentação e dados associados. Isso contrasta com o hardware, a partir do qual o sistema é construído e que realmente executa o trabalho.

No nível de programação mais baixo, o código executável consiste em instruções de linguagem de máquina suportadas por um processador individual — normalmente uma unidade de processamento central (CPU) ou uma unidade de processamento gráfico (GPU). A linguagem de máquina consiste em grupos de valores binários que significam instruções do processador que alteram o estado do computador de seu estado anterior. Por exemplo, uma instrução pode alterar o valor armazenado em um determinado local de armazenamento no computador - um efeito que não é diretamente observável pelo usuário. Uma instrução também pode invocar uma das muitas operações de entrada ou saída, por exemplo, exibir algum texto na tela do computador, causando mudanças de estado que devem ser visíveis ao usuário. O processador executa as instruções na ordem em que são fornecidas, a menos que seja instruído a "pular" para uma instrução diferente ou é interrompido pelo sistema operacional. A partir de 2023, a maioria dos computadores pessoais, dispositivos de smartphone e servidores têm processadores com várias unidades de execução ou vários processadores realizando computação juntos, de modo que a computação se tornou uma atividade muito mais simultânea do que no passado.

A maioria dos softwares é escrita em linguagens de programação de alto nível. Elas são mais fáceis e eficientes para os programadores porque estão mais próximas das linguagens naturais do que das linguagens de máquina. Linguagens de alto nível são traduzidas para linguagem de máquina usando um compilador, um interpretador ou uma combinação dos dois. O software também pode ser escrito em uma linguagem assembly de baixo nível que tenha uma forte correspondência com as instruções da linguagem de máquina do computador e seja traduzida para linguagem de máquina usando um montador.

História

Um algoritmo para o que teria sido o primeiro software foi escrito por Ada Lovelace no século 19, para o planejado Analytical Engine. Ela criou provas para mostrar como a máquina calcularia os números de Bernoulli. Por causa das provas e do algoritmo, ela é considerada a primeira programadora de computador.

A primeira teoria sobre software, antes da criação dos computadores como os conhecemos hoje, foi proposta por Alan Turing em seu ensaio de 1936, On Computable Numbers, with an Application to the Entscheidungsproblem (decisão problema). Isso eventualmente levou à criação dos campos acadêmicos de ciência da computação e engenharia de software; ambos os campos estudam software e sua criação. A ciência da computação é o estudo teórico do computador e do software (o ensaio de Turing é um exemplo de ciência da computação), enquanto a engenharia de software é a aplicação de princípios de engenharia ao desenvolvimento de software.

Em 2000, Fred Shapiro, bibliotecário da Yale Law School, publicou uma carta revelando que o artigo de 1958 de John Wilder Tukey, "The Teaching of Concrete Mathematics" continha o uso mais antigo conhecido do termo "software" encontrado em uma pesquisa nos arquivos eletrônicos do JSTOR, antecedendo a citação do Oxford English Dictionary em dois anos. Isso levou muitos a creditar a Tukey a cunhagem do termo, particularmente em obituários publicados no mesmo ano, embora Tukey nunca tenha reivindicado o crédito por tal cunhagem. Em 1995, Paul Niquette afirmou que havia originalmente cunhado o termo em outubro de 1953, embora não tenha encontrado nenhum documento que comprove sua afirmação. A publicação mais antiga conhecida do termo "software" em um contexto de engenharia foi em agosto de 1953 por Richard R. Carhart, em um memorando de pesquisa da Rand Corporation.

Tipos

Blender, um programa de software gratuito

Em praticamente todas as plataformas de computador, o software pode ser agrupado em algumas categorias amplas.

Finalidade ou domínio de uso

Com base no objetivo, o software de computador pode ser dividido em:

  • Software de aplicação usa o sistema de computador para executar funções especiais além da operação básica do próprio computador. Existem muitos tipos diferentes de software de aplicação porque a gama de tarefas que podem ser executadas com um computador moderno é tão grande - veja a lista de software.
  • Software de sistema gerencia o comportamento de hardware, como fornecer funcionalidades básicas que são exigidas pelos usuários, ou para que outro software funcione corretamente, se em absoluto. O software do sistema também é projetado para fornecer uma plataforma para executar o software da aplicação, e inclui o seguinte:
    • Sistemas operacionais são coleções essenciais de software que gerenciam recursos e fornecem serviços comuns para outro software que executa "no topo" deles. Programas de supervisão, carregadores de inicialização, conchas e sistemas de janela são partes principais dos sistemas operacionais. Na prática, um sistema operacional vem junto com software adicional (incluindo software de aplicação) para que um usuário possa potencialmente fazer algum trabalho com um computador que só tem um sistema operacional.
    • Drivers de dispositivo operar ou controlar um tipo particular de dispositivo que está ligado a um computador. Cada dispositivo precisa de pelo menos um driver de dispositivo correspondente; porque um computador normalmente tem pelo menos um dispositivo de entrada e pelo menos um dispositivo de saída, um computador normalmente precisa de mais de um driver de dispositivo.
    • Utilitários são programas de computador projetados para ajudar os usuários na manutenção e cuidado de seus computadores.
  • Software maliciosoou malware, é software que é desenvolvido para prejudicar ou interromper computadores. Malware está intimamente associado com crimes relacionados com o computador, embora alguns programas maliciosos podem ter sido projetados como piadas práticas.

Natureza ou domínio de execução

  • Aplicações de desktop, como navegadores da web e Microsoft Office e LibreOffice e WordPerfect, bem como aplicações de smartphone e tablet (chamadas "apps").
  • scripts JavaScript são peças de software tradicionalmente incorporados em páginas web que são executados diretamente dentro do navegador da web quando uma página da web é carregada sem a necessidade de um plugin do navegador da web. Software escrito em outras linguagens de programação também pode ser executado dentro do navegador web se o software é traduzido para JavaScript, ou se um plugin de navegador web que suporta essa linguagem é instalado; o exemplo mais comum do último é scripts ActionScript, que são suportados pelo plugin Adobe Flash.
  • Software de servidor, incluindo:
    • Aplicativos web, que geralmente rodam no servidor web e geram páginas web dinamicamente para navegadores da Web, usando por exemplo. PHP, Java, ASP. NET, ou mesmo JavaScript que é executado no servidor. Nos tempos modernos, estes comumente incluem alguns JavaScript para ser executado no navegador da web também, no caso em que eles normalmente funcionam em parte no servidor, em parte no navegador da web.
  • Plugins e extensões são software que amplia ou modifica a funcionalidade de outra peça de software, e exigem que o software seja usado para funcionar.
  • Software incorporado reside como firmware dentro de sistemas embarcados, dispositivos dedicados a um único uso ou alguns usos, como carros e televisões (embora alguns dispositivos embarcados, como chipsets sem fio, possam eles próprios fazer parte de um sistema de computador comum, não incorporado, como um PC ou smartphone). No contexto do sistema incorporado, às vezes não há distinção clara entre o software do sistema e o software da aplicação. No entanto, alguns sistemas embarcados executam sistemas operacionais embarcados, e esses sistemas retêm a distinção entre software de sistema e software de aplicação (embora normalmente só haverá um, aplicativo fixo que é sempre executado).
  • Microcódigo é um tipo especial, relativamente obscuro de software embarcado que diz ao processador em si mesmo como executar o código da máquina, então é realmente um nível mais baixo do que o código da máquina. É tipicamente proprietária do fabricante do processador, e quaisquer atualizações de software de microcódigo correcional necessárias são fornecidas por eles aos usuários (que é muito mais barato do que o hardware do processador de substituição de envio). Assim, um programador comum não esperaria nunca ter que lidar com isso.

Ferramentas de programação

Ferramentas de programação também são software na forma de programas ou aplicativos que os desenvolvedores usam para criar, depurar, manter ou dar suporte a software.

O software é escrito em uma ou mais linguagens de programação; existem muitas linguagens de programação e cada uma tem pelo menos uma implementação, cada uma das quais consiste em seu próprio conjunto de ferramentas de programação. Essas ferramentas podem ser programas relativamente autônomos, como compiladores, depuradores, interpretadores, vinculadores e editores de texto, que podem ser combinados para realizar uma tarefa; ou podem formar um ambiente de desenvolvimento integrado (IDE), que combina grande parte ou toda a funcionalidade dessas ferramentas independentes. Os IDEs podem fazer isso invocando as ferramentas individuais relevantes ou reimplementando sua funcionalidade de uma nova maneira. Um IDE pode facilitar tarefas específicas, como pesquisar arquivos em um projeto específico. Muitas implementações de linguagem de programação oferecem a opção de usar ferramentas individuais ou um IDE.

Tópicos

Arquitetura

Pessoas que usam computadores modernos de uso geral (em oposição a sistemas embarcados, computadores analógicos e supercomputadores) geralmente veem três camadas de software executando uma variedade de tarefas: plataforma, aplicativo e software de usuário.

  • Software de plataforma: A plataforma inclui o firmware, drivers de dispositivo, um sistema operacional e tipicamente uma interface gráfica do usuário que, no total, permite que um usuário interaja com o computador e seus periféricos (equipamento associado). Software de plataforma muitas vezes vem junto com o computador. Em um PC geralmente terá a capacidade de alterar o software da plataforma.
  • Software de aplicação: Software de aplicação é o que a maioria das pessoas pensa de quando pensam de software. Exemplos típicos incluem suites de escritório e jogos de vídeo. O software de aplicação é frequentemente comprado separadamente do hardware do computador. Às vezes, os aplicativos são empacotados com o computador, mas isso não muda o fato de que eles funcionam como aplicativos independentes. As aplicações são geralmente programas independentes do sistema operacional, embora muitas vezes sejam adaptados para plataformas específicas. A maioria dos usuários pensa em compiladores, bancos de dados e outros "software de sistema" como aplicativos.
  • Software escrito pelo usuário: O desenvolvimento do usuário final adapta sistemas para atender às necessidades específicas dos usuários. O software do usuário inclui modelos de planilha e modelos de processador de texto. Mesmo os filtros de e-mail são um tipo de software de usuário. Os usuários criam este software em si e muitas vezes ignoram o quão importante é. Dependendo de como o software escrito pelo usuário foi integrado em pacotes de aplicativos padrão, muitos usuários podem não estar cientes da distinção entre os pacotes originais e o que foi adicionado por colegas.

Execução

O software de computador deve ser "carregado" no armazenamento do computador (como o disco rígido ou a memória). Uma vez carregado o software, o computador pode executar o software. Isso envolve a passagem de instruções do software aplicativo, por meio do software do sistema, para o hardware que, por fim, recebe a instrução como código de máquina. Cada instrução faz com que o computador execute uma operação – movendo dados, realizando uma computação ou alterando o fluxo de controle das instruções.

A movimentação de dados geralmente ocorre de um lugar na memória para outro. Às vezes, envolve a movimentação de dados entre a memória e os registradores que permitem o acesso de dados em alta velocidade na CPU. Mover dados, especialmente grandes quantidades, pode ser caro; isso às vezes é evitado usando "ponteiros" em vez de dados. Os cálculos incluem operações simples, como incrementar o valor de um elemento de dados variável. Cálculos mais complexos podem envolver muitas operações e elementos de dados juntos.

Qualidade e confiabilidade

A qualidade do software é muito importante, especialmente para software comercial e de sistema. Se o software estiver com defeito, ele pode excluir o trabalho de uma pessoa, travar o computador e fazer outras coisas inesperadas. Falhas e erros são chamados de "bugs" que geralmente são descobertos durante os testes alfa e beta. O software também costuma ser vítima do que é conhecido como envelhecimento do software, a degradação progressiva do desempenho resultante de uma combinação de bugs invisíveis.

Muitos bugs são descobertos e corrigidos por meio de testes de software. No entanto, o teste de software raramente - ou nunca - elimina todos os bugs; alguns programadores dizem que "todo programa tem pelo menos mais um bug" (Lei de Lubarsky). No método cascata de desenvolvimento de software, normalmente são empregadas equipes de teste separadas, mas em abordagens mais recentes, denominadas coletivamente de desenvolvimento de software ágil, os desenvolvedores costumam fazer todos os seus próprios testes e demonstrar o software aos usuários/clientes regularmente para obter feedback. O software pode ser testado por meio de testes de unidade, testes de regressão e outros métodos, que são feitos manualmente ou, mais comumente, automaticamente, pois a quantidade de código a ser testado pode ser grande. Os programas que contêm software de comando permitem que a engenharia de hardware e as operações do sistema funcionem juntas com muito mais facilidade.

Licença

A licença do software dá ao usuário o direito de usar o software no ambiente licenciado e, no caso de licenças de software livre, também concede outros direitos, como o direito de fazer cópias.

O software proprietário pode ser dividido em dois tipos:

  • freeware, que inclui a categoria de software "free trial" ou software "freemium" (no passado, o termo shareware foi frequentemente usado para software de teste / livre). Como o nome sugere, freeware pode ser usado gratuitamente, embora no caso de testes gratuitos ou software de freemium, isso é às vezes apenas verdadeiro por um período limitado de tempo ou com funcionalidade limitada.
  • software disponível por uma taxa, que só pode ser legalmente utilizado na compra de uma licença.

O software de código aberto vem com uma licença de software livre, concedendo ao destinatário o direito de modificar e redistribuir o software.

Patentes

As patentes de software, como outros tipos de patentes, teoricamente devem dar ao inventor uma licença exclusiva e limitada por tempo para uma ideia detalhada (por exemplo, um algoritmo) sobre como implementar um pedaço de software, ou um componente de um software. Ideias para coisas úteis que o software poderia fazer e requisitos do usuário não devem ser patenteáveis, e implementações concretas (ou seja, os pacotes de software reais que implementam a patente) não devem ser patenteadas também não podem ser patenteados - os últimos já estão cobertos por direitos autorais, geralmente de forma automática. Portanto, as patentes de software devem cobrir a área intermediária, entre os requisitos e a implementação concreta. Em alguns países, um requisito para que a invenção reivindicada tenha efeito no mundo físico também pode fazer parte dos requisitos para que uma patente de software seja considerada válida - embora, como todo software útil tenha efeitos no mundo físico, este requisito pode estar aberto a debate. Enquanto isso, a lei de direitos autorais americana foi aplicada a vários aspectos da escrita do código de software.

As patentes de software são controversas na indústria de software, com muitas pessoas tendo opiniões diferentes sobre elas. Uma das fontes de controvérsia é que a divisão acima mencionada entre ideias iniciais e patentes não parece ser honrada na prática pelos advogados de patentes - por exemplo, a patente para programação orientada a aspectos (AOP), que pretendia reivindicar direitos sobre qualquer ferramenta de programação que implemente a ideia de AOP, seja qual for a implementação. Outra fonte de controvérsia é o efeito sobre a inovação, com muitos especialistas e empresas ilustres argumentando que o software é um campo tão dinâmico que as patentes de software apenas criam enormes custos e riscos adicionais de litígio e, na verdade, retardam a inovação. No caso de debates sobre patentes de software fora dos Estados Unidos, tem-se argumentado que grandes corporações americanas e advogados de patentes provavelmente serão os principais beneficiários de permitir ou continuar a permitir patentes de software.

Design e implementação

O design e a implementação do software variam dependendo da complexidade do software. Por exemplo, o design e a criação do Microsoft Word levaram muito mais tempo do que projetar e desenvolver o Microsoft Notepad porque o primeiro tem muito mais funcionalidades básicas.

O software geralmente é desenvolvido em ambientes de desenvolvimento integrado (IDE) como Eclipse, IntelliJ e Microsoft Visual Studio que podem simplificar o processo e compilar o software. Conforme observado em uma seção diferente, o software geralmente é criado com base no software existente e na interface de programação de aplicativos (API) fornecida pelo software subjacente, como GTK+, JavaBeans ou Swing. Bibliotecas (APIs) podem ser categorizadas por sua finalidade. Por exemplo, o Spring Framework é usado para implementar aplicativos corporativos, a biblioteca Windows Forms é usada para projetar aplicativos de interface gráfica do usuário (GUI) como o Microsoft Word e o Windows Communication Foundation é usado para projetar serviços da Web. Quando um programa é projetado, ele depende da API. Por exemplo, um aplicativo de área de trabalho do Microsoft Windows pode chamar funções de API na biblioteca.NET Windows Forms como Form1.Close() e Form1.Show() para fechar ou abrir o aplicativo. Sem essas APIs, o programador precisa escrever essas funcionalidades inteiramente por conta própria. Empresas como Oracle e Microsoft fornecem suas próprias APIs para que muitos aplicativos sejam escritos usando suas bibliotecas de software que geralmente possuem várias APIs.

Estruturas de dados como tabelas hash, arrays e árvores binárias, e algoritmos como quicksort, podem ser úteis para criar software.

O software de computador tem características econômicas especiais que tornam seu design, criação e distribuição diferentes da maioria dos outros bens econômicos.

Uma pessoa que cria software é chamada de programador, engenheiro de software ou desenvolvedor de software, termos que têm um significado semelhante. Também existem termos mais informais para programador, como "codificador" e "hacker" – embora o uso da última palavra possa causar confusão, porque é mais frequentemente usado para significar alguém que invade ilegalmente sistemas de computador.

Contenido relacionado

KSC

KSC pode referir-se...

Químico

Um químico alquimia; substituindo quimista do latim medieval alquimista) é um cientista treinado no estudo da química. Os químicos estudam a composição...

Brian Aldiss

Brian Wilson Aldiss OBE foi um escritor, artista e editor de antologia inglês, mais conhecido por romances e contos de ficção científica. Sua assinatura...
Más resultados...
Tamaño del texto:
Copiar