b'\n_START_ARTICLE_\nLinguagem de programa\xc3\xa7\xc3\xa3o\n_START_PARAGRAPH_\nA linguagem de programa\xc3\xa7\xc3\xa3o \xc3\xa9 um m\xc3\xa9todo padronizado para comunicar instru\xc3\xa7\xc3\xb5es para um computador. \xc3\x89 um conjunto de regras sint\xc3\xa1ticas e sem\xc3\xa2nticas usadas para definir um programa de computador. Permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados ser\xc3\xa3o armazenados ou transmitidos e quais a\xc3\xa7\xc3\xb5es devem ser tomadas sob v\xc3\xa1rias circunst\xc3\xa2ncias. Linguagens de programa\xc3\xa7\xc3\xa3o podem ser usadas para expressar algoritmos com precis\xc3\xa3o._NEWLINE_O conjunto de palavras (lexemas classificados em tokens), compostos de acordo com essas regras, constituem o c\xc3\xb3digo fonte de um software. Esse c\xc3\xb3digo fonte \xc3\xa9 depois traduzido para c\xc3\xb3digo de m\xc3\xa1quina, que \xc3\xa9 executado pelo microprocessador._NEWLINE_Uma das principais metas das linguagens de programa\xc3\xa7\xc3\xa3o \xc3\xa9 que programadores tenham uma maior produtividade, permitindo expressar suas inten\xc3\xa7\xc3\xb5es mais facilmente do que quando comparado com a linguagem que um computador entende nativamente (c\xc3\xb3digo de m\xc3\xa1quina). Assim, linguagens de programa\xc3\xa7\xc3\xa3o s\xc3\xa3o projetadas para adotar uma sintaxe de n\xc3\xadvel mais alto, que pode ser mais facilmente entendida por programadores humanos. Linguagens de programa\xc3\xa7\xc3\xa3o s\xc3\xa3o ferramentas importantes para que programadores e engenheiros de software possam escrever programas mais organizados e com maior rapidez._NEWLINE_Linguagens de programa\xc3\xa7\xc3\xa3o tamb\xc3\xa9m tornam os programas menos dependentes de computadores ou ambientes computacionais espec\xc3\xadficos (propriedade chamada de portabilidade). Isto acontece porque programas escritos em linguagens de programa\xc3\xa7\xc3\xa3o s\xc3\xa3o traduzidos para o c\xc3\xb3digo de m\xc3\xa1quina do computador no qual ser\xc3\xa1 executado em vez de ser diretamente executado. Uma meta ambiciosa do Fortran, uma das primeiras linguagens de programa\xc3\xa7\xc3\xa3o, era esta independ\xc3\xaancia da m\xc3\xa1quina onde seria executada.\n_START_SECTION_\nHist\xc3\xb3ria\n_START_PARAGRAPH_\nO primeiro trabalho de linguagem de programa\xc3\xa7\xc3\xa3o foi criado por Ada Lovelace, grande amiga de Charles Babbage. O projeto da primeira calculadora mec\xc3\xa2nica program\xc3\xa1vel foi idealizado por Charles Babbage que, ap\xc3\xb3s gastar fortunas e um longo tempo, n\xc3\xa3o conseguiu concretizar o projeto. A linguagem de programa\xc3\xa7\xc3\xa3o ADA foi batizada em homenagem a esta primeira programadora._NEWLINE_Uma das primeiras linguagens de programa\xc3\xa7\xc3\xa3o para computadores foi provavelmente Plankalk\xc3\xbcl, criada por Konrad Zuse na Alemanha Nazista, mas que teve pouco ou nenhum impacto no futuro das linguagens de programa\xc3\xa7\xc3\xa3o. _NEWLINE_O primeiro compilador foi escrito por Grace Hopper, em 1952, para a linguagem de programa\xc3\xa7\xc3\xa3o A-0. A primeira linguagem de programa\xc3\xa7\xc3\xa3o de alto n\xc3\xadvel amplamente usada foi Fortran, criada em 1954. Em 1957 foi criada B-0, sucessora da A-0, que daria origem a Flow-Matic (1958), antecessor imediato de COBOL, de 1959. O COBOL foi uma linguagem de ampla aceita\xc3\xa7\xc3\xa3o para uso comercial. A linguagem ALGOL foi criada em 1958-1960 O ALGOL-60 teve grande influ\xc3\xaancia no projeto de muitas linguagens posteriores._NEWLINE_A linguagem Lisp foi criada em 1958 e se tornou amplamente utilizada na pesquisa na \xc3\xa1rea de ci\xc3\xaancia da computa\xc3\xa7\xc3\xa3o mais proeminentemente na \xc3\xa1rea de Intelig\xc3\xaancia Artificial. Outra linguagem relacionada ao campo da IA que surge em 1972 \xc3\xa9 a linguagem Prolog, uma linguagem do paradigma l\xc3\xb3gico._NEWLINE_A orienta\xc3\xa7\xc3\xa3o a objetos \xc3\xa9 outro marco importante na hist\xc3\xb3ria das linguagens de programa\xc3\xa7\xc3\xa3o. A linguagem Simula 67 introduz o conceito de classes. A linguagem Smalltalk  expande o conceito de classes e se torna a primeira linguagem de programa\xc3\xa7\xc3\xa3o que oferecia suporte completo \xc3\xa0 programa\xc3\xa7\xc3\xa3o orientada a objetos. A linguagem C++ (originalmente conhecida como C com classes) populariza a orienta\xc3\xa7\xc3\xa3o a objetos._NEWLINE_Diversas linguagens de programa\xc3\xa7\xc3\xa3o surgiram desde ent\xc3\xa3o. Entre estas incluem-se C#,  VB.NET, Java, Object Pascal, Objective-C, PHP, Python, SuperCollider, linguagem D e Ruby.\n_START_SECTION_\nInterpreta\xc3\xa7\xc3\xa3o e compila\xc3\xa7\xc3\xa3o\n_START_PARAGRAPH_\nUma linguagem de programa\xc3\xa7\xc3\xa3o pode ser convertida, ou traduzida, em c\xc3\xb3digo de m\xc3\xa1quina por compila\xc3\xa7\xc3\xa3o ou interpretada por um processo denominado interpreta\xc3\xa7\xc3\xa3o. Em ambas ocorre a tradu\xc3\xa7\xc3\xa3o do c\xc3\xb3digo fonte para c\xc3\xb3digo de m\xc3\xa1quina._NEWLINE_Se o m\xc3\xa9todo utilizado traduz todo o texto do programa (tamb\xc3\xa9m chamado de c\xc3\xb3digo), para s\xc3\xb3 depois executar o programa, ent\xc3\xa3o diz-se que o programa foi compilado e que o mecanismo utilizado para a tradu\xc3\xa7\xc3\xa3o \xc3\xa9 um compilador (que por sua vez nada mais \xc3\xa9 do que um programa). A vers\xc3\xa3o compilada do programa tipicamente \xc3\xa9 armazenada, de forma que o programa pode ser executado um n\xc3\xbamero indefinido de vezes sem que seja necess\xc3\xa1ria nova compila\xc3\xa7\xc3\xa3o, o que compensa o tempo gasto na compila\xc3\xa7\xc3\xa3o. Isso acontece com linguagens como Pascal e C._NEWLINE_Se o texto do programa \xc3\xa9 executado \xc3\xa0 medida que vai sendo traduzido, como em JavaScript, BASIC, Python ou Perl, num processo de tradu\xc3\xa7\xc3\xa3o de trechos seguidos de sua execu\xc3\xa7\xc3\xa3o imediata, ent\xc3\xa3o diz-se que o programa foi interpretado e que o mecanismo utilizado para a tradu\xc3\xa7\xc3\xa3o \xc3\xa9 um interpretador. Programas interpretados s\xc3\xa3o geralmente mais lentos do que os compilados, mas s\xc3\xa3o tamb\xc3\xa9m geralmente mais flex\xc3\xadveis, j\xc3\xa1 que podem interagir com o ambiente mais facilmente._NEWLINE_Embora haja essa distin\xc3\xa7\xc3\xa3o entre linguagens interpretadas e compiladas, as coisas nem sempre s\xc3\xa3o t\xc3\xa3o simples. H\xc3\xa1 linguagens compiladas para um c\xc3\xb3digo de m\xc3\xa1quina virtual (sendo esta m\xc3\xa1quina virtual apenas mais um software, que emula a m\xc3\xa1quina virtual sendo executado em uma m\xc3\xa1quina real), como Java  (compila para a plataforma Java) e C# (compila para a plataforma CLI). E tamb\xc3\xa9m h\xc3\xa1 outras formas de interpretar em que os c\xc3\xb3digos fontes, ao inv\xc3\xa9s de serem interpretados linha-a-linha, t\xc3\xaam blocos "compilados" para a mem\xc3\xb3ria, de acordo com as necessidades, o que aumenta a performance dos programas quando os mesmos m\xc3\xb3dulos s\xc3\xa3o chamados v\xc3\xa1rias vezes, t\xc3\xa9cnica esta conhecida como JIT._NEWLINE_Como exemplo, podemos citar a linguagem Java. Nela, um compilador traduz o c\xc3\xb3digo java para o c\xc3\xb3digo intermedi\xc3\xa1rio (e port\xc3\xa1vel) da JVM. As JVMs originais interpretavam esse c\xc3\xb3digo, de acordo com o c\xc3\xb3digo de m\xc3\xa1quina do computador hospedeiro, por\xc3\xa9m atualmente elas compilam, segundo a t\xc3\xa9cnica JIT o c\xc3\xb3digo JVM para c\xc3\xb3digo hospedeiro._NEWLINE_A tradu\xc3\xa7\xc3\xa3o \xc3\xa9 tipicamente feita em v\xc3\xa1rias fases, sendo as mais comuns a an\xc3\xa1lise l\xc3\xa9xica, a an\xc3\xa1lise sint\xc3\xa1tica (ou parsing), a gera\xc3\xa7\xc3\xa3o de c\xc3\xb3digo e a otimiza\xc3\xa7\xc3\xa3o. Em compiladores tamb\xc3\xa9m \xc3\xa9 comum a gera\xc3\xa7\xc3\xa3o de c\xc3\xb3digo intermedi\xc3\xa1rio.\n_START_SECTION_\nPrograma\xc3\xa7\xc3\xa3o estruturada\n_START_PARAGRAPH_\nPrograma\xc3\xa7\xc3\xa3o estruturada \xc3\xa9 uma forma de programa\xc3\xa7\xc3\xa3o de computadores que preconiza que todos os programas poss\xc3\xadveis podem ser reduzidos a apenas tr\xc3\xaas estruturas: sequ\xc3\xaancia, decis\xc3\xa3o e repeti\xc3\xa7\xc3\xa3o. Um dos primeiros a preconizar a programa\xc3\xa7\xc3\xa3o estruturada foi Haskell B. Curry Tendo, na pr\xc3\xa1tica, sido transformada na Programa\xc3\xa7\xc3\xa3o modular, a Programa\xc3\xa7\xc3\xa3o estruturada orienta os programadores para a cria\xc3\xa7\xc3\xa3o de estruturas simples em seus programas, usando as sub-rotinas e as fun\xc3\xa7\xc3\xb5es. Foi a forma dominante na cria\xc3\xa7\xc3\xa3o de software entre a programa\xc3\xa7\xc3\xa3o linear e a programa\xc3\xa7\xc3\xa3o orientada por objetos. Apesar de ter sido sucedida pela programa\xc3\xa7\xc3\xa3o orientada por objetos, pode-se dizer que a programa\xc3\xa7\xc3\xa3o estruturada ainda \xc3\xa9 marcantemente influente, uma vez que grande parte das pessoas ainda aprendem programa\xc3\xa7\xc3\xa3o atrav\xc3\xa9s dela. Por\xc3\xa9m, a orienta\xc3\xa7\xc3\xa3o a objetos superou o uso das linguagens estruturadas no mercado.\n_START_SECTION_\nPrograma\xc3\xa7\xc3\xa3o modular\n_START_PARAGRAPH_\nPrograma\xc3\xa7\xc3\xa3o modular \xc3\xa9 uma forma de programa\xc3\xa7\xc3\xa3o no qual o desenvolvimento das rotinas de programa\xc3\xa7\xc3\xa3o \xc3\xa9 feito atrav\xc3\xa9s de m\xc3\xb3dulos, que s\xc3\xa3o interligados entre si atrav\xc3\xa9s de uma interface comum. Foi apresentado originalmente pela Information & Systems Institute, Inc. no National Symposium on Modular Programming em 1968, com a lideran\xc3\xa7a de Larry Constantine. Exemplos de linguagens que orientaram seu projeto para este aspecto est\xc3\xa3o as linguagens Modula-2, desenvolvida por Niklaus Wirth e a Modula-3.\n_START_SECTION_\nPrograma\xc3\xa7\xc3\xa3o orientada a objetos\n_START_PARAGRAPH_\nOrienta\xc3\xa7\xc3\xa3o a objetos, tamb\xc3\xa9m conhecida como Programa\xc3\xa7\xc3\xa3o Orientada a Objetos (POO), ou ainda em ingl\xc3\xaas Object-Oriented Programming (OOP) \xc3\xa9 um paradigma de an\xc3\xa1lise, projeto e programa\xc3\xa7\xc3\xa3o de sistemas de software baseado na composi\xc3\xa7\xc3\xa3o e intera\xc3\xa7\xc3\xa3o entre diversas unidades de software chamadas de objetos. O extensivo uso de objetos, particularmente em conjun\xc3\xa7\xc3\xa3o com o mecanismo de heran\xc3\xa7a, caracteriza o estilo de programa\xc3\xa7\xc3\xa3o orientada a objetos. Em alguns contextos, prefere-se usar modelagem orientada ao objeto (UML), em vez de programa\xc3\xa7\xc3\xa3o. De fato, o paradigma "orienta\xc3\xa7\xc3\xa3o a objetos" tem bases conceituais e origem no campo de estudo da cogni\xc3\xa7\xc3\xa3o, que influenciou a \xc3\xa1rea de intelig\xc3\xaancia artificial e da ling\xc3\xbc\xc3\xadstica no campo da abstra\xc3\xa7\xc3\xa3o de conceitos do mundo real. Na qualidade de m\xc3\xa9todo de modelagem, \xc3\xa9 tida como a melhor estrat\xc3\xa9gia, e mais natural, para se eliminar o "gap sem\xc3\xa2ntico", dificuldade recorrente no processo de modelar o mundo real, no dom\xc3\xadnio do problema, em um conjunto de componentes de software que seja o mais fiel na sua representa\xc3\xa7\xc3\xa3o deste dom\xc3\xadnio. Facilitaria a comunica\xc3\xa7\xc3\xa3o do profissional modelador e do usu\xc3\xa1rio da \xc3\xa1rea alvo, na medida em que a correla\xc3\xa7\xc3\xa3o da simbologia e conceitos abstratos do mundo real e da ferramenta de modelagem (conceitos, terminologia, s\xc3\xadmbolos, grafismo e estrat\xc3\xa9gias) fosse a mais \xc3\xb3bvia, natural e exata poss\xc3\xadvel. A an\xc3\xa1lise e projeto orientados a objetos tem como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se d\xc3\xa1 atrav\xc3\xa9s do relacionamento e troca de mensagens entre estes objetos. Na programa\xc3\xa7\xc3\xa3o 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\xc3\xa9todos) e estados poss\xc3\xadveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.\n_START_SECTION_\nPrograma\xc3\xa7\xc3\xa3o linear\n_START_PARAGRAPH_\nEm matem\xc3\xa1tica, problemas de Programa\xc3\xa7\xc3\xa3o Linear s\xc3\xa3o problemas de otimiza\xc3\xa7\xc3\xa3o nos quais a fun\xc3\xa7\xc3\xa3o objetivo e as restri\xc3\xa7\xc3\xb5es s\xc3\xa3o todas lineares. Programa\xc3\xa7\xc3\xa3o Linear \xc3\xa9 uma importante \xc3\xa1rea da otimiza\xc3\xa7\xc3\xa3o por v\xc3\xa1rias raz\xc3\xb5es. Muitos problemas pr\xc3\xa1ticos em pesquisa operacional podem ser expressos como problemas de programa\xc3\xa7\xc3\xa3o linear. Certos casos especiais de programa\xc3\xa7\xc3\xa3o linear, tais como problemas de network flow e problemas de multicommodity flow s\xc3\xa3o considerados importantes o suficiente para que se tenha gerado muita pesquisa em algoritmos especializados para suas solu\xc3\xa7\xc3\xb5es. V\xc3\xa1rios algoritmos para outros tipos de problemas de otimiza\xc3\xa7\xc3\xa3o funcionam resolvendo problemas de PL como sub-problemas. Historicamente, ideias da programa\xc3\xa7\xc3\xa3o linear inspiraram muitos dos conceitos centrais de teoria da otimiza\xc3\xa7\xc3\xa3o, tais como dualidade, decomposi\xc3\xa7\xc3\xa3o, e a import\xc3\xa2ncia da convexidade e suas generaliza\xc3\xa7\xc3\xb5es.\n_START_SECTION_\nClassifica\xc3\xa7\xc3\xa3o\n_START_PARAGRAPH_\nAs linguagens de programa\xc3\xa7\xc3\xa3o podem ser classificadas e sub-classificadas de v\xc3\xa1rias formas.\n_START_SECTION_\nQuanto ao paradigma\n_START_PARAGRAPH_\nDiferentes linguagens de programa\xc3\xa7\xc3\xa3o podem ser agrupadas segundo o paradigma que seguem para abordar a sua sintaxe e sem\xc3\xa2ntica. Os paradigmas se dividem em dois grandes grupos: imperativo e declarativo.\n_START_SECTION_\nQuanto a estrutura de tipos\n_START_PARAGRAPH_\nAs linguagens de programa\xc3\xa7\xc3\xa3o podem ser definidas de duas formas ortogonais quanto a sua estrutura de tipos.'