 |
Trecho de programa em linguagem C.
|
A linguagem de programação é um método padronizado, formado por um conjunto de regras sintáticas e semânticas, de implementação de um código fonte - que pode ser compilado e transformado em um programa de computador , ou usado como script interpretado - que informará instruções de processamento ao computador . Permite que um programador especifique especificamente quais dados o computador irá atuar, como esses dados serão armazenados ou transmitidos e quais ações deverão ser tomadas de acordo com as obrigações. Linguagens de programação podem ser usadas para expressar algoritmos com precisão.
O conjunto de palavras (lexemas classificados em tokens), composto de acordo com essas regras, específicas do código fonte de um software . Esse código fonte é depois traduzido para código de máquina , que é executado pelo microprocessador .
Uma das principais metas das linguagens de programação é que os programadores têm uma maior produtividade, permitindo expressar seus interesses mais facilmente do que quando comparado com a linguagem que um computador entende nativamente ( código de máquina ). Assim, linguagens de programação são projetadas para adotar uma sintaxe de nível mais alto, que pode ser mais facilmente compreendida por programadores humanos . Linguagens de programação são ferramentas importantes para que programadores e engenheiros de software possam escrever programas mais organizados e com maior rapidez.
Linguagens de programação também tornam os programas menos dependentes de computadores ou ambientes computacionais específicos (propriedade chamada de portabilidade). Isso porque programas escritos em linguagens de programação acontecem são traduzidos para o código da máquina do computador e não serão executados em vez de serem diretamente executados. Uma meta ambiciosa do Fortran , uma das primeiras linguagens de programação, era essa independência da máquina onde seria executada.
História |
| Ada Lovelace |
O primeiro trabalho de linguagem de programação foi criado por Ada Lovelace , grande amiga de Charles Babbage .
O projeto da primeira calculadora mecânica programável foi idealizado por Charles Babbage que, após gastar fortunas e um longo tempo, não conseguiu concretizar o projeto. A linguagem de programação ADA foi batizada em homenagem a esta primeira programadora.
Uma das primeiras linguagens de programação para computadores foi provavelmente Plankalkül , criada por Konrad Zuse na Alemanha Nazista, mas que teve pouco ou nenhum impacto no futuro das linguagens de programação.
 |
| Grace Hopper-1984 |
O primeiro compilado foi escrito por Grace Hopper , em 1952, para a linguagem de programação A-0 . A primeira linguagem de programação de alto nível amplamente usada foi Fortran , criada em 1954. Em 1957 foi criada B-0 , sucessora de A-0 , que daria origem a Flow-Matic (1958), antecessor imediato de COBOL , de 1959. O COBOL foi uma linguagem de ampla gama acessível para uso comercial. A linguagem ALGOL foi criada em 1958-1960. O ALGOL-60 teve grande influência no projeto de muitas linguagens posteriores.
A linguagem Lisp foi criada em 1958 e se tornou amplamente utilizada na pesquisa na área de ciência da computação mais proeminentemente na área de Inteligência Artificial . Outra linguagem relacionada ao campo da IA que surgiu em 1972 é a linguagem Prolog , uma linguagem do paradigma lógico.
A orientação a objetos é outro marco importante na história das linguagens de programação . A linguagem Simula 67 apresenta o conceito de aulas. A linguagem Smalltalk expande o conceito de aulas e se torna a primeira linguagem de programação que oferece suporte completo à programação orientada a objetos. A linguagem C++ (originalmente conhecida como C com classes) populariza a orientação para objetos.
Diversas linguagens de programação surgiram desde então. Entre estes estão C# , VB.NET , Java, Object Pascal , Objective-C , PHP , Python , Super Collider , linguagem D e Ruby .
Interpretação e compilação
Uma linguagem de programação pode ser convertida, ou traduzida, em código de máquina por compilação ou interpretada por um processo denominado interpretação . Em ambas ocorre a tradução do código fonte para código de máquina.
Se o método utilizado traduz todo o texto do programa (também chamado de código), para só depois executar o programa, então diz-se que o programa foi compilado e que o mecanismo utilizado para a tradução é um compilador (que por sua vez nada mais é do que um programa). A versão compilada do programa especificado é armazenada, de forma que o programa pode ser executado um número indefinido de vezes sem que seja necessidade de nova compilação, o que compensa o tempo gasto na compilação. Isso acontece com linguagens como Pascal e C .
Se o texto do programa for executado à medida que for traduzido, como em JavaScript , BASIC , Python ou Perl , num processo de tradução de trechos seguidos de sua execução imediata, então diz-se que o programa foi interpretado e que o mecanismo utilizado para a tradução é um interpretador. Programas interpretados são geralmente mais lentos do que os compilados, mas também são geralmente mais flexíveis, já que podem interagir com o ambiente de forma mais fácil.
Embora haja essa distinção entre linguagens interpretadas e compiladas , as coisas nem sempre são tão simples. Existem linguagens compiladas para um código de máquina virtual (sendo esta máquina virtual apenas mais um software, que emula uma máquina virtual sendo executada em uma máquina real), como Java (compila para a plataforma Java ) e C# (compila para a plataforma CLI ). E também há outras formas de interpretar em que os códigos fontes , ao invés de serem interpretados linha-a-linha, têm blocos "compilados" para a memória, de acordo com as necessidades, o que aumenta o desempenho dos programas quando os mesmos módulos são chamados várias vezes, técnica esta conhecida como JIT .
Como exemplo, podemos citar a linguagem Java . Nela, um compilador traduz o código java para o código intermediário (e portável) da JVM . As JVMs originais interpretavam esse código, de acordo com o código da máquina do computador hospedeiro, porém atualmente elas compilam, segundo a técnica JIT o código JVM para código hospedeiro.
A tradução é geralmente feita em várias fases, sendo as mais comuns a análise léxica , a análise sintática (ou parsing ), a geração de código e a otimização . Em compiladores também é comum a geração de código intermediário.
Conceitos
PROGRAMAÇÃO ESTRUTURADA
Programação estruturada é uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e repetição. Um dos primeiros a preconizar a programação estruturada por Haskell B. Curry Tendo, na prática, sido transformada em Programação modular, a Programação estruturada orienta os programadores para a criação de estruturas simples em seus programas, usando as sub-rotinas e as funções. Foi uma forma dominante na criação de software entre a programação linear e a programação orientada por objetos. Apesar de ter sido bem sucedido pela programação orientada por objetos, pode-se dizer que a programação estruturada ainda é marcantemente influente, uma vez que grande parte das pessoas ainda aprendem programação através dela. Porém, a orientação a objetos superou o uso das linguagens estruturadas no mercado .
 |
| Niklaus Wirth |
PROGRAMAÇÃO MODULAR
Niklaus Wirth em 2005. Criador da linguagem Pascal entre outras.
Programação modular é uma forma de programação no qual o desenvolvimento das rotinas de programação é feito através de módulos, que são interligados entre si através de uma interface comum. Foi apresentado originalmente pelo Information & Systems Institute, Inc. no National Symposium on Modular Programming em 1968, com a liderança de Larry Constantine. Exemplos de linguagens que orientaram seu projeto para este aspecto são as linguagens Modula-2, desenvolvidas por Niklaus Wirth e a Modula-3 .
PROGRAMAÇÃO ORIENTADA A OBJETOS
Orientação a objetos , também conhecida como ProgramaçãoOrientada a Objetos (POO), ou ainda em inglês Object-Oriented Programming ( OOP) é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos . O uso extensivo de objetos, especialmente em conjunto com o mecanismo de partilha , caracterizando o estilo de programação orientado a objetos. Em alguns contextos, prefira usar modelagem orientada ao objeto (UML), em vez de programação. De fato, o paradigma "orientação a objetos" tem bases conceituais e origem no campo de estudo da cognição, que influenciou a área de inteligência artificial e da linguística no campo de abstração de conceitos do mundo real. Na qualidade do método de modelagem, é tida como a melhor estratégia, e mais natural, para se eliminar a "lacuna semântica", dificuldade recorrente no processo de modelar o mundo real, no domínio do problema, em um conjunto de componentes de software que é o mais fiel na sua representação deste domínio. Facilitaria a comunicação do modelador profissional e do usuário da área alvo, na medida em que a representação da simbologia e conceitos abstratos do mundo real e a ferramenta de modelagem (conceitos, terminologia, símbolos, grafismo e estratégias) fossem o mais óbvio, natural e exato possível. A análise e projeto orientou os objetos como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre esses objetos. Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definido nos métodos ) e estados possíveis ( atributos ) de seus objetos, assim como o relacionamento com outros objetos.
PROGRAMAÇÃO LINEAR E NÃO-LINEAR
Em matemática, problemas de Programação Linear, são problemas cuja função objetivo e as restrições são todas lineares. Caso algumas dessas funções ou restrições sejam não-lineares, é um caso de Programação Não-Linear. Ambas são divisões importantes da área de otimização, exigindo técnicas diferenciadas.
Muitos problemas práticos em pesquisa operacional podem ser expressos como problemas de programação linear. Certos casos especiais de programação linear, tais como problemas de fluxo de rede e problemas de fluxo de multicommodities são considerados importantes o suficientes para que sejam gerados muita pesquisa em algoritmos especializados para suas soluções. Vários algoritmos para outros tipos de problemas de otimização funcionam resolvendo problemas de PL como subproblemas. Historicamente, ideias de programação linear inspiraram muitos dos conceitos centrais de teoria da otimização, tais como dualidade, durabilidade, e a importância da convexidade e suas generalizações.
Classificação
As linguagens de programação podem ser definidas e subclassificadas de várias formas.
CLASSIFICAÇÃO DA ACM
A ACM mantém um sistema de classificação com os seguintes subitens:
° Linguagens aplicativas, ou de aplicação
° Linguagens concorrentes, distribuídas e paralelas
° Linguagens de fluxo de dados
° Linguagens de projeto
° Linguagens extensíveis
° Linguagens de montagem e de macro
° Linguagens de microprogramação
° Linguagens não determinísticas
° Linguagens não processuais
° Linguagens orientadas a objeto
° Linguagens de aplicação especializada
° Linguagens de altíssimo nível
QUANTO AO PARADIGMA
Diferentes linguagens de programação podem ser agrupadas segundo o paradigma que segue para abordar sua sintaxe e semântica. Os paradigmas se dividem em dois grandes grupos: imperativo e declarativo.
Um paradigma de programação fornece e determina a visão que o programador possui sobre a estruturação e execução do programa. Por exemplo, na programação orientada a objetos, os programadores podem abstrair um programa como uma coleção de objetos que interagem entre si, enquanto na programação funcional os programadores abstraem o programa como uma sequência de funções de modo empilhado.
PARADIGMAS IMPERATIVOS
Os paradigmas imperativos são aqueles que facilitam a computação por meio de mudanças de estado. Se divida em:
° O paradigma processual. Neste paradigma, os programas são executados através de chamadas sucessivas a procedimentos separados. Exemplos de linguagens deste paradigma são o Fortran e o BASIC.
° O paradigma de estruturas de blocos. A característica marcante deste paradigma são os escopos aninhados. Exemplos de linguagens deste paradigma são ALGOL 60, Pascal e C.
° O paradigma de orientação para objetos. Este paradigma descreve linguagens que suportam a interação entre objetos. Exemplos de linguagens deste paradigma são C++, linguagem D, Java, Python e Ruby.
° O paradigma da distribuição distribuída. Este paradigma sustenta que mais de uma rotina possa ser realizada de forma independente. Um exemplo de linguagem deste paradigma é a linguagem Ada.
PARADIGMAS DECLARATIVOS
Os paradigmas declarativos são aqueles nos quais um programa especifica uma relação ou função. Se divida em:
° O paradigma funcional. Linguagens deste paradigma não incluem qualquer provisão para atribuição ou dados mutáveis Na programação funcional, o mapeamento entre os valores de entrada e saída são exercícios mais diretamente. Um programa é uma função (ou grupo de funções), previsto para outras funções mais simples. Exemplos de linguagens deste paradigma são as linguagens Lisp, Scheme e Haskell
° O paradigma da programação lógica. Este paradigma baseia-se na noção de que um programa implementa uma relação ao invés de um mapeamento. Exemplos de linguagens deste paradigma são o Prolog e a linguagem Gödel.
QUANTO A ESTRUTURA DE TIPOS
As linguagens de programação podem ser definidas de duas formas ortogonais quanto a sua estrutura de tipos.
Forte ou Fracamente Tipada
° Fracamente típico, como PHP e Smalltalk, onde o tipo de variável muda dinamicamente conforme a situação.
° Fortemente tipada, como Java, Ruby e Python onde o tipo de variável, uma vez atribuída, se mantém o mesmo até ser descartada da memória.
Dinâmica ou Estaticamente Tipada
° Dinamicamente tipada, como SNOBOL, APL, Awk, Perl, Python e Ruby, onde o tipo de variável é definido em tempo de execução.
° Estaticamente tipada, como Java e C, onde o tipo de variável é definido em tempo de compilação.
QUANTO AO GRAU DE ABSTRAÇÃO
Linguagem de programação de baixo nível trata-se de uma linguagem de programação que segue as características da arquitetura do computador. Assim, utiliza apenas instruções que serão executadas pelo processador, em contrapartida às linguagens de alto nível que utilizam instruções abstratas. Nesse sentido, as linguagens de baixo nível estão diretamente relacionadas com a arquitetura do computador. Como exemplos, temos Binário e Assembly
As linguagens de baixo nível são divididas em duas categorias: primeira geração e segunda geração:
1. A linguagem de primeira geração, ou 1GL, é o código de máquina. É a única linguagem que um microprocessador pode executar nativamente. O código da máquina pode ser escrito diretamente por um editor hexadecimal. Atualmente é raro que um programador trabalhe com o código de máquina diretamente, preferindo o uso da linguagem Assembly.
2. A linguagem de segunda geração, ou 2GL, é a linguagem Assembly. É considerado de baixo nível, pois embora não seja uma linguagem nativa do microprocessador, ainda assim utiliza apenas as instruções reais do processador. Desta forma a linguagem Assembly não contém nenhum tipo de instrução abstrata, onde cada instrução é convertida diretamente para a instrução equivalente em código de máquina pelo montador.
° Linguagem de programação de médio nível, que possui símbolos que podem ser convertidos diretamente para código de máquina (goto, expressões matemáticas, atribuição de variáveis), mas também símbolos complexos que são convertidos por um compilador. Exemplo: C, C++
° Linguagem de programação de alto nível, é uma linguagem com um nível de abstração relativamente elevado, longe do código de máquina e mais próximo à linguagem humana. Dessa forma, as linguagens de alto nível não estão diretamente relacionadas à arquitetura do computador. O programador de uma linguagem de alto nível não precisa conhecer características do processador, como instruções e registradores. Essas características são abstraídas na linguagem de alto nível.
Uma linguagem de alto nível é inteligível pelo ser humano e não pode ser experimentada diretamente pela máquina, no nível da concepção de algoritmos, como Pascal, Fortran, ALGOL,Java e SQL.
Exemplos:
° ASP
° MATLAB
° ActionScript
° PHP
° C/C++
° Python
° C#
° R
° Pascal/Objeto Pascal
° Ruby
° Java
° Rust
° JavaScript
° Tcl
° Lua
° Básic/Visual Basic
Por se tratar de uma classificação subjetiva, isto é, sem limites bem definidos, não é possível afirmar que "determinada linguagem pode ser mais humana que outra". Apesar disso, por questão de praticabilidade e objetividade, a classificação geralmente se limita em "linguagem de alto nível" e "linguagem de baixo nível".
QUANTO À GERAÇÃO
A classificação das linguagens de programação em gerações é uma questão que apresenta divergências de autor para autor. Segundo Maclennan, as linguagens se dividem em cinco gerações com as seguintes características:
°Primeira geração - São linguagens onde suas estruturas de controle são aparentemente externas para a máquina. As instruções condicionais não são aninhadas e depende fortemente de instruções de desvio incondicional como o GOTO . Uma linguagem típica desta geração é a linguagem Fortran.
° Segunda geração - São linguagens onde as estruturas de controle são estruturadas de forma a minimizar ou dispensar o uso de instruções GOTO. A segunda geração elaborou melhor e generalizou diversas estruturas de controle das linguagens da primeira geração. Uma das grandes contribuições desta geração foi suas estruturas de nomes, que eram hierarquicamente aninhadas. Isto permitiu um melhor controle de espaços de nomes e uma alocação dinâmica de memória eficiente. Uma linguagem típica desta geração é o ALGOL 60.
° Terceira geração - São linguagens que dão ênfase à simplicidade e eficiência. Uma linguagem típica desta geração é a linguagem Pascal. As estruturas de dados desta geração mostram um posicionamento da máquina para a aplicação. As estruturas de controle são mais simples e eficientes.
° Quarta geração - Esta geração é essencialmente o sinônimo para linguagens com abstração de dados. A maioria das linguagens desta geração foca na modularização e no encapsulamento. Uma linguagem típica desta geração é a linguagem Ada.
° Quinta geração - Nesta geração, Maclennan agrupou diversos paradigmas como a orientação a objeto e o paradigma funcional, paradigma lógico.
Henri Bal e Dick Grune, já apresentam uma classificação em gerações de forma diferente, enfatizando mais o aspecto da aplicação. São elencadas 6 gerações.
° Primeira geração - linguagem de máquina.
° Segunda geração - linguagens de montagem. (assemby).
° Terceira geração - Linguagens processuais.
° Quarta geração - Linguagens aplicativas.
° Quinta geração - Linguagens externas a inteligência artificial como as linguagens lógicas (Prolog) e as linguagens funcionais (Lisp).
°Sexta geração - Redes neurais.
Doris Apleby e Julius J. VandeKopple dividem as linguagens em quatro gerações que coincidem com as quatro primeiras gerações elencadas por Henri Bal e Dick Grune.
LISTA DE LINGUAGENS
Livros sobre diversas linguagens de programação:
Existem inúmeras linguagens de programação ; as 19 linguagens de programação mais populares, de acordo com pesquisa divulgada pela RedMonk em março de 2024, são:
1. JavaScript
2. Python
3. Java
4. PHP
5. C#
6. TipoScript
7. C++
8. Rubi
9. C
10. Rápido
11. Vá
12. R
13. Script de shell
14. Objetivo-C
15. Escala
16. Kotlin
17. PowerShell
18. Ferrugem
19. Dardo
Comentários
Postar um comentário