Baixe o app para aproveitar ainda mais
Prévia do material em texto
Código Logístico 58843 Fundação Biblioteca Nacional ISBN 978-85-387-6523-3 9 7 8 8 5 3 8 7 6 5 2 3 3 LIN G U A G EN S E PA R A D IG M A S D E P R O G R A M A Ç Ã O VA LD IN EI J. SA U G O Linguagens e paradigmas de programação IESDE 2020 Valdinei J. Saugo © 2020 – IESDE BRASIL S/A. É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do detentor dos direitos autorais. Projeto de capa: IESDE BRASIL S/A. Imagem da capa: whiteMocca/Shutterstock Todos os direitos reservados. IESDE BRASIL S/A. Al. Dr. Carlos de Carvalho, 1.482. CEP: 80730-200 Batel – Curitiba – PR 0800 708 88 88 – www.iesde.com.br CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ S273L Saugo, Valdinei J. Linguagens e paradigmas de programação / Valdinei J. Saugo. - 1. ed. - Curitiba [PR] : IESDE, 2020. 86 p. : il. Inclui bibliografia ISBN 978-85-387-6523-3 1. Linguagem de programação (Computadores). I. Título. 19-60714 CDD: 005.13 CDU: 004.43 Valdinei J. Saugo Especialista em Engenharia de Software pela Pontifícia Universidade Católica do Paraná (PUCPR) e em Sistemas Embarcados pela Universidade Positivo. Bacharel em Sistemas da Informação pela Unibrasil. Profissional de Tecnologia da Informação com experiência em consultoria e desenvolvimento de projetos de software e hardware para metrologia industrial, automação industrial e controle de acesso com tecnologia RFID. Professor no ensino de desenvolvimento de software na área de Tecnologia da Informação e Internet das Coisas. Sumário Apresentação 7 1 Linguagens de programação 9 1.1 Surgimento das linguagens de programação 9 1.2 Definição das linguagens de programação 11 1.3 Aplicações das linguagens de programação 14 2 Tipos de linguagens de programação 19 2.1 Classificação das linguagens de programação 19 2.2 Linguagens de programação estruturadas 20 2.3 Linguagens de programação orientadas a objetos 21 2.4 Linguagens de programação funcionais 24 3 Tipos de dados em linguagens de programação 29 3.1 Definição de dados em linguagens de programação 29 3.2 Dados primitivos em linguagens de programação 30 3.3 Criação de dados em linguagens de programação 34 4 Introdução à linguagem de programação Java 39 4.1 Surgimento da linguagem Java e suas aplicações 39 4.2 Tipos de dados e sintaxe da linguagem Java 41 4.3 Programação em linguagem Java e exemplos de aplicação 43 5 Estruturas de dados com linguagem de programação Java 49 5.1 O que são estruturas de dados 49 5.2 Definição de vetores, matrizes, filas e pilhas em linguagem Java 50 5.3 Algoritmos de estruturas de dados em linguagem Java 52 6 Paradigmas de programação 59 6.1 Paradigmas de programação funcional, imperativo e lógico 59 6.2 Exemplos de aplicação 64 7 Paradigma de programação orientada a objetos 67 7.1 O que é programação orientada a objetos? 67 7.2 Definição de classes e objetos 68 7.3 Exemplos de aplicação de orientação a objetos 71 8 Tendências em linguagens de programação 75 8.1 Futuro das linguagens de programação 75 8.2 Linguagens de programação mais promissoras 79 Gabarito 83 Apresentação As tecnologias modernas estão em constante evolução e são aplicadas nos mais diversos segmentos de mercado, especialmente no desenvolvimento de sistemas ou de software para empresas. Para que muitos equipamentos utilizados no nosso cotidiano operem, é necessário um sistema – o software –, responsável por dar “vida e sentido” a muitas máquinas, de modo que cumpram o papel para o qual foram destinadas. O software, atualmente, está embutido em diversos produtos eletrônicos de uso diário, tais como: televisores, celulares, veículos, eletrodomésticos e equipamentos de internet. Se um produto eletrônico realiza algum cálculo ou processamento, certamente parte dele é constituído de um software. No dia a dia estão presentes, também, sistemas em vários segmentos, como a internet, com suas páginas web e serviços que não seriam possíveis sem um conjunto de tecnologias que permitam a troca de informações entre pessoas e computadores. Para que toda essa tecnologia seja operacional e ajude as pessoas em suas tarefas, é preciso estudá-la, projetá-la e, em algum momento, inseri-la nesses produtos tecnológicos. A presente obra, nesse sentido, visa colaborar com uma apresentação introdutória sobre linguagens e paradigmas de programação. Cada tipo de aplicação e sistema tem uma metodologia de desenvolvimento, na qual as linguagens de programação entram em cena. Existem paradigmas e linguagens de programação adequados para cada necessidade do mercado – sistemas eletrônicos e de internet, por exemplo, utilizam metodologias distintas. Dessa forma, esta obra destina-se não apenas a informar os leitores sobre o que é tecnologia e software, mas também visa orientá-los nas diferentes aplicações de sistemas e de linguagens de programação para reconhecer quais as tecnologias mais adequadas a cada situação. O livro está estruturado em oito capítulos e aborda, inicialmente, conceitos inerentes às linguagens e paradigmas de programação e, na sequência, as metodologias de programação orientada a objetos, programação funcional e programação lógica. Por fim, conclui o conteúdo com uma apresentação de tendências de mercado para linguagens de programação e sistemas. Bons estudos! 1 Linguagens de programação A tecnologia da informação apresenta uma infinidade de segmentos, cada um com suas particularidades e usabilidades. O profissional do setor, portanto, sempre contará com um grande volume de conteúdo a ser explorado. Nesse sentido, um dos diferenciais mais importantes a quem trabalha na área é adquirir conhecimentos em programação de computadores. O contínuo avanço desse mercado, nas últimas décadas, levou a Central de Processamento de Dados (CPD), como era chamado o departamento de informática das organizações, a superar sua restrição apenas às tarefas técnicas de operação e manutenção de sistemas para ocupar posições estratégicas. A evolução da internet, somada aos serviços e dispositivos cada vez mais integrados na rede, em todos os níveis da sociedade, torna hoje imprescindível a presença de um profissional de tecnologia da informação. Nesse cenário em que a tecnologia está presente em nossas residências e em nosso cotidiano por meio de computadores, eletrônicos, eletrodomésticos, smartphones e smart TVs, por exemplo, é necessário um corpo técnico de engenheiros e de desenvolvedores de sistemas para projetar e programar equipamentos funcionais às nossas necessidades. Assim, quando falamos de linguagens de programação, nós as reconhecemos capazes de atender às mais variadas demandas, nos mais diversos segmentos do mercado. Neste capítulo, trataremos dos assuntos que introduzem os conceitos das linguagens de programação, como surgiram e suas principais características, aplicações e utilidades para o profissional moderno de tecnologia da informação. 1.1 Surgimento das linguagens de programação Linguagens de programação são linguagens técnicas, utilizadas para desenvolver sistemas e comunicação com o computador. Em sua totalidade, são constituídas de comandos que, quando utilizados de forma adequada, executam uma ou mais ações. Assim, podemos afirmar que um software em utilização no computador é um conjunto predefinido de comandos e sentenças lógicas que realizam as ações para as quais aquele sistema foi desenvolvido. Os próprios sistemas operacionais que utilizamos nos computadores ou celulares, por exemplo, foram escritos com base em uma ou mais linguagens de programação. O surgimento dos primeiros computadores elétricos aconteceu na década de 1930 e veio em substituição a equipamentos mecânicos utilizados na época. Apenas em 1948, Konrad Zuse publicou seu estudo para uma nova linguagem de programação, chamada Plankalkül. Entretanto, naquele tempo, seu feito ainda não tinha muita utilidade e acabou sendo esquecido (COMPUTERHISTORY MUSEUM, 2019). Vídeo Linguagens e paradigmas de programação10 A partir do início da década de 1950, surgiram as primeiras linguagens de programação até então modernas, destacando-se Fortran (Formula Translation) e Cobol (Common Business-Oriented Language), hoje consideradas clássicas. A linguagem de programação Fortran foi desenvolvida pela empresa americana International Business Machines (IBM) para ser utilizada em projetos científicos e de engenharia, os quais demandavam complexidade em cálculo matemático, sendo que, inicialmente, foi amplamente utilizada por matemáticos e cientistas. À época, as instruções para programas de computador eram uma tarefa trabalhosa; depois, no entanto, 1.000 instruções de códigos foram facilmente traduzidas para 47 instruções em Fortran, por exemplo (IBM, 2019). Já a linguagem de programação Cobol foi desenvolvida no final da década de 1950 por fabricantes e usuários de computadores do governo norte-americano. Sua aplicação era voltada ao desenvolvimento de sistemas comerciais que exigiam manipulação precisa e eficiente de um grande volume de dados. Vale ressaltar que boa parte das aplicações de empresas varejistas ainda é desenvolvida em linguagem Cobol. Durante a década de 1960, uma pesquisa foi conduzida em Dartmouth College e resultou na evolução da programação estruturada que, naquele momento, foi considerada uma opção para a escrita mais clara dos programas de computador, fácil de testar e de modificar. Um dos resultados mais importantes da pesquisa foi o desenvolvimento da linguagem de programação Pascal, pelo professor Niklaus Wirth1, em 1971 – batizada, assim, para homenagear o matemático e filósofo Blaise Pascal2. Essa linguagem acabou sendo adotada no ensino de programação estruturada em ambientes acadêmicos e logo se tornou a preferida na maioria das universidades (DEITEL, P.; DEITEL, H., 2010). Os paradigmas da programação começaram a despontar na década de 1960 e foram, em grande parte, elaborados na década de 1970, momento em que surgiram importantes linguagens na área, como: • Simula: foi a primeira linguagem de programação que deu suporte ao conceito de classes. • C: uma das primeiras linguagens de programação aplicada a sistemas e que, atualmente, tem uma grande influência. • Basic: desenvolvida com o objetivo de escrever programas simples, sendo seu principal propósito familiarizar os iniciantes com as técnicas de programação. • Prolog: foi elaborada em 1972 e considerada a primeira com paradigma lógico; é uma das linguagens utilizadas no desenvolvimento e ensino de técnicas de inteligência artificial. 1 Niklaus Wirth nasceu em 1934, é suíço e engenheiro eletrônico. Projetou algumas linguagens de programação, incluindo a Pascal e escreveu livros nas áreas de engenharia de software e programação estruturada. Em 1984, recebeu o Prêmio ACM Turing, atribuído em reconhecimento ao desenvolvimento de uma sequência inovadora de linguagens, e, em 2004, foi nomeado membro do Museu de História da Computação. 2 Autor da célebre frase “O coração tem razões que a própria razão desconhece”, o gênio da ciência e da literatura universal, Blaise Pascal, nasceu na França, em 1623, e acumula os títulos de físico, matemático, filósofo, teólogo, pai da computação digital, da probabilidade, da física experimental, da hidráulica, do cálculo integral e diferencial, e da geometria projetiva. Aos 16 anos, iniciou suas pesquisas voltadas para a física e inventou, na época, uma pequena calculadora. Em 1647, fez experimentos sobre a pressão atmosférica, redigiu um tratado sobre o vácuo, aperfeiçoou o barômetro de Torricelli e concebeu dois inventos: a prensa hidráulica e a seringa. Seus trabalhos foram de grande valor para o desenvolvimento da estatística e, no campo da matemática, teve reconhecimento por meio da teoria da probabilidade e do tratado do triângulo aritmético. Linguagens de programação 11 Na década de 1990, algumas linguagens de programação foram aprimoradas e outras surgiram com o foco redirecionado para um novo modelo de sistemas, agora integrado à rede e permeado por diversas outras interações que a evolução da internet começou a oferecer. Aqui, estamos falando de linguagens como Java, JavaScript e PHP, mais completas e modernas que as existentes na época, trazendo melhorias aos processos de desenvolvimento de sistemas – todas relacionadas com a internet –, e também Visual Basic e Object Pascal, bastante utilizadas em aplicações corporativas (DEITEL, P.; DEITEL, H., 2010). Quando tratamos de linguagens de programação, é difícil afirmar se uma é melhor que a outra. O que pode existir são vantagens e desvantagens ao compará-las, portanto, é importante que o profissional de tecnologia possua conhecimento sobre as especificidades de cada uma delas para utilizar a mais apropriada em cada situação. A linguagem Java, por exemplo, é considerada robusta e possibilita desenvolver aplicações web de grande porte, aplicativos móveis e aplicações para Windows, Linux e macOS. Já a linguagem PHP, que é destinada a sistemas web, não possibilita desenvolver um aplicativo para smartphones. As linguagens de programação fazem parte do cotidiano do profissional de tecnologia da informação e estão presentes em todos os equipamentos eletrônicos atuais (dispositivos móveis, sistemas operacionais, sistemas corporativos e sistemas em nuvem). Direta ou indiretamente, o profissional dessa área terá contato com tais tecnologias, tanto para manutenção e desenvolvimento de sistemas como para especificação de projetos ou suporte técnico. Por fim, podemos observar que as linguagens de programação vêm evoluindo, tornando-se mais robustas, acessíveis e com novas funcionalidades, além de mais adaptáveis e compatíveis com as atuais demandas do mercado e dos sistemas informatizados modernos. 1.2 Definição das linguagens de programação Os primeiros computadores que surgiram eram programados em linguagem de máquina, ou seja, as instruções eram definidas utilizando-se sequências de números zero e um, que diziam exatamente o que a máquina deveria realizar. Esses programas iniciais realizavam operações chamadas de nível baixo, pois consistiam em mover dados de um lugar para outro ou realizar comparação entre registradores de memória. Porém, essas tarefas eram demoradas e cansativas de se preparar e, após finalizadas essas instruções, sua leitura e modificações, quando necessárias, eram complexas (AHO et al., 2008). As linguagens de programação possuem propriedades que podem ser classificadas quanto às suas características, às suas funcionalidades e ao seu paradigma de programação. Quanto ao seu tipo, as linguagens de programação podem ser organizadas em três grupos básicos: linguagem de máquina, linguagem de montagem (assembly) e linguagem de alto nível. Vejamos a seguir as especificidades de cada uma delas. Vídeo Linguagens e paradigmas de programação12 1.2.1 Linguagem de máquina Um programa construído em linguagem de máquina é escrito em formato legível apenas para os computadores, ou seja, é uma sequência de bytes com as instruções que serão executadas pelo processador, sendo cada uma delas uma tarefa que o processador realizará de modo sequencial. Para escrever um programa com essa linguagem, é necessário ter em mãos os códigos de instruções do processador e possuir conhecimentos acerca de sua arquitetura, porém, obter esses códigos e gerenciá-los é uma tarefa árdua. O desenvolvimento de um software com linguagem de máquina é algo aplicado em situações muito específicas, sendo raramente utilizado em sistemas direcionados aos usuários finais. Devido a sua complexidade, foi criada a linguagem chamada assembly, composta por códigos e siglas que representam as mesmas instruções do processador e facilitam o desenvolvimento de códigos de baixo nível, quando houver essa necessidade (SILVA, 2015). 1.2.2 Linguagem assembly Utiliza a língua inglesa para representar as operações básicas de um programaescrito em assembly. Existem os programas chamados assemblers, que realizam a conversão de um programa escrito nessa linguagem para a linguagem de máquina, que, por sua vez, é legível pelo processador. Vejamos a figura a seguir: Figura 1 – Exemplo de código em assembly 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <iostream> using namespace std; int main() { int a, b, c; cin >> a; cin >> b; _asm { mov eax, a add eax, b mov c, eax }; cout << c << endl; cin.get(); return 0; } Fonte: Elaborada pelo autor. Linguagens de programação 13 Podemos observar que a Figura 1 demonstra um exemplo de código em linguagem C++, que é uma evolução da linguagem C, no qual foram adicionados recursos do paradigma de programação orientada a objetos. No código exemplificado, há um trecho que realiza uma operação de soma entre dois números inteiros. Um programa, quando escrito totalmente ou quando contém partes em assembly, está preparado em um formato que pode ser lido pelas pessoas, mas que é ilegível ao processador até que seja convertido para linguagem de máquina por meio de um programa assembler. 1.2.3 Linguagem de alto nível Linguagens de alto nível são as mais utilizadas, pela maioria dos profissionais de tecnologia, no desenvolvimento de sistemas e serão o nosso principal objeto de estudos. Elas consistem em uma sintaxe que se assemelha à nossa escrita e, normalmente, a língua inglesa é escolhida para registrar as instruções. No alto nível, toda a complexidade da assembly e da linguagem de máquina ficam a cargo de um compilador, que será o responsável por converter as instruções legíveis para os humanos em um programa com instruções para o computador. Na Figura 2, podemos observar as etapas da construção de um programa usando linguagem de alto nível. Figura 2 – Etapas de produção com linguagem de alto nível Escrita do programa Compilador Código-fonte Compilação Carregador Código-objeto Execução Código executável em memória Código executável Fonte: Elaborada pelo autor. Com a utilização de linguagens de alto nível, o desenvolvedor não precisa se preocupar com os níveis mais baixos de hardware, como instruções do processador, endereços de memória ou tipos de processador; tarefa a cargo do compilador. Essa característica das linguagens de alto nível é conhecida por abstração e, em geral, desenvolver sistemas com linguagens de programação de alto nível é mais fácil e produtivo, em comparação à linguagem de máquina e à assembly. A performance do software desenvolvido em linguagem de alto nível não é mesma de um programa escrito em assembly ou na linguagem de máquina. Entretanto, devido à sua complexidade, essas linguagens são utilizadas quando não é possível resolver determinado problema ou algum fator externo com linguagem de alto nível, como ocorre nas limitações de hardware. Na Figura 3, podemos ver um exemplo de linguagem de alto nível cujo código foi escrito em linguagem Python, que é derivada da linguagem C e surgiu na década de 1990, sendo aplicada basicamente em sistemas de internet. Devido à sua estrutura simplificada e otimizada para operar cálculos matemáticos, teve boa aceitação no meio científico e recentemente vem ganhando espaço em sistemas que processam grandes volumes de informação. sintaxe: em linguagem de programação, é a estrutura de escrita de códigos e comandos utilizados. Linguagens e paradigmas de programação14 Figura 3 – Exemplo de código em linguagem de alto nível >>> numero1 = 20 >>> numero2 = 30 >>> soma = numero1 + numero2 >>> print(‘Resultado: ’, soma) Resultado: 50 Fonte: Elaborada pelo autor. Ao longo dos anos, os compiladores modernos passaram por diversas melhorias e aperfeiçoamentos. Atualmente, existem também otimizadores para aprimorar a performance do software gerado em linguagem de alto nível (AHO et al., 2008). Na maioria dos sistemas que usamos diariamente, essa diferença na performance é quase imperceptível. Porém, existem aplicações críticas voltadas para áreas de saúde, aviação e sistemas industriais, por exemplo, que dependem de alto desempenho e de respostas instantâneas na resolução de cálculos e de diversas outras atividades. No caso desses produtos, as partes que compõem o software são desenvolvidas em linguagem de baixo nível a fim de obter o máximo desempenho e, assim, atender aos requisitos de resposta imediata, quando solicitado. 1.3 Aplicações das linguagens de programação As linguagens de programação, desde seu surgimento, sempre tiveram o objetivo de auxiliar na escrita de programas para a realização de tarefas em um computador. Porém, em seus primórdios, as aplicações desenvolvidas eram voltadas à realização de cálculos para o meio científico e de engenharia. Se comparadas aos computadores atuais, as primeiras máquinas eram grandes, de pouco desempenho e custavam muito caro – apenas órgãos governamentais e universidades de prestígio tinham funcionários qualificados e condições financeiras para mantê-las em operação. Na Figura 4, podemos ver o Eniac (Electronic Numerical Integrator and Computer), considerado o primeiro computador digital do mundo que, com seus componentes e interfaces para operação, ocupava o tamanho de uma sala. Sua capacidade resumia-se a realizar cálculos matemáticos, o que era considerado uma grande evolução para a época. Com o passar dos anos e com a evolução da indústria eletrônica, existem processadores em miniatura que em alguns casos chegam a ser menores do Vídeo Ev er et t H is to ric al /S hu tte rs to ck Figura 4 – Eniac, computador da década de 1940 Linguagens de programação 15 que uma unha. Na Figura 5, é possível conferir o grau de miniaturização com o exemplo de um microprocessador moderno. Em comparação aos primeiros computadores, as máquinas atuais são milhares de vezes menores. A redução no tamanho dos processadores permitiu que fossem colocados dentro dos aparelhos, possibilitando, assim, a criação de diversos novos equipamentos. Além disso, essa evolução abriu caminho para o desenvolvimento de novas aplicações e sistemas, e influenciou a criação de outras linguagens de programação e o aperfeiçoamento das já existentes. Figura 5 – Exemplo de um microprocessador de uso geral IM _V IS UA LS /S hu tte rs to ck Muitos equipamentos de uso doméstico, industrial, médico, militar, aeroespacial etc., que contêm um microcontrolador ou microprocessador e realizam algum processamento, têm programas em execução em sua parte interna. Alguns desses equipamentos resolvem problemas ou executam tarefas por conta própria, enquanto outros interagem em nossas atividades, fornecendo informações com entrada de dados das mais variadas maneiras. Independentemente da forma de funcionamento, dentro desses equipamentos existem um ou mais programas em operação, que foram desenvolvidos com base em linguagens de programação. Se tomarmos como exemplo um relógio digital de pulso, veremos que, para mostrar as horas em seu visor, ele possui um processador interno cujo programa pode ser escrito em linguagem assembler ou linguagem C. A evolução para a chamada computação pessoal, na qual as pessoas, de um modo geral, começaram a ter acesso aos computadores, ocorreu na década de 1970. Foi em 1977 que a Apple Computer começou a popularizar os computadores em ambientes domésticos e corporativos. Em 1981, por sua vez, a IBM era a maior fornecedora de computadores do mundo e lançou sua versão de computador pessoal conhecido como IBM Personal Computer, consolidando o termo PC (personal computer), usado até hoje para designar computador. A partir desse momento, a computação pessoal chegou às residências, às empresas, aos órgãos governamentais e às indústrias, abrindo um leque de oportunidades para o desenvolvimento de softwares a fim de atender às carências desses segmentos (DEITEL, P.; DEITEL, H., 2010). Linguagens e paradigmas de programação16Alguns anos mais tarde, com a chegada da internet, tanto as empresas quanto as pessoas começam a ter mais necessidade de trocar informações via rede, entre diferentes plataformas e sistemas, com a finalidade de reduzir as distâncias e o tempo nas comunicações. Isso gerou demandas para novas funcionalidades e adequações das linguagens de programação, de modo a dar suporte de comunicação via internet nos chamados sistemas distribuídos (DEITEL, P.; DEITEL, H., 2010). Assim, diversos websites e sistemas de web, utilizados pelas pessoas e empresas, foram desenvolvidos com linguagem PHP, e muitos dos aplicativos que rodam hoje em smartphones ou smart TVs são desenvolvidos em linguagem Java. Considerações finais As linguagens de programação fazem parte de muitas das nossas tarefas, e até mesmo quem não é profissional da área e não mantém contado direto com esse meio está ligado a elas. Vários produtos e serviços que utilizamos em nossas vidas possuem tecnologias e sistemas que os tornam capazes de executar tarefas, tendo sido construídos com linguagens de programação. Algumas das linguagens de programação clássicas mais conhecidas e ainda utilizadas são Cobol, Fortran, Pascal e Basic. Dentre as outras linguagens modernas mais conhecidas e amplamente aplicadas estão C++, C# (C Sharp), C, Java, PHP, JavaScript, Visual Basic e Python (TIOBE Software BV, 2020). Os recursos atuais vêm sendo cada vez mais difundidos e integrados, bem como suas aplicações executadas em ambientes diversificados, como dispositivos móveis, computação em nuvem, relógios inteligentes, computadores e notebooks, servidores, sistemas eletrônicos, veículos, entre outros. Com as melhorias e os aperfeiçoamentos realizados nas redes de comunicação durante os últimos anos, a integração de diferentes plataformas vem crescendo, assim como acontece com o volume de dados operacionalizados diariamente. O profissional de tecnologia da informação, como mencionado no início deste capítulo, tem uma ampla gama de áreas de atuação à sua escolha. Vimos também que a grande integração de sistemas e tecnologias faz com que as linguagens de programação estejam direta e indiretamente atreladas às tarefas cotidianas. Assim, o profissional que mais se destaca é aquele que está atualizado frente à tecnologia e sabe aproveitar o potencial dessas linguagens, aplicando-as de forma eficiente na construção de sistemas e no tratamento de dados. Ampliando seus conhecimentos • TIOBE Software BV. Tiobe Index for January 2020: January Headline – Programming Language C awarded Programming Language of the Year 2019. Disponível em: https://www.tiobe.com/ tiobe-index/. Acesso em: 06 jan. 2020. Tiobe Index, como é conhecida, é uma pesquisa realizada pela empresa de consultoria em software Tiobe. Essa pesquisa apresenta um índice que produz um ranking com as linguagens de programação mais utilizadas no mercado. Linguagens de programação 17 • PIRATAS do Vale do Silício. Direção: Martyn Burke. Produção: Steven Haft; Nick Lombardo; Leanne Moore; Joseph Dougherty. Roteiro: Paul Freiberger; Michael Swaine; Martyn Burke. Estados Unidos: Haft Entertainment, St. Nick Productions; TN, 1999. (95 min.), son., color., 35 mm. O filme Piratas do Vale do Silício mostra como a linguagem Basic esteve presente na ascensão da Microsoft, no ramo de softwares e sistemas operacionais. Atividades 1. As linguagens de programação são ferramentas essenciais para o desenvolvimento de novas tecnologias e sistemas de informação. Dentro do setor de tecnologia da informação, a computação em nuvem vem ganhando destaque. Diante dessas informações, realize uma pesquisa e identifique as linguagens de programação mais utilizadas para o desenvolvimento de sistemas de computação em nuvem. 2. Sistema embarcado é um termo utilizado para o software executado em dispositivos específicos e normalmente aplicados a situações particulares, ao contrário dos computadores, que têm seu uso bem amplo. O software de controle de uma câmera fotográfica, por exemplo, pode ser classificado dessa forma, pois sua finalidade é somente gerenciar as funcionalidades da câmera; não é possível desenvolver outra atividade com a câmera a não ser fotografar ou gravar vídeos. A maioria dos softwares para sistemas embarcados é desenvolvida em linguagem C, pois suas características fazem com que ela seja umas das preferidas para essa finalidade. Considere as informações expostas e realize uma pesquisa para identificar quais são as qualidades que caracterizam a linguagem C como sendo ótima para sistemas embarcados. 3. A linguagem HTML (hyper text markup language) é amplamente utilizada para o desenvolvimento de websites e, em muitos momentos, é confundida com linguagem de programação, sendo que sua definição correta é linguagem de marcação de texto. Nesse sentido, pesquise e apresente as diferenças entre linguagens de programação e linguagem de marcação de texto. Referências AHO, A. V. et al. Compiladores: princípios, técnicas e ferramentas. 2. ed. São Paulo: Pearson, 2008. p. 1-16. COMPUTER HISTORY MUSEUM. Konrad Zuse. Disponível em: https://www.computerhistory.org/ fellowawards/hall/konrad-zuse/. Acesso em: 07 out. 2019. DEITEL, P.; DEITEL, H. Java: como programar. 8. ed. São Paulo: Pearson, 2010. p. 3-7. IBM. Fortran: the pioneering programming language. Disponível em: https://www.ibm.com/ibm/history/ ibm100/us/en/icons/fortran/. Acesso em: 10 out. 2019. SILVA, E. L. da (org.). Programação de computadores. São Paulo: Pearson, 2015. p. 36-38. TIOBE Software BV. Tiobe Index for January 2020: January Headline – Programming Language C awarded Programming Language of the Year 2019. Disponível em: https://www.tiobe.com/tiobe-index/. Acesso em: 06 jan. 2020. 2 Tipos de linguagens de programação Há diferentes paradigmas de linguagens de programação que são amplamente utilizados e estão relacionados com os domínios de aplicação desejados e com os métodos para a resolução de problemas. Nesse contexto, podemos perceber que as próprias metodologias de desenvolvimento de sistemas computacionais estão em constante evolução e que novos recursos são permanentemente incorporados às linguagens da área, de modo a suprir as características emergentes de tais metodologias. Ademais, junto com as mudanças nas metodologias, surgem novas formas de implementação de elementos das linguagens. Tendo em vista a relevância de conhecer as linguagens de programação, portanto, neste capítulo, estudaremos os principais paradigmas de programação e abordaremos de maneira mais aprofundada os conceitos relacionados às linguagens orientadas a objetos, estruturadas e funcionais. 2.1 Classificação das linguagens de programação É importante ressaltar que cada linguagem de programação deve prover mecanismos que permitam a representação e a manipulação naturais dos elementos básicos pelos quais se orientam os problemas tratados. A verificação de tipos, por exemplo, que é realizada no momento da compilação das linguagens tradicionais, é feita durante a execução em linguagens modernas. Ela se dá em decorrência do requisito existente nas metodologias de desenvolvimento mais atuais, as quais estão voltadas à flexibilidade e à representação de dados, objetos e relações (MELO; SILVA, 2014). As linguagens de programação podem ser organizadas em dois grandes grupos: assertivas e declarativas. São, ainda, subdividas em outras categorias, conforme apresenta a Figura 1. Figura 1 – Classificação das linguagens de programação Declarativas Imperativas C Pascal Fortran Orientada a objetos C++ Java C# Funcionais Lisp Miranda Haskell Declarativas Prolog Gödel Satisfação de restrições Mozart/OZ Alice Linguagens de programação Assertivas Fonte: Elaborada pelo autor. Vídeo Linguagens e paradigmas de programação20 As linguagens assertivas baseiam-se em expressões que modificam valores de entidades (dados ou objetos), e as linguagens declarativas têm base em expressões que verificamou induzem relações entre as declarações. Quanto às subdivisões das linguagens de programação assertivas, temos: • Orientadas a objetos: podem ser vistas como ferramentas para construir soluções de problemas, organizando seus elementos com representações de coisas do mundo real. • Imperativas: também conhecidas como estruturadas, são orientadas por dados e podem ser consideradas instrumentos para a resolução de problemas. As linguagens declarativas podem ser como ferramentas para a construção de soluções de problemas orientados por relações entre declarações – nesse caso, os elementos representados são, respectivamente, objetos, dados e relações. Cada parte dessa metodologia apresenta características que a tornam mais apropriada para certos problemas. Ainda, essas características determinam os recursos e as propriedades sintáticas e semânticas desejáveis nas linguagens de programação correspondentes. Por fim, podemos considerar que um paradigma de programação está diretamente relacio- nado à forma de pensar do desenvolvedor e ao modo como ele busca a solução para um problema. É esse paradigma que permite ou não a utilização de determinadas técnicas de programação. 2.2 Linguagens de programação estruturadas O paradigma de programação estruturada é fundamentado no conceito da Máquina de Turing. Na década de 1930, o pesquisador Alan Turing1, razão do nome dessa programação, elaborou uma abstração matemática para um conjunto de funções computáveis. Essa caracterização das funções computáveis foi aproximada por John von Neumann2 a uma arquitetura de computadores que se tornou a base para o que até hoje é utilizado. A programação estruturada obedece a uma sequência de comandos pré-determinados e organizados para resolver um problema de forma sequencial, ou seja, instruções de código preparadas linha por linha. Isso ocorre porque a programação estruturada tem suas origens relacionadas à arquitetura de computadores, que inicialmente eram programados em sequências ordenadas de códigos e instruções de máquina. Segundo o paradigma estruturado, qualquer problema pode ser resolvido utilizando três estruturas: sequencial, condicional e iterativa. Vale ressaltar que esse paradigma procura encontrar uma forma de quebrar qualquer problema complexo em partes menores e mais simples, de modo que, trabalhando em conjunto, pode-se solucioná-lo (ASCENCIO; CAMPOS, 2007). 1 Alan Turing (1912-1954) foi um matemático e criptoanalista que, por meio da Máquina de Turing, sua invenção, influenciou o desenvolvimento da ciência da computação e a formalização do conceito de algoritmo. 2 John von Neumann (1903-1957) foi um matemático que, entre importantes contribuições, sugeriu armazenar instruções na memória do computador para serem executadas mais rapidamente. Com isso, formalizou o primeiro projeto lógico de um computador. Vídeo Tipos de linguagens de programação 21 A programação estruturada é baseada em três conceitos para a resolução de problemas: • Variáveis: recursos utilizados para armazenamento de dados em memória. • Estados: resultados de operações lógicas, de decisão ou cálculos realizados com os conteúdos armazenados em variáveis. • Comandos: utilizados para atribuir valor a variáveis e controlar as ações e instruções em execução dentro de um programa. A correta utilização dessas estruturas resulta em soluções modularizadas, que conseguem usar uma quantidade menor de linhas de código otimizando o desempenho do sistema. As linguagens de programação estruturadas têm sido aplicadas em várias áreas do mercado. Grande parte dos sistemas bancários e dos projetos científicos de universidades e órgãos de pesquisas é desenvolvida a partir de linguagens estruturadas. Um dos motivos de sua grande aplicação é de caráter histórico: os primeiros projetos de linguagens de programação utilizados comercialmente foram baseados no paradigma estruturado. Outro motivo de sua grande aplicabilidade é a proximidade dessas linguagens com a máquina, o que faz com que sejam implementadas de maneira mais eficiente que algumas linguagens em outros paradigmas de programação. 2.3 Linguagens de programação orientadas a objetos O paradigma de programação orientada a objetos tem como objetivo principal solucionar problemas pela colaboração de vários elementos, similar à forma como usamos a prestação de serviços de outras pessoas para resolver vários problemas do cotidiano. A ideia da prestação de serviços pode ser exemplificada pelas situações diárias. Imagine que precisamos realizar uma viagem e reservar um quarto de hotel, então, podemos acessar um sistema web, escolher o hotel desejado e proceder com a reserva. Quando requisitamos um serviço como no exemplo, não precisamos saber como o site de reservas faz para contatar o hotel e garantir o quarto; precisamos apenas acessar o serviço on-line e realizar o processo pelo sistema, sem a necessidade de participar ou interferir diretamente na negociação. Perceba que na situação descrita nos abstraímos da forma como o serviço foi realizado, interagindo apenas com o serviço on-line (objeto) de reserva de quartos e esperando pelo resultado. Esse modelo de prestação de serviços por agentes apropriados é a base para o paradigma de programação orientada a objetos, e a metodologia que se aplica a esse paradigma tem como princípio a distribuição de serviços e responsabilidades para reduzir a complexidade de um dos colaboradores. Nos últimos anos, as áreas de aplicação das linguagens de programação orientadas a objetos têm expandido. Essas linguagens foram criadas, juntamente com seus ambientes, para dar suporte ao desenvolvimento de sistemas mais complexos e, por esse motivo, são aplicadas a novos sistemas comerciais. O crescente uso dessas linguagens ocorre principalmente pelo desenvolvimento de novas metodologias de sistemas que empregam o paradigma de orientação a objetos. Nesse Vídeo Linguagens e paradigmas de programação22 contexto, podemos observar que a maioria dos sistemas web são construídos com base na orientação a objetos. Com o aumento da complexidade dos problemas computacionais que precisam ser solucionados, surgiu a necessidade de se dividir um programa em partes menores. A fim de resolver problemas pela colaboração entre vários agentes – por sua vez responsáveis apenas por seus serviços –, passou-se também a prover recursos às linguagens de programação para dar suporte a essa ideia. O conceito da programação orientada a objetos teve início com a linguagem Simula 673, mas foi com a linguagem Smalltalk4, na década de 1980, que obteve um melhor alcance. Vale salientar que a Smalltalk até hoje é considerada, por alguns autores, como a única linguagem de programação puramente orientada a objetos (MELO; SILVA, 2014). Sob o ponto de vista computacional, devemos ter objetos capazes de prover serviços sob a sua própria responsabilidade – isso requer que os objetos sejam proprietários dos seus estados e que possam dar soluções próprias aos serviços requisitados. As linguagens de programação orientadas a objetos permitem a criação de objetos considerados entidades computacionalmente ativas, que armazenam um conjunto de dados (atributos) e os serviços (métodos) que esse objeto pode prover. Para permitir a colaboração computacional dos objetos, também é preciso possuir os meios para realizar a comunicação entre eles (mensagens). Assim, uma vez que o objeto tem um serviço requisitado, por meio da mensagem recebida, sua responsabilidade é processar a mensagem e, dentro do seu contexto, realizar esse serviço. Ao usuário, os passos necessários para a execução do serviço não são relevantes, porém, os resultados sim. Nas linguagens orientadas a objetos, existe o conceito de classes cuja finalidade é agrupar objetos que possuam um mesmo comportamento, definido por meio de abstrações. Para fornecer um sistema de classificação, é necessário que tenhamos a relação entre as classes segundo a noção de hierarquiaorganizada pelo mecanismo de herança, sendo esta compreendida como uma forma de organizar diferentes objetos com atributos iguais sob um mesmo nome de classe. O funcionamento de um programa orientado a objetos pode ser visto como a ativação de objetos, mediante sua criação e colaboração entre objetos ativos. Como cada objeto é responsável pelos seus próprios dados (estado) e transformações (métodos), o estado do programa é assumido como um conjunto de estados dos objetos ativos. 3 “Dois noruegueses, Kristen Nygaard e Ole-Johan Dahl, desenvolveram a linguagem Simula I entre 1962 e 1964, no Centro de Computação Norueguês (NCC), em Oslo. Eles estavam inicialmente interessados em usar computadores para simulação, mas também trabalhavam em pesquisa operacional. [...] Quando a implementação de Simula I estava concluída, Nygaard e Dahl começaram os esforços para estender a linguagem, adicionando novos recursos e modificando algumas das construções existentes para torná-la útil para aplicações de propósito geral. O resultado desse trabalho foi Simula 67, cujo projeto foi apresentado publicamente pela primeira vez em março de 1967” (DAHL; NYGAARD, 1967 apud SEBESTA, 2018, p. 70). 4 “Muitos acreditam que Smalltalk é a linguagem de programação orientada a objetos definitiva. Ela foi a primeira a incluir suporte completo para esse paradigma. [...] é uma linguagem pequena, apesar de o sistema Smalltalk ser grande. A sintaxe da linguagem é simples e altamente regular” (SEBESTA, 2018, p. 499-500). Tipos de linguagens de programação 23 A solução computacional de um problema no paradigma orientado a objetos, portanto, é entendida a partir de quais objetos são necessários e como irão cooperar entre si. Dessa forma, os objetos tornam-se entidades computacionais independentes e resolver o problema significa fazê-lo com cada uma dessas unidades, incluindo a comunicação entre elas. Conforme vimos anteriormente, classes são uma maneira de identificar tipos abstratos, ou seja, os dados que o objeto deve conter são identificados pelos seus atributos, os quais têm a função de guardar os valores necessários ao estado do objeto. O comportamento que uma classe assume é identificado por entidades, denominadas métodos, que, por sua vez, são utilizadas para realizar ações, responder a chamadas e colaborar com outros objetos em um programa. De acordo com a Figura 2, é possível verificar um exemplo de classe para abstrair a representação de um carro e suas funcionalidades dentro de um programa orientado a objetos, usando a linguagem de programação Java. Figura 2 – Exemplo de classe em linguagem Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public class Carro { //Atributos para identificar e armazenar dados int ano; String modelo; String marca; String chassi; double valor; //Métodos que representam as funcionalidades do carro public void ligar() { } public void acelerar() { } public void frear() { } public void desligar() { } } Fonte: Elaborada pelo autor. Dentro do paradigma de programação orientada a objetos, as classes podem ser representadas graficamente. Dessa forma, projetos de maior complexidade podem ser modelados, ilustrando seus atributos e métodos e, de maneira mais clara, verificando as relações entre os diversos objetos de um projeto de software. Na Figura 3, observamos um exemplo de modelagem da classe carro, apresentada anteriormente. Linguagens e paradigmas de programação24 Figura 3 – Exemplo de uma classe Carro ano: Integer marca: String modelo: String chassi: String valor: Double void ligar ( ) acelerar ( ) frear ( ) desligar ( ) Fonte: Elaborada pelo autor. 2.4 Linguagens de programação funcionais O paradigma de programação funcional surgiu no início da década de 1960, a partir da necessidade dos pesquisadores no desenvolvimento de inteligência artificial, computação simbólica, prova de teoremas, sistemas baseados em regras e processamento de linguagem natural. Naquela época, as linguagens de programação estruturadas disponíveis não supriam satisfatoriamente essas necessidades. Uma das primeiras linguagens de programação funcional foi a Lisp, desenvolvida por John McCarthy5, em 1960. Essa linguagem serve basicamente para o processamento simbólico de dados, sendo aplicada em cálculos diferenciais e integrais, projetos de circuitos elétricos, lógica matemática, jogos e alguns campos da inteligência artificial (TUCKER; NOONAN, 2010). A característica fundamental das linguagens de programação funcionais é a computação vista como uma função matemática mapeando entradas e saídas, diferente do paradigma estruturado no qual não existe uma noção de estado, não sendo, assim, preciso instruções de atribuição. Dessa forma, o efeito de um laço é obtido via repetição, pois não há um modo de incrementar ou decrementar o valor de uma variável no estado, já que não há variáveis. Embora algumas linguagens funcionais suportem as noções de variáveis, atribuição e laço, é importante destacar que esses elementos não fazem parte do modelo puro de programação funcional (TUCKER; NOONAN, 2010). A programação funcional resolve problemas computacionais a partir da avaliação de funções matemáticas, evitando alteração de estados e geração de dados que se modificam ao longo da execução de um programa, como acontece na programação estruturada. Como o paradigma funcional é regido por funções, estas, quando definidas dentro de um sistema, devem retornar como um dado ou até mesmo uma outra função durante sua execução. 5 John McCarhy (1927-2011) foi um cientista da computação com importantes estudos no campo da inteligência artificial, responsável por criar a linguagem de programação Lisp. Vídeo Tipos de linguagens de programação 25 Um programa funcional envolve um processo computacional, portanto, que ocorre por meio de transformações, conhecidas como reduções, embora a redução de uma expressão funcional não a torne, necessariamente, mais simples. Vejamos o exemplo: Sem fazer uso de uma notação específica para programas funcionais, podemos considerar a função f(x) = xx. Se x = 4, a expressão inicial 44 é reduzida para o valor 256, embora 44 tenha somente dois dígitos e 256 tenha três. Um programa funcional é composto por uma única expressão, a qual descreve em detalhes uma função e um elemento de domínio dessa mesma função. A redução de um programa consiste na substituição de uma parte da expressão original obedecendo a certas regras de reescrita. As regras de reescrita são organizadas geralmente em três propriedades: correção, confluência e terminação. A correção é uma propriedade semântica e, para que seja válida em qualquer expressão, é imprescindível que alguma convenção para codificar funções e seus parâmetros seja obedecida. Já a confluência e a terminação são propriedades sintáticas, pois independem de como os símbolos no programa são interpretados. A combinação dessas duas propriedades permite que sejam construídas estratégias genéricas para reduzir a expressão, as quais são computacionalmente eficientes e capazes de resolver qualquer problema cotidiano como um programa funcional. A base formal para construir um conjunto de regras de reescrita, conforme explanado, que seja conveniente para a programação puramente funcional, chama-se lambda e consiste em um cálculo desenvolvido em 1930 pelo matemático Alonzo Church. Esse cálculo possui três operações básicas: substituição, aplicação e abstração (MELO; SILVA, 2014). Vejamos: • Substituição: troca textual de todas as ocorrências de uma variável em uma expressão por outra expressão. Se F e G são expressões, a substituição F [X ← G] denota a expressão F com todas as ocorrências da variável X trocadas por G. • Aplicação: avaliação de uma função para um dado elemento de seu domínio. Se F é a expressão que codifica uma função e A é um elemento de seu domínio, a aplicação (F)A denota o valor de F em A. • Abstração: recurso básico paracodificar funções, indicando quais símbolos em uma expressão são variáveis. Se F é uma expressão, então λX.F é o mapeamento de todos os valores que a variável X pode assumir para as substituições das ocorrências de X em F por aqueles valores. Entre as opções das linguagens de paradigma funcional existe a linguagem Haskell, que é amplamente utilizada para fins científicos. Na Figura 4, podemos ver um exemplo de aplicação de linguagem Haskell para a resolução do cálculo do fatorial de um número. Linguagens e paradigmas de programação26 Figura 4 – Exemplo de código em linguagem Haskell 1 2 3 4 5 6 7 module Main where fatorial n = if n = = 0 then 1 else n * fatorial (n – 1) main = do putStrLn "Quanto é 5! ?" x <- readLn if x = = fatorial 5 then putStrLn “Você acertou!” else putStrLn “Você errou!” Fonte: Elaborada pelo autor. Algumas linguagens de programação mais modernas conseguem operar de maneira mista, como é o caso da linguagem Python, que consegue implementar o paradigma orientado a objetos e também permite aos desenvolvedores construírem soluções com códigos escritos em paradigma funcional. Considerações finais Em comparação com os tradicionais paradigmas de programação imperativo (estruturado) e programação orientada a objetos, o paradigma de programação funcional vem ganhando a atenção de grandes empresas nos últimos anos. Sites respeitados, como GitHub6 e Stack OverFlow7, mostram que as linguagens funcionais estão aumentando gradativamente sua presença no mercado. Isso não significa que os paradigmas estruturados ou a orientação a objetos serão substituídos pela linguagem funcional, mas, sim, que cada paradigma tem a sua aplicação e a forma de resolução de problemas pode ser mais bem desenvolvida com a utilização de um paradigma de programação adequado. O mundo da tecnologia está em constante evolução, e o crescente volume de dados abre espaço para a exploração de novas linguagens de programação, além da experimentação dos paradigmas. Áreas de machine learning, mineração de dados e inteligência artificial, por exemplo, conseguem obter resultados mais expressivos com linguagens de programação funcionais. Já as linguagens imperativas, como a linguagem C, têm grande mercado em sistemas eletrônicos e programação de baixo nível. No mercado atual, as tecnologias e os sistemas trabalham de modo mais integrado devido às constantes melhorias em hardware e redes de comunicação, por isso, atualmente temos outros exemplos de serviços e aplicações que são compostos por softwares desenvolvidos em mais de um paradigma de programação. Problemas complexos exigem, em muitos casos, integração com diferentes sistemas e cada ponto de processamento e/ou coleta de informação pode se beneficiar de uma correta aplicação de paradigmas de programação, visando a sistemas mais eficientes que sejam capazes de entregar resultados de relevância para seus usuários. 6 Site de hospedagem de projetos git, disponível em: https://github.com/. 7 Site de perguntas e respostas, disponível em: https://pt.stackoverflow.com/. Tipos de linguagens de programação 27 Ampliando seus conhecimentos • PARADIGMAS de programação. 2016. 1 vídeo (7min13s). Publicado pelo canal Código Fonte TV. Disponível em: https://www.youtube.com/watch?v=EefVmQ2wPlM. Acesso em: 1 out. 2019. PROGRAMAÇÃO orientada a objetos (POO): dicionário do programador. 2018. 1 vídeo (9min56s). Publicado pelo canal Código Fonte TV. Disponível em: https://www.youtube. com/watch?v=QY0Kdg83orY. Acesso em: 1 out. 2019. • PROGRAMAÇÃO funcional: dicionário do programador. 2019. 1 vídeo (8min15s). Publicado pelo canal Código Fonte TV. Disponível em: https://www.youtube.com/ watch?v=BxbHGPivjdc. Acesso em: 1 out. 2019. O canal de vídeos Código Fonte TV apresenta conteúdo relevante dentro da área de tecnologia da informação e de linguagens de programação. Os vídeos selecionados trazem explicações acerca do contexto geral dos paradigmas de programação e abordam detalhes das linguagens de programação funcionais e orientadas a objetos. Atividades 1. O paradigma de programação orientada a objetos é muito difundido atualmente no mercado para o desenvolvimento de aplicações comerciais, industriais, financeiras, sistemas na internet, dentre outros. Considerando as mais variadas aplicações de orientação a objetos, realize uma pesquisa e apresente três linguagens de programação orientada a objetos: a) Uma utilizada em sistemas web. b) Uma aplicada em sistemas bancários/financeiros. c) Uma usada em sistemas de gestão empresarial. 2. O paradigma estruturado, também conhecido como imperativo, tem muita relevância em projetos de sistemas embarcados (hardware). Uma das principais linguagens para esse mercado é a linguagem C que, apesar de ter mais de três décadas, ainda é amplamente utilizada. Considerando isso, explique o que justifica sua enorme aplicação. 3. Nos últimos anos, o paradigma de programação funcional vem ganhando um espaço significativo no mercado. Dentre suas mais variadas aplicações, cite duas linguagens funcionais de relevância em aplicações para internet. Linguagens e paradigmas de programação28 Referências ASCENCIO, A. F. G.; CAMPOS, E. A. V. de. Fundamentos da programação de computadores. 2. ed. São Paulo: Pearson, 2007. MELO, A. C. V. de; SILVA, F. S. C. da. Princípios de linguagens de programação. São Paulo: Blucher, 2014. SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2. ed. São Paulo: Mc Graw Hill, 2010. 3 Tipos de dados em linguagens de programação Antes de iniciarmos os estudos dos tipos de dados utilizados em programação, precisamos entender não apenas os conceitos de variáveis e constantes, mas também como se dá a sua utilização em algoritmos desenvolvidos nas mais variadas linguagens. Dados e variáveis são recursos de extrema importância em um sistema computacional, pois todas as informações nele tratadas necessitam ser armazenadas em memória. Além de armazenar dados, os sistemas precisam identificar com que tipo de informação estão trabalhando. Dentro de um software, existem dados numéricos, lógicos, textuais e outros. Por esse motivo, veremos neste capítulo o que são dados em linguagens de programação e como criá-los em seus diferentes tipos. 3.1 Definição de dados em linguagens de programação Um programa de computador recebe e processa dados, que precisam ser armazenados no computador para serem utilizados no processamento. Esse armazenamento, por sua vez, é feito na memória do computador, e, quanto maior a memória, mais dados poderão ser armazenados para que o programa realize o tratamento deles. Todo o trabalho feito por um computador se baseia na manipulação dos dados contidos em sua memória. Segundo Ascencio e Campos (2007), os tipos de dados mais comuns, denominados primitivos, são: • números inteiros; • números reais; • caracteres; • valores lógicos. As linguagens de programação sempre proverão um conjunto básico de tipos de dados para o desenvolvimento de algoritmos, baseado nesses tipos primitivos que serão estudados em detalhes nas próximas seções. O funcionamento de um programa de computador é baseado no sistema numérico binário. Nele, os dados são transformados em sequências de zero e um (0 e 1) para serem armazenados em memória. Os conjuntos de dados organizados pelos dígitos binários (0 e 1) são chamados bits e ocupam porções de memória denominadas bytes, que estão agrupadas em conjunto de 8 bits. Cada byte em memória é identificado por meio de um endereço (TUCKER; NOONAN, 2009). Vídeo Linguagens e paradigmas de programação30 Variável é um nome para fazer referência a um endereço de memória. Esse endereço é onde será armazenado um tipo de dado, que pode ser lógico, numérico ou em caracteres. Toda vez que o programa fizer uma referência a uma variável, será lido ou registrado um conteúdono endereço de memória correspondente. Todo computador possui uma tabela de alocação que contém o nome da variável, seu tipo (para determinar quantos bytes serão necessários) e o seu endereço inicial de armazenamento. Assim, quando um algoritmo necessita buscar alguma informação em memória, basta saber o nome da variável para que o computador, por meio da tabela de alocação, possa buscá-la automaticamente (TUCKER; NOONAN, 2009). As variáveis, como mencionado, são nomes que fazem referência a um endereço de memória e armazenam dados utilizados pelo programa. Elas estão sujeitas a modificações de conteúdo ao longo da execução de um programa. Mesmo que a variável assuma valores diferentes, ela tem a capacidade de armazenar apenas um valor a cada instante. Em complemento ao uso de variáveis, existem as constantes, que são dados com valores fixos e que não se alteram ao longo da execução de um algoritmo. Da mesma forma que as variáveis, as constantes ocupam espaço em memória e possuem uma tabela de alocação com seus endereços de início, apenas com a diferença de não sofrerem alteração no conteúdo armazenado. Independentemente da linguagem de programação utilizada, a lógica de aplicação de variáveis é a mesma, ocorrendo variações apenas na sintaxe (forma de escrita do código). Representando recursos importantes ao desenvolvimento de programas de computadores, uma vez que por meio delas um algoritmo armazena os dados do problema, as variáveis e constantes são consideradas os elementos básicos que um programa manipula. Isso implica dizer que as variáveis e as constantes armazenam dados em memória durante o funcionamento de um programa de computador. “As expressões fazem a combinação entre as variáveis e as constantes para calcular novos valores” (ALMEIDA, 2008, p. 26). As expressões lógicas e matemáticas desenvolvidas em um programa de computador são responsáveis por combinar variáveis e constantes, para acessar seus valores realizando leitura ou modificação dos valores contidos em memória. 3.2 Dados primitivos em linguagens de programação As linguagens de programação proveem um conjunto básico de dados para a elaboração de algoritmos, e a esse conjunto comumente chamamos de dados primitivos, que são tipos de dados utilizados na ciência para a representação de informações elementares. São, normalmente, números inteiros, números reais (com casas decimais, fracionários), caracteres (letras, números) e valores lógicos (booleanos, verdadeiro ou falso) (ASCENCIO; CAMPOS, 2007). Vídeo Tipos de dados em linguagens de programação 31 Os números inteiros são os dados numéricos positivos ou negativos, eliminando desses qualquer parte fracionária, incluindo o número zero. Nas Figuras 1 e 2, a seguir, podemos verificar um exemplo de cálculo de soma com números inteiros na linguagem de programação Java e na linguagem C++, respectivamente. Figura 1 – Exemplo com números inteiros em linguagem Java 1 2 3 4 5 6 7 8 9 public class Main { public static void main(String[] args) { int numero01 = 12; int numero02 = 25; int soma = numero01 + numero02; System.out.println("O valor da soma é:" + soma); } } Fonte: Elaborada pelo autor. Figura 2 – Exemplo com números inteiros em linguagem C++ 1 2 3 4 5 6 7 8 9 #include <stdio.h> int main() { int numero01 = 12; int numero02 = 25; int soma = numero01 + numero02; printf("O valor da soma é: %d", soma); return 0; } Fonte: Elaborada pelo autor. Já os números reais são os dados numéricos, positivos e negativos, que possuem parte decimal. Em linguagens de programação, também são conhecidos como números de ponto flutuante, pois a parte decimal é separada da parte inteira com um ponto que pode “flutuar” tanto para a direita como para a esquerda. Nas Figuras 3 e 4, a seguir, podemos ver exemplos de algoritmos realizando operações com números reais nas linguagens C++ e Python, respectivamente. Linguagens e paradigmas de programação32 Figura 3 – Exemplo com números reais em linguagem C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main() { float numero01; float numero02; float resultado; printf("Digite o número 1: \n"); scanf("%f", &numero01); printf("Digite o número 2: \n"); scanf("%f", &numero02); resultado = numero 01 + numero 02; printf("O resultado da soma é: %.2f", resultado); return 0; } Digite o número 1: 12.45 Digite o número 2: 45.89 O resultado da soma é: 58.34 Fonte: Elaborada pelo autor. Figura 4 – Exemplo com números reais em linguagem Python >>> numero01: float >>> numero02: float >>> resultado: float >>> print('Digite o número 1') Digite o número 1 >>> numero01: float(input()) 12.89 >>> print('Digite o número 2:') Digite o número 2: >>> numero02: float(input()) 45.56 >>> resultado = numero01 + numero02 >>> print('o resultado da soma é:', resultado) o resultado da soma é: 58.45 Fonte: Elaborada pelo autor. Os caracteres são sequências compostas por uma letra e um sinal de mais ( + ), podendo ser agrupados dados numéricos com letras, formando, assim, sequências alfanuméricas. Os caracteres Tipos de dados em linguagens de programação 33 são mostrados entre aspas e conhecidos, também, como tipo string, literal ou cadeia. As Figuras 5 e 6, a seguir, exemplificam o uso de caracteres em linguagens Java e C++, respectivamente. Algumas linguagens de programação fazem uma diferenciação, utilizando aspas duplas para identificar sequência de caracteres e aspas simples para indicar apenas um caractere. Figura 5 – Exemplo com caracteres em linguagem Java 1 2 3 4 5 6 7 8 9 public class Main { public static void main(String[] args) {; char letra = 'a'; String palavra = "Linguagem de Programação Java"; System.out.println("A variável letra contém: "+ letra); System.out.println("A variável palavra contém: "+ palavra); } } A variável letra contém: a A variável palavra contém: Linguagem de Programação Java Fonte: Elaborada pelo autor. Figura 6 – Exemplo com caracteres em linguagem C++ 1 2 3 4 5 6 7 8 #include <stdio.h> int main() { char letra = 'a'; char *palavra = "Linguagem de Programação C++"; printf("A variável letra contém: %c\n", letra); printf("A variável palavra contém: %s", palavra); } A variável letra contém: a A variável palavra contém: Linguagem de Programação C++ Fonte: Elaborada pelo autor. Por fim, os valores lógicos são os dados com valor verdadeiro ou falso; ou, dependendo da linguagem de programação, podem ser representados pelos números zero e um, sendo que apenas esses dois valores são suportados. O tipo lógico também é chamado de booleano devido à contribuição do filósofo e matemático inglês George Boole1 à área da lógica matemática. As Figuras 7 e 8, a seguir, apresentam exemplos de aplicação do tipo booleano nas linguagens de programação Java e C++, respectivamente. 1 Geroge Boole (1815-1864) foi um matemático e filósofo britânico que criou a álgebra booleana, trabalho fundamental para o posterior desenvolvimento da programação e da computação moderna. Linguagens e paradigmas de programação34 Figura 7 – Exemplo com valores lógicos em linguagem Java 1 2 3 4 5 6 7 8 9 public class Main { public static void main(String[] args) {; boolean opcao01 = true; boolean opcao02 = false; System.out.println("O status da opção 01 é: "+ opcao01); System.out.println("O status da opção 02 é: "+ opcao02); } } O status da opção 01 é: true O status da opção 02 é: false Fonte: Elaborada pelo autor. Figura 8 – Exemplo com valores lógicos em linguagem C++ 1 2 3 4 5 6 7 8 9 #include <stdio.h> int main() { bool opcao01 = true; bool opcao02 = false; printf("O status da opção 01 é: %d/n", opcao01); printf("O status da opção 02 é: %d/n", opcao02); } O status da opção 01 é : 1 O status da opção 02 é : 0 Fonte: Elaborada pelo autor. 3.3 Criação de dados em linguagensde programação No processo de desenvolvimento de determinados algoritmos e programas de computador, é necessário criar tipos de dados quando os primitivos não satisfazem às necessidades de uma aplicação de software. Normalmente, a criação de dados específicos em um sistema se torna útil quando é necessário agrupar mais de um tipo de dado para identificar objetos ou coisas do mundo real. Esses objetos, em sua maioria, são compostos por mais de um tipo de dados de diferentes valores (DEITEL, P.; DEITEL, H., 2010). Vamos imaginar que estamos desenvolvendo um algoritmo para gerenciar informações de veículos com o valor, modelo, ano, proprietário e placa. As informações descritas são de tipos diferentes e podem ser classificadas da seguinte forma: • Valor = número real. • Modelo = sequência de caracteres. • Ano = número inteiro. • Proprietário = sequência de caracteres. • Placa = sequência de caracteres. Vídeo Tipos de dados em linguagens de programação 35 Os dados necessários para identificar não podem ser agrupados em uma variável, pois são de tipos diferentes. Porém, as linguagens de programação dão suporte à criação de estruturas específicas para agrupar tipos de dados diferentes sob um mesmo nome de variável. As linguagens de programação orientadas a objetos, por sua vez, dão suporte à solução desse problema por meio da criação de classes, nas quais são agrupados os tipos de dados necessários; outras linguagens de programação dão suporte usando o conceito de estruturas. Agora, analisaremos a criação de tipos em linguagem C com a utilização de estruturas (structs) e de objetos em linguagem Java. As structs são as variáveis de tipo simples e armazenam apenas valores básicos, ou seja, números inteiros, números reais ou caracteres. Para armazenar valores mais elaborados em linguagem C, podem ser criadas estruturas (structs) que definem tipos novos de variáveis a partir dos tipos básicos existentes (int, char, float, double, bool). As estruturas são utilizadas em casos nos quais é necessário agrupar em um local de memória dados que sejam de tipos diferentes, porém atribuídos e acessíveis por um único nome de variável. Dessa forma, é possível definir elementos em um sistema de computador que sejam mais aproximados ao modo como os seres humanos os identificam. O exemplo que citamos (gerenciamento de informações de veículos) pode ser elaborado em linguagem C++. Vejamos a Figura 9: Figura 9 – Criação de estruturas em linguagem C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> struct veiculo { int ano; float valor; char *modelo; char *proprietário; char *placa; }; int main() { veiculo v1; //declaração de uma variável do tipo veículo v1.ano = 2015; v1.valor = 21590.0; v1.modelo = "Fusca"; v1.proprietario = "Ana Maria"; v1.placa = "XYZ-4567"; printf("O valor do carro %s é: R$ %.2f/n", v1.modelo, v1.valor); return 0; } O valor do carro Fusca é: R$ 21590.00 Fonte: Elaborada pelo autor. Linguagens e paradigmas de programação36 A palavra struct, na linguagem C, refere-se à criação de estruturas (no exemplo, à identificação de veículos) e permite criar um tipo de dado próprio. Nos programas de computador, é comum os desenvolvedores criarem seus próprios tipos de dados, pois os dados primitivos fornecidos pelas linguagens suprem somente as necessidades básicas dos algoritmos, deixando o desenvolvedor livre para criar. Na Figura 10, a seguir, podemos observar o exemplo da criação de um tipo veículo, de acordo com o que vimos a respeito da identificação de veículos, na linguagem Java. Essa linguagem, diferentemente da linguagem C, não possui o recurso de estruturas, mas a criação de novos tipos é suportada pelo conceito de classes e, posteriormente, com a instanciação de objetos. Figura 10 – Criação de objetos em Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class Main { public static class Veiculo { int ano; double valor; String modelo; String proprietário; String placa; } public static void main(String[] args) { Veiculo v1 = new Veiculo90;//Criação de um objeto do tipo carro v1.ano = 2015; v1.valor = 21590.0; v1.modelo = "Fusca"; v1.proprietario = "Ana Maria"; v1.placa = "XYZ-4567"; System.out.println(v1.roprietario "possui um" v1.modelo); } } Ana Maria possui um Fusca Fonte: Elaborada pelo autor. Na sequência, dada a sua relevância, serão trabalhados os conceitos do paradigma de programação orientada a objetos com a utilização da linguagem de programação Java, além de diversos exemplos de aplicação da sintaxe de escrita de algoritmos com essa linguagem. É válido ressaltar, ainda, que as variáveis de tipo primitivo podem armazenar exatamente um valor por vez do seu tipo declarado. Uma variável de tipo lógico, em determinado momento, pode armazenar um valor false. Porém, se em outro momento de execução do código o valor true for atribuído a essa variável, seu valor inicial será substituído. Ao contrário do que ocorre com as variáveis – que mudam de valor durante a execução de um código –, as constantes possuem um valor fixo, que é determinado no início do programa e permanece intacto até o término do algoritmo. instanciação: processo por meio do qual se faz a cópia de um objeto existente. Tipos de dados em linguagens de programação 37 Considerações finais O desenvolvimento de programas de computador sempre estará atrelado à identificação de entidades do mundo real, que podem ser pessoas, objetos, ações, entre outros elementos. Vale destacar que a transcrição dessas entidades se dá em linhas de código. Os tipos de dados primitivos das linguagens de programação suprem as necessidades mais básicas de criação de variáveis. No entanto, para que os sistemas possam atender às necessidades de modelagem dos elementos do mundo real, em vários momentos é necessário criar tipos próprios contendo um ou mais tipos de dados para sua identificação. O paradigma de programação orientado a objetos pode ser utilizado como uma das alternativas para essa modelagem e para a criação de tipos de dados, e os desenvolvedores têm total liberdade para criar tipos de dados na resolução de problemas em seus algoritmos. Ampliando seus conhecimentos • OnlineGDB. Disponível em: https://www.onlinegdb.com/. Acesso em: 8 jan. 2020. OnlineGDB é um ambiente virtual de criação, testes e execução de algoritmos em várias linguagens de programação. O usuário pode utilizá-lo em qualquer lugar, por meio de um navegador web. Sugerimos acessar o serviço e testar os algoritmos que usamos como exemplos ao longo deste capítulo. • SOLOLEARN. Learn Java. Aplicativo. Disponível em: https://www.sololearn.com/ Course/Java/. Acesso em: 8 jan. 2019. Há diversos aplicativos para aprendizagem de linguagens de programação. Uma boa opção é o Learn Java, que pode ser obtido gratuitamente para utilização em celulares ou tablets. Instale o aplicativo em um dispositivo móvel e teste seus conhecimentos. Atividades 1. Explique as diferenças entre variáveis e constantes. 2. Como as estruturas podem ser úteis em um sistema de computador? 3. O que são os dados primitivos de uma linguagem de programação? Referências ALMEIDA, M. Curso de lógica de programação. São Paulo: Digerati Books, 2008. ASCENCIO, A. F. G.; CAMPOS, E. A. V. de. Fundamentos da programação de computadores. 2. ed. São Paulo: Pearson, 2007. DEITEL, P.; DEITEL, H. Java: como programar. 8. ed. São Paulo: Pearson, 2010. TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2. ed. São Paulo: McGraw-Hill, 2009. 4 Introdução à linguagem de programação Java Neste capítulo, serão tratados aspectos formais e técnicos sobre o tema “linguagens de programação e o paradigma de programação orientado a objetos”. Iniciaremos os estudos da linguagem de programação Java, passando pelo seu surgimentoe evolução, com exemplos de aplicação e de códigos. A linguagem Java é uma das mais utilizadas mundialmente, e sua relevância é dada pela presença em diversos equipamentos e compatibilidade com sistemas operacionais, tornando-a umas das mais versáteis. Java é utilizada desde em pequenas aplicações na internet até em sistemas corporativos de grande porte, em empresas multinacionais. Por isso também abordaremos o potencial de mercado para essa que é uma das principais linguagens de programação da atualidade. 4.1 Surgimento da linguagem Java e suas aplicações A linguagem Java surgiu na década de 1990, mais precisamente em 1991, ano em que a empresa Sun Microsystems financiou internamente um projeto de pesquisa, que resultou em uma linguagem de programação baseada na linguagem C++. Seu criador, James Gosling (1955-), a nomeou inicialmente como Oak, em homenagem a uma árvore de carvalho vista da janela do seu escritório na Sun, mas logo se descobriu que esse nome já havia sido atribuído a uma linguagem de programação. Algum tempo depois, uma equipe da Sun visitou uma cafeteria onde havia um café importado de um local chamado Java, cujo nome foi sugerido e acabou sendo aceito. Com isso, a logomarca da linguagem passou a ser uma xícara de café, como podemos observar na Figura 1 (DEITEL, P.; DEITEL, H., 2010). Figura 1 – Logomarca da linguagem Java Tr is m eg is t s an /S hu tte rs to ck Vídeo Linguagens e paradigmas de programação40 No período inicial de desenvolvimento, o projeto passou por algumas dificuldades. A linguagem Java surgiu com a intenção de ser aplicada em dispositivos eletrônicos inteligentes e, naquela época, a evolução desses equipamentos não se deu na velocidade prevista pela empresa Sun. No início da década de 1990, com o crescente aumento no uso da internet, a Sun percebeu que o Java tinha potencial para adicionar conteúdos dinâmicos e animações às páginas web que surgiam, determinando novos rumos para a linguagem. Seu lançamento oficial, então, ocorreu em maio de 1995, durante uma conferência de tecnologia. Posteriormente, o feito acabou gerando interesse na comunidade de negócios devido à atenção dedicada à web durante a década de 1990 (DEITEL, P.; DEITEL, H., 2010). É importante ressaltar que a linguagem Java exibe importantes características, as quais, em conjunto, a diferenciam de outras linguagens de programação. Segundo Jandl Jr. (1999, p. 10-11), essas características são: • Orientação a objetos: tudo em Java são classes ou instâncias de uma classe. Com a exceção de seus tipos primitivos de dados, essa linguagem é puramente orientada a objetos e atende a todos os requisitos para tal, uma vez que oferece mecanismos de abstração, encapsulamento e hereditariedade. • Multiplataforma: independe de plataforma, uma vez que os programas escritos a partir da linguagem são compilados para uma forma intermediária de código denominada bytecodes, que utiliza instruções e tipos primitivos de tamanho fixo, ordenação big-endian e uma biblioteca de classes padronizada. Os bytecodes são como uma linguagem de máquina destinada a uma única plataforma, a Java Virtual Machine (JVM), que por sua vez interpreta os bytecodes e pode ser implementada em qualquer sistema operacional. Assim teremos um mesmo programa Java passível de execução em qualquer arquitetura que disponha de uma JVM. • Ausência de ponteiros: a linguagem Java não permite a manipulação direta de endereços de memória e não exige que os objetos criados sejam destruídos, liberando os desenvolvedores de uma tarefa complexa. Além disso, a JVM possui um mecanismo automático de gerenciamento de memória conhecido como garbage collector (coletor de lixo), que recupera a memória alocada para objetos não mais referenciados pelo programa. • Performance: foi projetada para ser compacta, para atuar independentemente da plataforma e para ser utilizada em rede, o que levou à decisão de ser interpretada por meio dos esquemas de bytecodes. Como uma linguagem interpretada tem seu desempenho razoável, a Java não pode ser comparada à velocidade de execução de código nativo. Para superar essa limitação, várias JVM dispõem de compiladores just in time (JIT) que compilam os bytecodes para códigos nativos durante a execução, otimizando a mesma e resultando em uma melhora significativa na performance de programas Java. • Segurança: considerando a possibilidade de aplicações executadas por meio de uma rede, a linguagem Java possui mecanismos de segurança que podem evitar qualquer operação no sistema de arquivos da máquina-alvo, minimizando problemas de segurança. Tal Introdução à linguagem de programação Java 41 mecanismo é flexível o suficiente para determinar se um programa Java é considerado seguro, especificando nesta situação diferentes níveis de acesso ao sistema-alvo. A linguagem Java continua posicionada como uma das plataformas mais seguras do mundo, sendo utilizada em sistemas que exigem altíssima segurança, como os de governos de países e de importantes empresas listadas na bolsa, incluindo bancos públicos e privados. • Multithreading: o Java oferece recursos para o desenvolvimento de aplicações, os quais são capazes de executar múltiplas atividades de modo concorrente, e dispõe de elementos para a sincronização dessas várias rotinas. Cada um desses fluxos de execução é denominado thread, um importante recurso de programação de aplicações mais sofisticadas. Além disso, a linguagem é bastante robusta, oferece tipos inteiros e ponto flutuante compatíveis com as especificações do Institute of Electrical and Electronic Engineers (IEEE) para suporte para caracteres Unicode. A linguagem Java é umas das mais utilizadas no desenvolvimento de sistemas, tendo suas aplicações voltadas para uso geral em computadores, dispositivos móveis, banda de dados e web. De acordo com a Tiobe Software BV (2020) – instituição que realiza levantamentos no mercado e na comunidade global de desenvolvedores de software –, o Java figurou entre a primeira e a segunda posição no renomado ranking de linguagens de programação da companhia, no período compreendido entre 2004 e 2019. Além disso, foi classificado por essa mesma entidade como a linguagem dos anos de 2005 e 2015. Apesar de ter bastante tempo de uso se comparada às linguagens que vêm ganhando popularidade e adesão pela comunidade de desenvolvedores, o Java possui grande relevância devido ao seu potencial de desenvolvimento de sistemas multiplataforma e aplicabilidade em praticamente qualquer solução de sistema informatizado. Além disso, tem forte presença em sistemas web de pequeno a grande porte, sendo utilizado por empresas multinacionais em diversos tipos de sistemas e plataformas. O mercado de desenvolvimento de sistemas possui muitas oportunidades para as linguagens de programação. A linguagem Java, por ser considerada uma das mais importantes e utilizadas na atualidade, abre muitas opções para profissionais – seja para a concepção de novos produtos ou para a adequação e manutenção de sistemas em operação nas grandes corporações e na internet. 4.2 Tipos de dados e sintaxe da linguagem Java As linguagens de programação sempre proveem um conjunto básico de tipos de dados para o desenvolvimento de programas. Esse conjunto é conhecido como primitivo, e nesta seção veremos os tipos de dados primitivos da linguagem Java, sua forma de escrita e como se dá a declaração de suas variáveis. Todo programa Java é um sistema computacional completo e, como tal, é feito de entrada de dados, processamento e saída de informações. Esses dados geralmente são armazenados para processamento e transporte pela memória do computador em estruturas denominadas variáveis, que representam o menor elemento de um programa de computador. Vídeo Linguagens e paradigmas de programação42 “Uma variável é um nome definido pelo programador, ao qual pode ser associado um valor pertencente a um certo tipo de dados” (JANDL JR., 1999, p. 17).
Compartilhar