Baixe o app para aproveitar ainda mais
Prévia do material em texto
PARADIGMAS DE LINGUAGENS DE PROGRAMAÇÃO E-book 1 Bruno Zolotareff dos Santos Neste E-Book: INTRODUÇÃO ����������������������������������������������4 COMPREENDENDO OS PARADIGMAS E SUAS APLICAÇÕES; FORMAR UMA VISÃO ABRANGENTE E SISTÊMICA DO CENÁRIO CONTEMPORÂNEO DE DESENVOLVIMENTO DE SOFTWARE � 5 Paradigmas e suas aplicações �������������������������������5 O QUE É UM PARADIGMA? ��������������������� 7 LINGUAGENS DE PROGRAMAÇÃO E SUAS CATEGORIAS �������������������������������12 Linguagens de Baixo Nível ��������������������������������12 Linguagens de Médio Nível �������������������������������17 Linguagens de Alto Nível ����������������������������������20 Classificação das Linguagens de Programação 24 Critérios de Avaliação de Linguagens; Projetos de Linguagens ���������������������������������������� 27 Domínios de programação e ambientes de programação ��������������������������������������������������������� 29 APLICAÇÕES CIENTÍFICAS E MILITARES ���������������������������������������������������30 APLICAÇÕES COMERCIAIS ������������������� 32 2 INTELIGÊNCIA ARTIFICIAL ��������������������34 SISTEMAS DIVERSOS ������������������������������36 EVOLUÇÃO DAS PRINCIPAIS LINGUAGENS DE PROGRAMAÇÃO �����39 TIPO DE SISTEMA ��������������������������������������41 A LINGUAGEM DE PROGRAMAÇÃO PROLOG �������������������������������������������������������43 A LINGUAGEM DE PROGRAMAÇÃO JAVA ������������������������������������������������������������� 44 CONSIDERAÇÕES FINAIS ����������������������47 SÍNTESE ������������������������������������������������������ 48 3 INTRODUÇÃO Em Paradigmas de Linguagens de Programação, conheceremos os principais conceitos relaciona- do a esta disciplina, suas funcionalidades e seus domínios� Assim, vamos adquirir habilidades para escolher determinadas tecnologias de acordo com o paradigma específico para o projeto de software. 4 COMPREENDENDO OS PARADIGMAS E SUAS APLICAÇÕES; FORMAR UMA VISÃO ABRANGENTE E SISTÊMICA DO CENÁRIO CONTEMPORÂNEO DE DESENVOLVIMENTO DE SOFTWARE Paradigmas e suas aplicações Muitos estudantes de computação precisam entrar nos métodos atuais de programação, principalmente no paradigma da programação orientada a objetos (SEBESTA, 2018), que é bem utilizado no mercado de trabalho atual� Entretanto, todos querem aprender da maneira mais rápida e fácil possível� Para isso, o estudante de tecnologia (entre eles o de programação) precisa lidar com conceitos básicos da programação, mesmo que às vezes não pareça muito útil no começo de seu aprendizado� Os conceitos relacionados à arquitetura e aos prin- cipais aspectos das linguagens de programação for- mam a base do conhecimento (TUCKER; NOONAN, 2009)� Para entender qualquer tecnologia existente, bem como as novas linguagens que surgem, estu- dar os paradigmas facilita a sua aprendizagem e atualização� A área de programação de computadores relacio- na-se com muitos cursos de nível superior, assim, é bastante comum que conceitos já estudados voltem a fazer parte de alguma tecnologia atual� 5 Portanto, conhecer os Paradigmas de Linguagem de Programação fará com que você tenha um conheci- mento geral dos principais aspectos das linguagens� Você pode decidir, de acordo com o projeto de sof- tware, qual linguagem é a mais apropriada. Neste módulo, há dois tópicos referentes a metodologias e projetos de software. Além disso, você terá uma visão de muitas linguagens de programação ao es- tudar os paradigmas de linguagem de programação� Apesar de muitos terem o foco em linguagens como o Java, considerado o precursor da programação orientada a objetos no mercado de trabalho, há outras linguagens em uso que abordam os diversos conceitos da programação� Algumas de diferentes níveis: baixo, médio e alto� A tendência de quem trabalha com programação é escrever os códigos da maneira mais simples e direta, independentemente da linguagem, com uma metodologia de programação baseada em técnicas declarativas, isto é, com código voltado direto para o objetivo� Nesta disciplina, diversas técnicas serão abordadas gradualmente, a fim de que você possa entender e aplicar os conceitos relacionado ao estudo de progra- mação� Aconselho que você preste bastante atenção nos estudos que sempre teste os conceitos com os códigos de seu material se necessário� Agora que já sabemos que há um estudo mais apro- fundado na linguagem de programação, abordaremos os conceitos dos paradigmas para entendê-los em detalhes� 6 O QUE É UM PARADIGMA? Paradigma é uma forma de dizer que há um pen- samento em determinado assunto, que envolve o seu entendimento e que determina sua realidade de acordo com a ideia� Os Paradigmas de Linguagem de Programação atuam na organização das ideias e envolvem modelos inter- pretativos� Cada modelo tem uma conceitualização de uma realidade� Como estudantes de tecnologias, aprenderemos que conceitos são esses e por meio dos quais podere- mos determinar qual paradigma de programação se enquadra melhor com alguma realidade de projeto em que podemos atuar� A seguir, abordamos os vá- rios tipos� Programação procedural Um programa é uma sequência de instruções que operam em uma memória passiva� O design do pro- grama é igual ao do algoritmo� A programação pro- cedural é então o método comum para implementar procedimentos algorítmicos� Programação orientada a objetos A programação orientada a objetos possui classes e interfaces� Para esse tipo de programação, a mani- 7 pulação das informações é realizada pelos objetos, ao utilizar encapsulamento de dados, polimorfismo, abstração e herança� Desse modo, o conteúdo das variáveis dos objetos define o estado do programa. Em um programa, os métodos inerentemente passi- vos dos objetos são executados no fluxo sequencial do programa� Podcast 1 Programação orientada a aspectos A programação orientada a aspectos é considerada uma extensão da programação orientação a obje- tos, pois se baseia na formulação modular de as- pectos para a hierarquia de classes (preocupações transversais)� Este tipo de programação não é realmente um para- digma abrangente, visto que ela é uma adição à orien- tação do objeto, ou seja, entendida como insuficiente. Programação concorrente Um programa contém várias execuções simultâne- as, isto é, realiza várias tarefas computacionais� A ordem da execução das tarefas não é completamente definida, mas há uma coordenação dos recursos computacionais� Programação funcional A programação funcional consiste na descrição da relação das funções matemáticas� Dito de outra for- 8 https://famonline.instructure.com/files/142260/download?download_frd=1 ma, ela enfatiza a aplicação de funções, não conhece estado� Além disso, os programas funcionais podem ser executados simultaneamente� Programação lógica A execução de um programa consiste na resposta a uma pergunta� Assim, a programação lógica é basea- da no cálculo da lógica de predicados, o que favorece estilos de programação declarativa (VIEBRANTZ, 2019). Oferece ainda uma grande flexibilidade na busca de soluções inteligentes� Os estilos de programação mostrados podem ser divididos em duas áreas: ● Programação imperativa: quando os comandos para controlar o cálculo são formulados, a progra- mação processual é imperativa� ● Programação declarativa: são as declarações so- bre objetos formulados� Quando o processo está em segundo plano, a programação funcional e lógica é declarativa� Pode-se argumentar que o estilo imperativo-procedu- ral está em um nível comparativamente baixo de abs- tração� Podemos comparar isso em ambas seções (Java e Scala), que são subsequentes do programa que calculam a soma dos quadrados dos números ímpares de uma matriz (Tabela 1)� 9 Procedural em Java Funcional em Scala public static double sumAdLados(double[] array) { int sum = 0�0; for (int i = 0; i < array� length; i++) { if (array[i]% 2 == 1) sum += array[i] * array[i] } return sum; } def sumAdLados(array: Array[Double]): Double = array.filter(x => x % 2 == 1)�map(x => x * x)�sum Tabela 1: Comparativo entre linguagem procedural e funcional Fonte: Elaboração própria. Comparando o comprimento das duas formulações, você pode achá-las desiguais� É bom lembrar que, com maior modularização, você sempre pode obter programas mais curtos� Mas esse é exatamente o ponto aqui� A programação funcional suporta modu- larização muito melhor do que a processual� A expressão do exemplo funcional consiste em qua- tro elementos: os dados (matriz) de uma operação de filtro que procura números ímpares, quadrados de números e, por fim, a soma. O programa permanece consistentemente neste alto nível de abstração, e os componentes básicos do cálculo são claramente visíveis� A formulação concisa é possível porque, no Scala, você pode definir funções através de literais e, em seguida, passá-las para outras funções� 10 A utilização de literais de função é dada como se fosse uma String ou um Object qualquer� Isso ofere- ce mais possibilidades e permite construir códigos altamente compactos e reutilizáveis� Em contraste, a forma processual não pode ser simplesmente dividida em blocos de função� Para entendê-lo, precisamos executá-lo no nível mais bai- xo, elemento por elemento� Embora tenhamos uma sequência de instruções em Java, temos uma única expressão no Scala� A programação da colateralidade também requer um afastamento do pensamento puramente imperativo, uma vez que as ações concorrentes não podem ser previstas com precisão� A orientação a objetos é um conceito que combina os pontos de vista imperativos e declarativos� Basicamente, podemos dizer que programas comple- xos podem ser mais bem compreendidos declarati- vamente� O pensamento imperativo é mais adequado para o controle de processos� 11 LINGUAGENS DE PROGRAMAÇÃO E SUAS CATEGORIAS Linguagens de Baixo Nível Agora, estudaremos o desenvolvimento das lingua- gens de programação, começando pela linguagem de máquina Assembly, uma linguagem de baixo nível� Assembly: significa “montagem”; é conhecida como a linguagem de máquina que utiliza códigos, além de ser reconhecida por dispositivos ligados ao hardware, como os microcontroladores� A linguagem Assembly é uma forma legível de huma- nos entenderem um tipo de linguagem de máquina ou um código de máquina que seja a sequência real de bits e bytes, lido pelo processador do computador� Antes de entrar na programação do sistema, você deve lembrar alguns fatos básicos sobre a estrutura do computador na memória� O computador consiste em um grande número de componentes individuais, como memória, disco rí- gido, placa de vídeo e periféricos (teclado, monitor e impressora)� O foco está no processador da CPU, que tem de co- ordenar todos os dispositivos uns com os outros� 12 Assim, o sistema de barramento está disponível para comunicação com as partes individuais (SCHMIDT, 2008)� A CPU é dividida novamente em unidade de controle e memória interna na forma de registradores� Em geral, fica mais fácil para as pessoas entenderem palavras e as converterem para o sistema binário, octais ou hexadecimais para ler e programar� Portanto, as pessoas normalmente escrevem código na linguagem Assembly e, em seguida, o convertem com um ou mais programas no formato de linguagem de máquina compreendido pelo processador� Há diversas linguagens Assembly para diferentes arquitetura de computadores, por isso, estudaremos alguns códigos de Assembly que funcionam em uma arquitetura 8086� Estes registos foram dados após a tarefa de deter- minados nomes, a partir dos quais as abreviaturas podem ser derivadas (Tabela 2): classe contração significado notas adicionais Registros gerais AX Acumulador Divisão em byte alto (AH) e byte baixo (AL) BX Registrador de base Divisão em byte alto (BH) e byte baixo (BL) CX Contagem Register Divisão em byte alto (CH) e byte baixo (CL) DX Registo de dados Divisão em byte alto (DH) e byte baixo (DL) Registro de ponteiro SP Ponteiro de pilha Usado para endereçar a pilha 13 classe contração significado notas adicionais BP Ponteiro de base Usado para endereçar a pilha IP Ponteiro de instrução Deslocamento do próximo comando Registrador de índice SI Índice de fonte Suporte para endereçamento DI Índice de destino Suporte para endereçamento Registro de segmento CS Segmento de código Aponta para o segmen- to de código atual DS Segmento de dados Aponta para o segmen- to de dados atual SS Segmento de pilha Aponta para o segmen- to de pilha atual ES Segmento extra Aponta para outro segmento de dados Tabela 2: A b r e v i a t u r a s d e c o m a n d o s d e A s s e m b l y Fonte: Adaptada de Schmidt (2008). Em síntese, pode-se notar que os registros gerais são divididos em seções alta e baixa� Para algumas ope- rações, um registro “metade” é suficiente. Portanto, você pode abordar essas seções individualmente� Como já mencionado, há bandeiras além dos regis- tros que são as células de memória individuais, cada uma com o valor 0 ou 1� Esses sinalizadores (ou contadores) também têm designações específicas, das quais deduzimos seus significado e tarefa. Você precisa diferenciar os si- nalizadores de status para eles serem definidos pelo processador, e os sinalizadores de controle podem ser definidos pelo programa. 14 Lembre-se de que o importante é você conhecer esse tipo de linguagem, na qual poderá se aprofundar mais em Assembly, caso assim deseje� Porém, esse não é o intuito desta disciplina; aqui teremos uma abor- dagem geral e conheceremos o paradigma de cada linguagem de programação apresentada� Na Tabela 3, temos alguns sinalizadores e controles de Assembly com que precisamos nos familiarizar� Classe Contração Nome Significado Sinalizadores de status CF Leva Bandeira Carregam a bandeira AF Bandeira de trans- porte auxiliar Ajudar a transferir bandeira ZF Zero bandeira Bandeira zero SF Bandeira de sinal Bandeira de sinal PF Bandeira de paridade Bandeira de paridade DE Bandeira Overflow Bandeira estouro Sinalizadores de controle TF Bandeira armadilha Ajudar a transferir bandeira IF Sinalizador Interromper Ativar Bandeira de interrupção DF Bandeira de direção Direcionalidade Tabela 3: Abreviaturas de sinalizadores de controle em Assembly. Fonte: Adaptada de Schmidt (2008). Se o resultado de uma operação for 0, o sinalizador zero será configurado. Isso significa que ele tem valor 1, o que pode ser verificado e usado em seu programa� 15 Com cada nova geração de processadores, novos sinalizadores são adicionados� No entanto, eles em geral não são documentados nem são importantes para a programação simples do montador� Analisemos um exemplo (Tabela 4) de um código escrito em Assembly para escrever um “Olá Mundo. section �text global _start ;must be declared for using gcc _start: ;tell linker entry point mov edx, len ;message length mov ecx, msg ;message to write mov ebx, 1 ;file descriptor (stdout) mov eax, 4 ;system call number (sys_write) int 0x80 ;call kernel mov eax, 1 ;system call number (sys_exit) int 0x80 ;call kernel section �data msg db ‘Olá Mundo!’, 0xa ;our dear string len equ $ - msg ;length of our dear string Tabela 4: Exemplo de código em Assembly. Fonte: Adaptado de Coding Ground (s. d.). saiba mais Você pode testar esse código em um compilador (Assembler) online de Assembly, que se encontra disponível em: https://www.tutorialspoint.com/compile_assem- bly_online.php. 16 https://www.tutorialspoint.com/compile_assembly_online.php https://www.tutorialspoint.com/compile_assembly_online.phphttps://www.tutorialspoint.com/compile_assembly_online.php https://www.tutorialspoint.com/compile_assembly_online.php Para executar códigos em Assembly, é necessário um programa chamado Assembler (Compilador de Assembly)� Uma boa opção para você testar o código anterior é instalando o programa NASM� Agora que você já estudou do que trata o Assembly, é muito importante conhecer sua importância, van- tagens e desvantagens e a qual paradigma da pro- gramação pertence� As linguagens de baixo nível têm vantagens e desvantagens: ● Vantagens: execução rápida e baixa ocupação de espaço em memória, bem como funcionalidade eficiente. ● Desvantagens: o código gerado por um determi- nado processador não é utilizado em outra arquite- tura, apresentando problemas de portabilidade, além disso, os códigos não são estruturados, tornando seu desenvolvimento mais difícil� O Assembly é considerado uma linguagem pura- mente imperativa, com procedimentos sequenciais� Por exemplo: execute tarefa1, tarefa2��� e assim por diante� Linguagens de Médio Nível As linguagens de médio nível são tipos de lingua- gem intermediária voltados à interação entre ser humano e máquina; é considerada um tipo de pro- 17 gramação não muito fácil de desenvolver (SEBESTA, 2018)� A linguagem mais conhecida desse nível intermedi- ário é a linguagem C, que foi desenvolvida principal- mente para uma melhor interação que o Assembly� A linguagem C é derivada de duas outras linguagens: Algol 68 e BCPL� Seu desenvolvimento se deve so- bretudo aos sistemas operacionais e compilado- res� Por exemplo, é utilizada na construção do UNIX, que em sua versão anterior era escrito por Assembly (SCHMIDT, 2008)� A primeira versão da linguagem C saiu em 1972, es- crita por Dennis Ritchie no Bell Laboratories, e depois houve uma evolução na padronização da linguagem C em 1989, a ANSI C� Para conhecer melhor esse tipo de linguagem, algu- mas de suas características são: ela é estruturada, imperativa e procedural; possui uma programação com sub-rotinas, laços de repetição e estrutura em blocos; apresenta comandos em sequência para a execução de rotinas e procedimentos� A linguagem C suporta alguns tipos de variáveis (Tabela 5): TIPO VALORES VÁLIDOS Char letras e símbolos: ‘a’, ‘b’, ‘H’, ‘^’, ‘*’,’1’,’0’ Int de -32767 até 32767 (apenas números inteiros) 18 Float de -3�4 x 1038 até +3�4 x 10+38 com até 6 dígitos de precisão Double de -1�7 x 10308 até +1�7 x 10+308 com até 10 dígitos de precisão Tabela 5: Tipos de variáveis em C. Fonte: Adaptada de Excript. Note que o código de programação feito na lingua- gem C é compilado, segue o exemplo de código na Tabela 6: Código em C #include <stdio�h> int main() { printf(“Olá Mundo”); return 0; } Tabela 6: Exemplo de código em C. Fonte: Elaborada pelo autor (2019). As linguagens de médio nível têm vantagens e desvantagens: ● Vantagens: têm as mesmas características de uma linguagem de baixo nível e, ao mesmo tempo, utiliza operações de linguagens de alto nível� Por exemplo, podem utilizar operadores: if..else, for, while. É pos- sível programar para diversas funções, como jogos e programas comerciais� ● Desvantagens: têm dificuldade na compreensão da sintaxe, pois não é possível utilizar objetos como em Java, além de não terem muitas bibliotecas avan- çadas para desenvolvimento visual, como em C++� 19 http://excript.com/curso-c.html Para executar o código no computador, é preciso ter um compilador de linguagem C; no Windows, pode-se executá-lo no Visual Studio com suporte a C/C++� Mas é possível instalar o MinGW e executar todos os códigos apresentados� Linguagens de Alto Nível As linguagens de alto nível são tipos de linguagens voltadas ao entendimento humano e que utilizam uma sintaxe estruturada mais fácil de entender� Assim, é considerada independente da arquitetura de computador� Esse tipo de linguagem utiliza uma sintaxe e semân- tica mais perto do entendimento do programador, porém, é feita uma tradução para o código de má- quina, tornando o processo lento� Algumas linguagens de alto nível se destacam, como Java, Python, Swift, C#, C++, Lua. Lembre-se de que, para serem executadas, você precisará ter um com- pilador, interpretador ideal para cada tecnologia� A conversão para o código de máquina é feita com alguns processos diferenciados, de acordo com a tecnologia� Por exemplo, o Java utiliza um sistema de compilação e interpretação� Trata-se de uma tec- nologia híbrida que funciona sobre uma Java Virtual Machine (JVM), cujos códigos são conhecidos como Bycode do Java, por ser considerável uma linguagem portátil� 20 SAIBA MAIS Saiba mais sobre a JVM da Oracle, ao ler Intro- dução ao Java Virtual Machine, que se encontra disponível em: https://www.devmedia.com.br/intro- ducao-ao-java-virtual-machine-jvm/27624� Acesso em: 01 ago� 2019� O �NET da Microsoft, diferentemente da JVM da Oracle, possui um outro sistema, no qual diversas linguagens de programação passam para uma Linguagem Intermediária em seu framework. Depois de vários processos, passa para a linguagem de máquina� Ambas tecnologias utilizam linguagens de alto nível, por isso, é interessante saber o motivo de o processo de tradução para uma linguagem de máquina ser considerado lento em comparação a uma linguagem de baixo nível� A pertinência de conhecer as máquinas virtuais é que elas são cada vez mais utilizadas, e uma das linguagens de alto nível que têm se destacado desde seu lançamento é a linguagem Python, a qual utiliza um processo semelhante ao Java, a Python Virtual Machine� Ambas as linguagens (Java e Python) geram byteco- de, que é o resultado da compilação e interpretação (Figura 1): 21 https://www.devmedia.com.br/introducao-ao-java-virtual-machine-jvm/27624 https://www.devmedia.com.br/introducao-ao-java-virtual-machine-jvm/27624 Código do ObjetoCompilador Execução SaídaCódigo Figura 1: Sistema de compilação com bycode. Fonte: Elaboração própria. O Java pode ser executado diretamente no prompt de comando ou no shell do Linux como qualquer outra linguagem de programação� Contudo, para ser executado, é preciso ter a Java Runtime Environment (JRE), que possui a JVM embutida no pacote dispo- nível para instalação� Escolher uma linguagem de alto nível requer uma avaliação dos domínios que essa tecnologia envol- ve� Por exemplo, o Java é escolhido para aplicação de diversos projetos, porém, o Python é utilizado na maioria das aplicações em Ciência de Dados e tudo que envolva a Inteligência Artificial. Assim, sua escolha deve se pautar pela lógica e necessidade do projeto, pois as linguagens de programação têm sintaxes diferentes� Vamos comparar a codificação de Java e Python, o código na Tabela 7 imprime em sua tela: “Olá Mundo; Oi Pessoal e 6”, a mesma saída nas duas linguagens. É muito importante comparar apenas a sintaxe, com isso, podemos perceber que o Python tem certa van- tagem em relação à simplicidade do código com o mesmo resultado: 22 Código em Java Código em Python public class Test { public static void main(String args[]) { String array[] = {“Olá Mundo”, “Oi pessoal”, “6”}; for (String i : array) { System�out� println(i); } } } stuff = [“Olá Mundo!”, “ Oi pessoal!”, 6] for i in stuff: print(i) Tabela 7: E x e m p l o d e c ó d i g o e m J a v a e P y t h o n . Fonte: Elaboração própria. As linguagens de alto nível têm vantagens e desvantagens: ● Vantagens: não dependem da arquitetura do pro- cessador, bem como têm maior portabilidade e es- calabilidade; podem ser compiladas, interpretadas ou híbridas como o Java e o Python; sua sintaxe e semântica possuem um nível complexo, porém, mais fácil de se entender devido ao maior ou menor grau de estruturação� ● Desvantagem: têm um processo de codificação para traduzir em linguagem de máquina que ocupa maismemória e que, na maioria dos casos, é mais lenta� 23 Classificação das Linguagens de Programação 1ª Geração ● A linguagem de programação era a nível binário para máquinas� Por exemplo: ● Binário = 1001 1001 100 110 ● Equivale ao decimal = 7746 ● Comunicação direta com o hardware. ● Programação realizada para esse nível é uma se- quência de uns e zeros, um esquema difícil de se elaborar� 2ª Geração ● Conhecidas como linguagens de programação Assembly (Montagem)� ● Cada Assembly utiliza seu Assembler (compilador específico para cada arquitetura de processadores). ● Utiliza linguagem simbólica para representar as sequências dos números binários: ● msg label mov goto 3ª Geração ● Conhecida como orientada ao usuário nos anos 1960, utiliza Compiladores e Interpretadores� 24 ● Desenvolvida principalmente para estudos cien- tíficos e, mais tarde, para aplicações na iniciativa privada, ou seja, uso comercial� ● Linguagens como C, PL/I, ADA e ALGOL já supor- tavam algumas instruções para cálculos lógicos e aritméticos, instruções de controle de Entrada/Saída e fluxo de execução condicionais e incondicionais. ● Dividida em duas classes de linguagens que são consideradas declarativas: ● Funcionais: que utilizam funções de recursividade (Linguagem LISP)� ● Lógica: aplicada à lógica matemática (Prolog)� 4ª Geração ● São tipos de linguagem menos complexos que as linguagens da 3ª geração; projetada para resolver problemas dos usuários parcialmente ou para apli- cações completas� ● Apresentam menos erros e custos mais baixos de manutenção� ● Códigos com níveis mais altos sem muitos proble- mas de depuração� ● Algumas das linguagens são utilizadas em ferra- mentas para a geração de pacotes gráficos, como Scilab, MATLAB� ● Alguns exemplos de linguagens dessa geração são SQL, VHML, LOTUS 1-2-3 e PHP� 25 5ª Geração ● Linguagens conhecidas principalmente na utiliza- ção de aplicações em Inteligência Artificial. ● Eficiência em algoritmos genéricos e apresentação de alta complexidade� ● Utilização para simulação e representação do conhecimento� ● Algumas linguagens conhecidas, como Prolog, Jason, Cartago, Moide, OpenCV e Netlogo� Diferentemente de outras linguagens de programa- ção, esse tipo de linguagem consegue guardar e processar informações de modo que represente o conhecimento� Algumas dessas informações são baseadas em gerações anteriores, como o JaCaMo, que é a junção dessas três linguagens utilizadas no departamento de pesquisa da Politécnica da Universidade de São Paulo� SAIBA MAIS Conheça mais sobre a JaCaMo, lendo Welcome to the JaCaMo Project Website, artigo disponível em: http://jacamo.sourceforge.net/� 26 http://jacamo.sourceforge.net/ Critérios de Avaliação de Linguagens; Projetos de Linguagens Alguns critérios são utilizados para avaliar os riscos de um projeto de software. Há diversas maneiras de medir a qualidade assegurada de um software, como a técnica do ponto de função, na qual os códigos precisam ser testados e avaliados de acordo com contratos e normas estabelecidos para determinado projeto� Não há projetos de software 100% seguros, visto que todos podem conter falhas� Entretanto, as institui- ções utilizam cada vez mais as normas internacio- nais, metodologias que aumentem a confiabilidade e maturidade no processo de desenvolvimento de softwares. As empresas buscam alguns fatores em projetos de software: Confiabilidade, Legibilidade, Redigibilidade, Custos, Portabilidade, Tempo de vida (SEBESTA, 2018). Os softwares também desgastam com o tempo, o que é uma das principais preocupações das empresas� As linguagens com sintaxe e de aprendizado mais rápido são bastante utilizadas pelas empresas, de- vido à mão de obra e aos custos envolvidos� As empresas utilizam softwares com tecnologias novas principalmente pela facilidade de usar e aplicar em diferentes produtos� A manutenção e padroniza- 27 ção também são critérios considerados importantes nos projetos de software (TUCKER; NOONAN, 2009). A confiabilidade está ligada ao número de vezes que a linguagem ou tecnologia envolvida falhou ao executar certas aplicações� Isso envolve tanto a ar- quitetura quanto o conhecimento dos paradigmas de programação� Os custos do processo de desenvolvimento de sof- tware envolvem diversos fatores, dentre os quais po- demos citar o treinamento e a aplicação de normas� SAIBA MAIS Há metodologias específicas aplicadas ao de- senvolvimento de software, dentre elas se desta- cam: CMMI; ISO/IEC 15504 e MPS�BR� Os critérios de qualidade envolvem vários tipos de projeto e devem ser aplicados principalmente a sof- tware que envolvam outras empresas a nível inter- nacional, as quais exigem níveis altos de maturidade das empresas do Brasil� Você deve estar ciente de que o desenvolvimento de softwares recorre a técnicas da Engenharia e de que há padrões e normas a serem seguidos� A Programação Orientada a Objetos (POO) é ba- seada em metodologias como a Unified Modeling Language (UML), mantida pela Object Management Group (OMG), que é responsável por manter os pa- drões internacionais� 28 Padronizar a programação leva o desenvolvimento a um alto nível de serviços, o que é um grande critério na escolha do tipo de linguagem a ser escolhida� A UML possui modelos de programação para POO, al- guns muito conhecidos e aplicados pela Engenharia de Software (TUCKER; NOONAN, 2009). As metodologias adotadas nos projetos são de extre- ma importância, visto que os critérios de qualidade, segurança e, principalmente, custos são determinan- tes em algumas escolhas� Você talvez já tenha escutado a respeito da arqui- tetura SOA, uma programação em camadas MVC, DAO, ORM, FDD e SCRUM� Trata-se de metodologias utilizadas em projetos que estudaremos detalhada- mente em tópicos finais desta disciplina. Domínios de programação e ambientes de programação Esta parte de nosso estudo é para conhecermos me- lhor as principais aplicabilidades das linguagens de programação� Resumidamente temos: Aplicações Científicas e Militares; Aplicações Comerciais; Inteligência Artificial; e Sistemas diversos. 29 APLICAÇÕES CIENTÍFICAS E MILITARES Em muitas universidades do mundo, desenvolvem- -se e utilizam-se linguagens de programação para fins acadêmicos e, muitas vezes, trabalham em pro- jetos com os militares� Por exemplo, nos Estados Unidos da América há centros de pesquisa, como o Massachusetts Institute of Technology (MIT), que trabalha junto com o Pentágono, o Departamento de Defesa norte-americano� Mesmo aqui no Brasil, que há uma interação com o Instituto de Pesquisas Energéticas Nuclear (Ipen) da Universidade de São Paulo junto com a Marinha do Brasil� Dentre suas aplicações, estão: ● Estrutura de dados simples e avançadas� ● Funcionais e lógicas� ● FORTRAN� ● ALGOL, C, C++, JAVA, dentre outras� Apesar de utilizar diversas linguagens de programa- ção, dependendo do projeto, apenas algumas lin- guagens podem ser adotadas, isso acontece devido ao paradigma que é adotado e, principalmente, por normas do governo, sendo que algumas linguagens 30 são homologadas especialmente para aquele tipo de aplicação (SEBESTA, 2018)� Por exemplo, em um projeto crítico, no qual se coloca a vida de pessoas em risco, normalmente não se usa o paradigma de programação orientada a objetos, porque não se encaixa nas normas estabelecidas para esse tipo de projeto� As linguagens orientadas a objetos utilizam compila- dores, interpretadores e bibliotecas com Inteligência Artificial, como a máquina virtual do Java. Em uma aplicação de risco, uma mudança pode ser fatal na execução� 31 APLICAÇÕES COMERCIAIS Para organizar o alto número de dados e proces- samento, usa-se a linguagem Common Business Oriented Language (Cobol)� Essa linguagem foi de- senvolvida, em 1959, especialmente para negócios; desde então, tem sido utilizada em muitos compu- tadores mainframes, sobretudoem instituições fi- nanceiras (TUCKER; NOONAN, 2009)� A linguagem tem a capacidade de gerar relatórios bem definidos, armazena números e caracteres e realiza operações aritméticas� Por ser ainda mui- to utilizada, há versões da linguagem estruturada e orientada a objetos� Apesar de ser uma tecnologia antiga, é bem-conceitu- ada, pois tem sido modificada aos poucos no merca- do devido à falta de mão de obra� Outras tecnologias são utilizadas nesse processo, dentre elas o Java� SAIBA MAIS Aprofunde seus conhecimentos em Cobol, aces- sando um artigo da Exame, que está disponível em: https://exame.abril.com.br/tecnologia/usada-por- -bancos-e-esquecida-por-programadores-linguagem- -de-programacao-ganha-folego-com-tecnologia/� 32 https://exame.abril.com.br/tecnologia/usada-por-bancos-e-esquecida-por-programadores-linguagem-de-programacao-ganha-folego-com-tecnologia/ https://exame.abril.com.br/tecnologia/usada-por-bancos-e-esquecida-por-programadores-linguagem-de-programacao-ganha-folego-com-tecnologia/ https://exame.abril.com.br/tecnologia/usada-por-bancos-e-esquecida-por-programadores-linguagem-de-programacao-ganha-folego-com-tecnologia/ Você deve estar pensando, mas por que o Cobol? Há grandes empresas envolvidas e milhões de dados sendo processados nessa tecnologia, além do fato de que ela funciona muito bem, mesmo sendo antiga� De fato, muitas empresas não querem fazer isso, pois existem diversos mainframes da IBM que ainda utilizam essa tecnologia e, por essa razão, há um grande suporte� A própria empresa oferece treina- mentos e instalou polos no Brasil que exploram essa tecnologia� Trata-se de uma linguagem nativa no paradigma im- perativo e estruturado; é considerada antiga, mas não ultrapassada� Foi criada para um único propósito: o comercial� REFLITA Você trocaria algo que está funcionando mui- to bem por outra que envolve riscos e muitos gastos? 33 INTELIGÊNCIA ARTIFICIAL A Inteligência Artificial (IA) é um domínio de lingua- gem inicialmente científica, que ainda não possui conceitos totalmente definidos. Apesar de muitos falarem desse conceito, é considerado antigo, pois começou na Segunda Guerra Mundial� Algumas tecnologias e linguagens envolvem a IA, tais quais a Machine Learning (Aprendizado de Máquina) e a Data Mining (Mineração de Dados) (JONES, 2018)� Comercialmente, já é utilizada por grandes empresas como a IBM com o Watson, computador cognitivo, pela Apple com o Siri e o Google AI� SAIBA MAIS Saiba mais sobre o tema, lendo o artigo His- tória da Inteligência Artificial� Disponível em:https://www.institutodeengenharia.org.br/ site/2018/10/29/a-historia-da-inteligencia-artificial/� A Inteligência Artificial é utilizada em diversas lin- guagens de programação, porém, as que mais se destacaram inicialmente foram as linguagens LISP e Prolog� 34 https://www.institutodeengenharia.org.br/site/2018/10/29/a-historia-da-inteligencia-artificial/ https://www.institutodeengenharia.org.br/site/2018/10/29/a-historia-da-inteligencia-artificial/ A linguagem LISP colaborou com diversas funções no passado para linguagens utilizadas para AI� Em 1968, Terry Winograd desenvolveu uma ferramenta para interagir com o usuário, na época considerado revolucionário (JONES, 2018)� A linguagem Prolog foi criada em 1972, visando so- bretudo à representação do conhecimento, e utilizada para processamento de linguagem natural� Esse tipo de tecnologia tinha um foco de IA, mais tarde, tanto o LISP quanto o Prolog foram substituídos por novas linguagens que fazem as mesmas funções (ARALDI, 2018)� A Inteligência Artificial é utilizada desde celulares, websites com chatbot, jogos e medicina. Há aplica- ções em androides reais, como a Shophia, o primeiro robô a ter uma cidadania e a utilizar a IA (NISHIKIORI, 2018)� Os conceitos de aplicações de IA em linguagens de programação podem ser utilizados respeitando os paradigmas� Entretanto, linguagens de programação desenvolvidas para programação com multiagen- tes com foco apenas em AI não são muitas até o momento� Dentre essas linguagens, podemos des- tacar o Jade, Jason e Netlogo que são baseadas na linguagem Java� Há outras linguagens, como o AgentSpeak e o JaCaMo, todas com objetivo de pro- gramar para AI� 35 SISTEMAS DIVERSOS Há muitas linguagens de programação construídas para diversos propósitos, não apenas para uma deter- minada aplicação, ou seja, são aplicadas tanto para fins científicos quanto comerciais (SEBESTA, 2018). As linguagens C/C++ ficaram muito famosas graças às aplicações em sistemas operacionais como o UNIX, mais tarde o uso da programação orientada a objetos� O C++ por muito tempo dominou o mercado, apesar de haver outras tecnologias (Delphi, Visual Basic)� O C++ dominou a preferência até a chegada do Java, quando houve uma mudança mundial de paradigma em relação à programação orientada a objetos� Aplicações financeiras e multimídias poderiam ser re- alizadas pela web. O Java realmente parou o mundo da computação em 1994; quando entrou no mercado, foi a principal tecnologia e uma das principais lingua- gens de programação mais aceitas comercialmente� Com o advento do Java da antiga empresa Sun MicroSystems, adquirida pela Oracle, outras empre- sas aproveitaram seus conceitos, servindo como base para tecnologias como o �NET da Microsoft e as ferramentas da Adobe Microsystems� Você pode até pensar “Não é possível que o Java seja tão magnífico assim”, pois há coisas novas como Rails, Swift e Python. Há sim, mas o Java foi baseado 36 em C++ e Smalltalk, apresentou estabilidade, portabi- lidade e outras coisas que a maioria das tecnologias da época não tinha ou eram considerados ruins� Vamos lá, por que estamos falando de Java? Apenas para entendermos que as aplicações com linguagens orientadas a objetos utilizam padrões da Engenharia de Software que estudaremos em outros tópicos, mas que é de grande importância para alguns softwares. Se você escolheu Python ou Swift de acordo com o paradigma, excelente� Agora está pensando como um Engenheiro de Software. Os sistemas devem possuir metodologias para o seu desenvolvimento� A seguir, abordamos algumas aplicações com lingua- gens de programação diversas no mundo comercial: ● Visual Basic 6 / Delphi: Relatório em Bancos em geral eram utilizados principalmente com uma fer- ramenta de relatório conhecida como CristalReport� Há ainda instituições que utilizam essas tecnologias� ● C: Utilizado para programação de baixo nível, pro- gramação de microcontroladores e em Sistemas Operacionais como o Unix, Linux, FreeBSD e Windows. ● C++: Tem as mesmas aplicações do C, porém, é muito utilizado para programação de Jogos� Há di- versas aplicações com essa linguagem, sistemas para lojas, bancos, dentre outros� ● Java: Possui praticamente todos os tipos de apli- cações, muito semelhante à linguagem C++, porém, 37 há portabilidade e adaptabilidade muito alta� Por exemplo: desenvolvimento de aplicativos para ce- lulares, desenvolvimento desktop, desenvolvimento Web, módulos e sistemas para carros e aeronaves, satélites e Inteligência Artificial. ● C#/VB.NET: Linguagens bastante utilizadas comer- cialmente, consideradas um forte concorrente da linguagem Java; têm uma grande semelhança com as aplicações comerciais utilizadas com o Java, po- rém, não têm portabilidade como no Java ou Python� ● Python: Uma linguagem muito utilizada na ciência de dados e Inteligência Artificial, tem se tornado cada vez mais ativa no mercado, possui características de portabilidade como o Java, é considerada uma linguagem com a sintaxe mais limpa e com menos códigos para executar a mesma tarefa em compara- ção com a linguagem do Java� O Google utiliza muito essa linguagem em seus produtos� ● Swift: É uma linguagem desenvolvida pela Apple para produtos da própria empresa e para o Linux� Sua linguagem é feita para ter uma sintaxe simples, por isso é considerada mais rápida que o Python em seu processamento�● Ruby: Uma linguagem de programação utilizada com foco na web; considerada de fácil aprendizado, ficou popular nas mídias por um tempo. Essa lingua- gem possui algumas semelhanças com o Java e o Python em suas funcionalidades� 38 EVOLUÇÃO DAS PRINCIPAIS LINGUAGENS DE PROGRAMAÇÃO Historicamente, os conceitos de linguagem têm sido frequentemente direcionados para otimizar o desempenho do computador� Você pode ler isso e concordar que eles realmente foram moldados pela arquitetura do computador, apesar de ser parcial- mente verdade� As linguagens de programação nem sempre são orientadas a hardware, pois, nos primeiros compu- tadores, era praticamente impossível fazer alguma programação de hardware. Os computadores eram mecânicos, como o modelo Piloto ACE de Alan Turing construído no período da Segunda Guerra Mundial (SEBESTA, 2018)� Os computadores atuais ainda correspondem em grande parte à arquitetura de von Neumann� O ma- temático, físico e pioneiro da computação John von Neumann explorou a utilização de linguagem de com- putação para ser utilizada em arquitetura de hardware em sua época, porém, não foi muito favorável no começo, apresentando muitas limitações� O protótipo das línguas de von Neumann reflete-se em linguagens e conceitos da programação procedu- ral� Um exemplo clássico são as linguagens de pro- gramação C e Pascal, o desenvolvimento de um pro- grama é orientado na formulação de procedimentos� A programação orientada a objeto já se desvia do 39 pradrão utilizado em programação procedural� Ela determina a estrutura de um programa por meio de suas interfaces e classes, ou seja, a natureza dos dados e suas operações� No entanto, a programação procedural está sem- pre inseridas onde as sequências são apresenta- das, ou seja, em métodos e funções de classe� Em particular, as funções de classe em Java são uma relíquia do paradigma procedural (SEBESTA, 2018)� A experiência com orientação a objetos levou à per- cepção de que a eficiência de uma linguagem de programação não deve ser o único critério decisivo� Outra experiência histórica também afirma que a melhor exploração de hardware não pode ser alcan- çada fazendo-se os processos computacionais� A arquitetura de hardware apresenta interfaces de co- municação modular, sendo mais acessível a algumas linguagens de programação abstratas� Conheceremos algumas linguagens de programação e alguns códigos para nos familiarizarmos com as linguagens de programação� Diferentemente de uma disciplina de Algoritmos de Programação, o intuito do nosso estudo é conhecer os paradigmas, além de como e onde aplicar� A fim de compilar a maioria dos códigos, é preciso ter instalado ou utilizar compiladores online, que é recomendável� 40 TIPO DE SISTEMA Há também outra característica distintiva para lin- guagens de programação, que tem mais a ver com formulação do que com a execução de um programa� Para linguagens de programação tipadas dinamica- mente, a verificação de tipo ocorre exclusivamente no tempo de execução� Variável, parâmetros de função e resultados não são fornecidos com uma especifi- cação de tipo neste conceito� Isso permite um alto grau de polimorfismo. Para linguagens estaticamente tipadas, a verificação de tipo é concluída (por exemplo, Pascal) ou parcial- mente (por exemplo, Java) pelo compilador� Isso permite mensagens de erro antecipadas e geração de códigos eficientes. Por outro lado, tem menor flexibilidade e menos regras, de tipo mais complexas são aceitas� Sistemas com inferência de tipos (derivação automá- tica do tipo de dados) são tipificados estaticamente no núcleo� No entanto, eles facilitam a programa- ção, permitindo que o compilador determine o tipo de variável, se possível� Como os exemplos de pro- gramação funcional mostram, isso pode melhorar consideravelmente a legibilidade de um programa� Para linguagens fortemente tipados, como C, não há verificação de tipo completo. Alta flexibilidade e eficiência são alcançadas pelo preço da incerteza. Basicamente, essa distinção pode ser combinada 41 com todos os paradigmas de programação superior (Orientação a objetos, programação lógica e progra- mação funcional)� Nota-se que Java é de certa forma um híbrido� Isso também se aplica ao teste de tipo� Os desenvolve- dores de linguagem favorecem o teste estático, con- forme refletido no conceito de tipos genéricos. Assim, todas as linguagens de programação de nível superior têm conceitos de gerenciamento automático e segurança de memória� 42 A LINGUAGEM DE PROGRAMAÇÃO PROLOG Prolog significa programação em lógica. Isso quer dizer que o Prolog constrói uma ponte entre os con- ceitos de linguagens de programação� Portanto, per- tence ao contexto geral� O princípio básico da programação lógica consiste em descrever declarativamente as relações necessá- rias. O controle do processo fica em segundo plano. A ordem de execução pode afetar significativamente a eficiência de um programa, mas não deve ter influ- ência sobre o significado e a correção do programa. O Prolog é o mais importante representante da pro- gramação lógica, foi criado na França na década de 1970� Depois de experimentar um verdadeiro boom nos anos 1980, ele recuou para o segundo plano� É ainda o principal exemplo de uma linguagem de programação baseada na ideia de programação ló- gica e um objeto e uma ferramenta para pesquisa no campo da Inteligência Artificial. A programação tem aplicação prática na forma de conhecimento baseado em diversos sistemas e utili- zados por sistemas especialistas� Há uma variedade de sistemas Prolog comercialmente disponíveis de forma gratuita� Embora sejam diferentes em alguns detalhes, quase todos são baseados em um núcleo comum (Edinburgh Prologue)� 43 A LINGUAGEM DE PROGRAMAÇÃO JAVA Linguagem que foi inicialmente desenvolvida para dispositivos móveis, como liquidificador, geladeiras e outros objetos (KUSZKA, 2019)� O nome era OaK (SBROCCO; MACEDO, 2012), mas foi trocado para Java porque já havia uma empresa com esse nome� O Java foi utilizado em aparelhos portáteis, por ser uma linguagem baseada no Smalltalk e principal- mente na linguagem C++� No começo, o Java não fez muito sucesso, porém, a equipe do Java, que per- tencia à Sun MicroSystems, teve a ideia de embutir o Java no Browser, tecnologia que ficou conhecido como Applets� As possibilidades de utilização de transações finan- ceiras pela internet trouxeram grande atenção mun- dial aos investidores� Além disso, o Java embutido na Web possibilitou a exploração de recursos mul- timídia online� Mais tarde, o Java ficou conhecido por sua porta- bilidade, escalabilidade, segurança e alto grau de acoplação de dispositivos móveis� Surgiram novas tecnologias para o Java, principalmente ferramentas para Web, conhecidas como Servlets, e aplicações poderosas com EJBs� 44 O Java trouxe conceitos e melhorias em muitas tec- nologias e, o mais importante para o público, era uma tecnologia grátis com licenças semelhantes a GPL utilizada pelo Software Livre. Milhares de desenvolvedores migravam do C, C++, Delphi, Visual Basic para o Java� Em pouco tempo, era a tecnologia que estava nos celulares, na TV, nos carros, nos satélites e onde mais poderia imaginar� Os concorrentes não aguentaram a grandeza do Java e seu poder, a Microsoft, que não acreditava na Internet, voltou atrás e fez uma versão semelhante, conhecida como .NET com o C#. A programação orientada a objetos já era conhecida do público programador, porém, pouco difundida� Graças ao Java, esse padrão foi adotado no mundo todo, um legado à humanidade� O Java foi construído em 1991, porém ficou co- nhecido alguns anos mais tarde com a equipe de James Gosling, conhecido como o “Pai do Java” (GUIMARÃES, 2012)� O Java nunca parou de evoluir; os aparelhos celulares sempre utilizaram o Java, no começo uma tecnologia conhecida como JME� Muitas tecnologias surgiram ou foram influenciadas peloJava, como .NET, Python, Ruby, Jade e Jason� Podcast 2 45 https://famonline.instructure.com/files/142261/download?download_frd=1 Hoje, o Java é ensinado em faculdades e se mostra firme, enquanto algumas linguagens que prometiam ser um forte concorrente sumiram com o tempo� Mas apesar de parecer perfeita, não é bem assim� Há alguns tipos de aplicação em que os paradigmas do Java não são bem aceitos� O Java funciona junto com linguagens como o C/ C++, Python e outras e pertence à Oracle, que está mudando alguns conceitos do Java� O JDK, a partir da versão 11, já será pago, algumas IDEs (como o Netbeans) não serão mais mantida pela Oracle� Como será o futuro do Java, ninguém sabe ainda� Porém, ainda haverá versões OpenJDK e IDEs como o Apache Netbeans e Eclipse gratuitas� 46 CONSIDERAÇÕES FINAIS Neste módulo, conhecemos algumas linguagens de programação, o que é um paradigma e os domí- nios e critérios de escolhas para desenvolvimento de software. Você deve ter notado que o texto é uma introdução ao conhecimento dos paradigmas de programa- ção, e que teve um grande foco nas linguagens de programação� Conhecemos a sintaxe e as diferenças de linguagens que possibilitaram um novo horizonte da importân- cia de saber os tipos e as ideias relacionadas aos paradigmas de programação� Além disso, os paradigmas não são os únicos crité- rios para projetos de software, há muitos conceitos envolvidos que, conforme explicado, estudaremos posteriormente� Todo conhecimento adquirido ajuda a compreen- der melhor as linguagens de programação e a fazer escolhas, ter opinião mais elaborada a respeito das tecnologias� 47 SÍNTESE Paradigmas de Linguagem de Programação 1) Paradigmas e suas aplicações. O estudo dos paradigmas de linguagens de programação vem da necessidade de conhecer o objetivo de cada técnica utilizada nas linguagens: • Entendendo o que são. • Tipos de paradigmas de linguagem de programação. 2) Linguagens e Projeto. Conforme já explicado, há diversas linguagens de programação construídas para ideias e aplicações diferenciadas: • Tipos de linguagem de programação. • Por que os paradigmas são importantes para projeto de software. 3) Critérios e Domínios. Os projetos de software têm alguns requisitos para a escolha de determinada tecnologia e linguagem de programação, em que os domínios fazem parte desse processo: • Requisitos que envolvem aspectos da arquitetura e custos de projetos de software. • Arquitetura da linguagem de programação. 4) Evolução das linguagens. Conceitos históricos e sabedoria de que não é a linguagem de programação da moda que é a coisa mais importante, mas sim quais paradigmas utilizar em projetos de software: • Histórico das linguagens. • Evolução das linguagens e atualizações. Referências Bibliográficas & Consultadas ARALDI, A� A� R� Linguagem de Programação� Revista Ensino & Informação, 2018� Disponível em: https://www.ensinoeinformacao.com/computacao- -linguagem-prolog� Acesso em: 16 jul� 2019� GUIMARÃES, G� História da Computação� P@t News, 2012� Disponível em: http://www.dsc.ufcg.edu. br/~pet/jornal/dezembro2012/materias/historia_da_ computacao.html� Acesso em: 18 jul� 2019� JONES, M� T� As linguagens da IA� 19 jan� 2018� Disponível em: https://www.ibm.com/develo- perworks/br/library/cc-languages-artificial-intelligence/ index.html� Acesso em: 22 jul� 2019� KUSZKA, B� A evolução do Java até a era da nuvem� Canaltech 04 jul� 2019� Disponível em: https://www. msn.com/pt-br/noticias/ciencia-e-tecnologia/a-evolu%- C3%A7%C3%A3o-do-java-at%C3%A9-a-era-da-nuvem/ ar-AADREUK#page=2� Acesso em: 16 jul� 2019� https://www.ensinoeinformacao.com/computacao-linguagem-prolog https://www.ensinoeinformacao.com/computacao-linguagem-prolog http://www.dsc.ufcg.edu.br/~pet/jornal/dezembro2012/materias/historia_da_computacao.html http://www.dsc.ufcg.edu.br/~pet/jornal/dezembro2012/materias/historia_da_computacao.html http://www.dsc.ufcg.edu.br/~pet/jornal/dezembro2012/materias/historia_da_computacao.html https://www.ibm.com/developerworks/br/library/cc-languages-artificial-intelligence/index.html https://www.ibm.com/developerworks/br/library/cc-languages-artificial-intelligence/index.html https://www.ibm.com/developerworks/br/library/cc-languages-artificial-intelligence/index.html https://www.msn.com/pt-br/noticias/ciencia-e-tecnologia/a-evolu%C3%A7%C3%A3o-do-java-at%C3%A9-a-era-da-nuvem/ar-AADREUK#page=2 https://www.msn.com/pt-br/noticias/ciencia-e-tecnologia/a-evolu%C3%A7%C3%A3o-do-java-at%C3%A9-a-era-da-nuvem/ar-AADREUK#page=2 https://www.msn.com/pt-br/noticias/ciencia-e-tecnologia/a-evolu%C3%A7%C3%A3o-do-java-at%C3%A9-a-era-da-nuvem/ar-AADREUK#page=2 https://www.msn.com/pt-br/noticias/ciencia-e-tecnologia/a-evolu%C3%A7%C3%A3o-do-java-at%C3%A9-a-era-da-nuvem/ar-AADREUK#page=2 MANZANO, J� A� N� G� Algoritmos: lógica para de- senvolvimento de programação de computadores� 28� ed� São Paulo: Érica, 2016 [Biblioteca Virtual]. MANZANO, J� A� N� G� Java 7: programação de computadores: guia prático de introdução, orien- tação e desenvolvimento� São Paulo: Érica, 2011 [Biblioteca Virtual]. MELO, A� C� V�; SILVA, F� S� C� Princípios de Linguagem de Programação� São Paulo: Edgar Blücher LTDA, 2003 [Biblioteca Virtual]� NISHIKIORI, I� Nove curiosidades sobre Sophia, a primeira robô cidadã do mundo� Tech Tudo, 11 ago� 2018� Disponível em: https://www.techtudo. com.br/listas/2018/08/nove-curiosidades-sobre- -sophia-a-primeira-robo-cidada-do-mundo.ghtml� Acesso em: 22 jul� 2019� PAULA FILHO, W. P. Engenharia de software: funda- mentos, métodos e padrões� 3� ed� São Paulo: LTC, 2009 [Biblioteca Virtual]� PRESSMAN, R� S�; MAXIM, B� R� Engenharia de Software: uma abordagem profissional. 8. ed. Porto Alegre: McGraw-Hill, 2016 [Biblioteca Virtual]� PROGRAMADOR� História da Programação. Disponível em: http://www.programador.com.br/his- toria-da-programacao.html� Acesso em: 18 jul� 2019� https://www.techtudo.com.br/listas/2018/08/nove-curiosidades-sobre-sophia-a-primeira-robo-cidada-do-mundo.ghtml https://www.techtudo.com.br/listas/2018/08/nove-curiosidades-sobre-sophia-a-primeira-robo-cidada-do-mundo.ghtml https://www.techtudo.com.br/listas/2018/08/nove-curiosidades-sobre-sophia-a-primeira-robo-cidada-do-mundo.ghtml http://www.programador.com.br/historia-da-programacao.html http://www.programador.com.br/historia-da-programacao.html SBROCCO, J� H� T� C�; MACEDO, P� C� Metodologias ágeis: engenharia de software sob medida. São Paulo: Érica, 2012 [Biblioteca Virtual]� SCHMIDT, G� Introdução para o iniciante à Linguagem Assembly dos Microprocessadores ATMEL AVR (2008) Disponível em: http://www.avr- -asm-download.de/beginner_pt.pdf� Acesso em: 25 jul� 2019� SEBESTA, R� W� Conceitos de linguagens de pro- gramação� 11� ed� Porto Alegre: Bookman, 2018� SOUZA, A� F� et al� Algoritmos e lógica de progra- mação: um texto introdutório para a engenharia� 3� ed� Cengage, 2019 [Biblioteca Virtual]� TUCKER, A� B�; NOONAN, R� E� Linguagens de Programação: Princípios e Paradigmas� 2� ed� McGraw-Hill, 2009. VIEBRANTZ, A� Introdução a linguagem Scala� Disponível em: http://high5devs.com/2015/05/ intro-linguagem-scala-parte-1/� Acesso em: 25 jul� 2019� http://www.avr-asm-download.de/beginner_pt.pdf http://www.avr-asm-download.de/beginner_pt.pdf http://high5devs.com/2015/05/intro-linguagem-scala-parte-1/ http://high5devs.com/2015/05/intro-linguagem-scala-parte-1/ _Hlk14325107 _Hlk14321924 _Hlk14325353 _Hlk14322984 _Hlk14324817 _Hlk14325290 _Hlk14326975 _Hlk14161887 _Hlk14332416 _Hlk14327909 _Hlk14327940 _Hlk14327977 _Hlk14338376 Introdução CompreendeNDO os paradigmas e suas aplicações; formar uma visão abrangente e sistêmica do cenário contemporâneo de desenvolvimento de software Paradigmas e suas aplicações O que é um Paradigma? Linguagens de Programação e suas categorias Linguagens de Baixo Nível Linguagens de Médio Nível Linguagens de Alto Nível Classificação das Linguagens de ProgramaçãoCritérios de Avaliação de Linguagens; Projetos de Linguagens Domínios de programação e ambientes de programação Aplicações Científicas e Militares Aplicações Comerciais Inteligência Artificial Sistemas diversos Evolução das principais linguagens de programação Tipo de Sistema A linguagem de programação Prolog A linguagem de programação Java Considerações finais Síntese
Compartilhar