Baixe o app para aproveitar ainda mais
Prévia do material em texto
PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO Professor Esp. Ronie Cesar Tokumoto GRADUAÇÃO Unicesumar C397 CENTRO UNIVERSITÁRIO DE MARINGÁ. Núcleo de Educação a Distância; TOKUMOTO, Ronie Cesar. Paradigmas de Linguagem de Programação. Ronie Cesar Tokumoto. Maringá-Pr.: UniCesumar, 2016. Reimpresso em 2018. 133 p. “Graduação - EaD”. 1. Paradigmas. 2. Linguagem de Programação. 3. EaD. I. Título. ISBN 978-85-459-0360-4 CDD - 22 ed. 005.3 CIP - NBR 12899 - AACR/2 Ficha catalográfica elaborada pelo bibliotecário João Vivaldo de Souza - CRB-8 - 6828 Impresso por: Reitor Wilson de Matos Silva Vice-Reitor Wilson de Matos Silva Filho Pró-Reitor de Administração Wilson de Matos Silva Filho Pró-Reitor de EAD Willian Victor Kendrick de Matos Silva Presidente da Mantenedora Cláudio Ferdinandi NEAD - Núcleo de Educação a Distância Direção Operacional de Ensino Kátia Coelho Direção de Planejamento de Ensino Fabrício Lazilha Direção de Operações Chrystiano Mincoff Direção de Mercado Hilton Pereira Direção de Polos Próprios James Prestes Direção de Desenvolvimento Dayane Almeida Direção de Relacionamento Alessandra Baron Head de Produção de Conteúdos Rodolfo Encinas de Encarnação Pinelli Gerência de Produção de Conteúdo Gabriel Araújo Supervisão do Núcleo de Produção de Materiais Nádila de Almeida Toledo Supervisão de Projetos Especiais Daniel F. Hey Coordenador de Conteúdo Fabiana de Lima Design Educacional Ana Claudia Salvadego Iconografia Amanda Peçanha dos Santos, Ana Carolina Martins Prado Projeto Gráfico Jaime de Marchi Junior, José Jhonny Coelho Arte Capa Arthur Cantareli Silva Editoração Robson Yuiti Saito Qualidade Textual Hellyery Agda Pedro Afonso Barth Ilustração Marta Sayuri Kakitani Em um mundo global e dinâmico, nós trabalhamos com princípios éticos e profissionalismo, não so- mente para oferecer uma educação de qualidade, mas, acima de tudo, para gerar uma conversão in- tegral das pessoas ao conhecimento. Baseamo-nos em 4 pilares: intelectual, profissional, emocional e espiritual. Iniciamos a Unicesumar em 1990, com dois cursos de graduação e 180 alunos. Hoje, temos mais de 100 mil estudantes espalhados em todo o Brasil: nos quatro campi presenciais (Maringá, Curitiba, Ponta Grossa e Londrina) e em mais de 300 polos EAD no país, com dezenas de cursos de graduação e pós-graduação. Produzimos e revisamos 500 livros e distribuímos mais de 500 mil exemplares por ano. Somos reconhecidos pelo MEC como uma instituição de excelência, com IGC 4 em 7 anos consecutivos. Estamos entre os 10 maiores grupos educacionais do Brasil. A rapidez do mundo moderno exige dos educa- dores soluções inteligentes para as necessidades de todos. Para continuar relevante, a instituição de educação precisa ter pelo menos três virtudes: inovação, coragem e compromisso com a quali- dade. Por isso, desenvolvemos, para os cursos de Engenharia, metodologias ativas, as quais visam reunir o melhor do ensino presencial e a distância. Tudo isso para honrarmos a nossa missão que é promover a educação de qualidade nas diferentes áreas do conhecimento, formando profissionais cidadãos que contribuam para o desenvolvimento de uma sociedade justa e solidária. Vamos juntos! Seja bem-vindo(a), caro(a) acadêmico(a)! Você está iniciando um processo de transformação, pois quando investimos em nossa formação, seja ela pessoal ou profissional, nos transformamos e, consequentemente, transformamos também a sociedade na qual estamos inseridos. De que forma o fazemos? Criando oportu- nidades e/ou estabelecendo mudanças capazes de alcançar um nível de desenvolvimento compatível com os desafios que surgem no mundo contemporâneo. O Centro Universitário Cesumar mediante o Núcleo de Educação a Distância, o(a) acompanhará durante todo este processo, pois conforme Freire (1996): “Os homens se educam juntos, na transformação do mundo”. Os materiais produzidos oferecem linguagem dialógica e encontram-se integrados à proposta pedagógica, con- tribuindo no processo educacional, complementando sua formação profissional, desenvolvendo competên- cias e habilidades, e aplicando conceitos teóricos em situação de realidade, de maneira a inseri-lo no mercado de trabalho. Ou seja, estes materiais têm como principal objetivo “provocar uma aproximação entre você e o conteúdo”, desta forma possibilita o desenvolvimento da autonomia em busca dos conhecimentos necessá- rios para a sua formação pessoal e profissional. Portanto, nossa distância nesse processo de cresci- mento e construção do conhecimento deve ser apenas geográfica. Utilize os diversos recursos pedagógicos que o Centro Universitário Cesumar lhe possibilita. Ou seja, acesse regularmente o Studeo, que é o seu Ambiente Virtual de Aprendizagem, interaja nos fóruns e enquetes, assista às aulas ao vivo e participe das dis- cussões. Além disso, lembre-se que existe uma equipe de professores e tutores que se encontra disponível para sanar suas dúvidas e auxiliá-lo(a) em seu processo de aprendizagem, possibilitando-lhe trilhar com tranqui- lidade e segurança sua trajetória acadêmica. A U TO R Professor Esp. Ronie Cesar Tokumoto Possui graduação em Bacharelado em Informática pela Universidade Federal do Paraná (2001). Pós-Graduações em Docência no Ensino Superior pela Unicesumar, Pós-Graduação em Tutoria em Educação à Distância pela Faculdade Eficaz, e Pós-Graduação em Gestão Escolar Integrada e Práticas Pedagógicas. Experiência na área de educação desde 1993 atuando em escolas profissionalizantes e colégios estaduais. Experiência em Coordenação de Curso Técnico no ano de 2013 e Participação em Palestras e Eventos Organizados para o Curso durante o mesmo ano. Atualmente atuando como: Professor Mediador no EAD-Unicesumar no curso de Graduação EAD em Engenharia de Software e Gestão em Tecnologia da Informação; como professor do Curso Técnico em Informática ofertado pelo programa Pronatec na mesma instituição; como Professor na rede Estadual de Ensino do Paraná em Maringá-PR, nos Cursos Técnicos Profissionalizantes. SEJA BEM-VINDO(A)! Caro(a) acadêmico(a), este livro tem como finalidade principal mostrar como as lingua- gens de programação utilizadas diferem sob diversos aspectos e em que isso pode in- fluenciar dentro do tipo de função ao qual se aplica. Podemos ter linguagens muito específicas para determinadas tarefas diretamente liga- das a Tecnologia da Informação (TI) ou não, sendo que estas podem ser indicadas para o desenvolvimento de software rodando em determinado tipo de hardware. Sobre hardware, temos a ideia de que representa tudo relacionado à parte física, onde o software, que seria a parte lógica, é executado. Ou seja, softwares englobam os progra- mas de forma geral enquanto hardwares englobam os equipamentos. Assim, temos que toda linguagem de programação é usada para criar e gerir processos executados em máquinas para que estas sejam capazes de executar suas tarefas. O ponto em que os estudos levarão indicará, dentre as diferentes opções de linguagens existentes, aquelas que seriam mais adequadas para determinadas tarefas. Linguagens mais recentes têm estrutura diferente em sua programação, agregando conceitos inovadores, capazes de reduzir codificação ou permitir a criação de progra- mas que contemplem um estado tecnológico mais atual. A própria programação chamada de Orientada a Objeto é muito utilizada e domina o mercado de novos produtos de software, mas existem tendências que podem mudar toda a forma de se programar com o tempo. Diferenças de plataformas para as quais se programa, contemplando as particularidades de cada sistema operacional, também podem ser características que influenciam a esco- lhaentre uma linguagem e outra. Durante as unidades do livro, aspectos relevantes serão detalhados para fornecer fer- ramentas para que programadores experientes ou pessoas que tenham interesse em escolher uma linguagem para aprender possam optar com mais segurança dentre alter- nativas disponíveis por aquela que mais se adeque a suas necessidades. Portanto, não basta conhecer as funções e a sintaxe dos comandos de uma linguagem, mas poder escolher aprender uma linguagem de programação pelas necessidades reais envolvidas. APRESENTAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO SUMÁRIO 09 UNIDADE I EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA 15 Introdução 16 Avaliação de Linguagens e Categorias de Linguagens 19 Métodos de Implementação 21 Evolução das Linguagens de Programação 33 Orientação a Objetos 37 Linguagens para Internet 44 Considerações Finais 48 Referências 49 Gabarito UNIDADE II NOMES, TIPOS DE DADOS, OPERADORES, EXPRESSÕES E ESTRUTURAS 53 Introdução 54 Sintaxe e Semântica 61 Análise Sintática e Léxica 62 Nomes e Tipos de Dados 65 Operadores e Expressões 67 Estruturas de Controle SUMÁRIO 10 69 Considerações Finais 74 Referências 75 Gabarito UNIDADE III SUB-ROTINAS E FUNÇÕES 79 Introdução 80 Sub-Rotinas 81 Implementando Sub-Rotinas 83 Funções 84 Passagem de Parâmetros 86 Bibliotecas 88 Considerações Finais 92 Referências 93 Gabarito UNIDADE IV TIPOS ABSTRATOS DE DADOS, ORIENTAÇÃO A OBJETO 97 Introdução 98 Abstração de Dados 99 Encapsulamento SUMÁRIO 11 100 Programação Orientada a Objeto 101 Estrutura de Programas Orientados a Objeto 104 Estudo de Caso 107 Considerações Finais 112 Referências 113 Gabarito UNIDADE V CONCORRÊNCIA, TRATAMENTO DE EXCEÇÕES, PROGRAMAÇÃO FUNCIONAL E PROGRAMAÇÃO LÓGICA 117 Introdução 118 Concorrência 120 Tratamento de Exceções 122 Programação Funcional 123 Programação Lógica 126 Considerações Finais 130 Referências 131 Gabarito 133 CONCLUSÃO U N ID A D E I Professor Esp. Ronie Cesar Tokumoto EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Objetivos de Aprendizagem ■ Compreender algumas diferentes linguagens e suas aplicações. ■ Conhecer formas de implementação de programas. ■ Compreender sintaxe, semântica e análise sintática. Plano de Estudo A seguir, apresentam-se os tópicos que você estudará nesta unidade: ■ Avaliação de linguagens e categorias de linguagens ■ Métodos de implementação ■ Evolução das linguagens de programação ■ O início ■ Orientação a objetos ■ Linguagens para internet INTRODUÇÃO Estudar conceitos a respeito de linguagens de programação traz benefícios que podem melhorar o trabalho de desenvolvimento e a forma como se pensa a pro- gramação em si. Conhecer uma linguagem e a que tipo de atividades ela é mais indicada per- mite que um programador saiba explorar melhor a potencialidade da linguagem e tire dela códigos mais precisos e otimizados. Um analista envolvido com projetos pode alocar profissionais com conhe- cimento em determinada linguagem de acordo com as necessidades de cada projeto, de acordo com a linguagem que mais se adeque ao propósito do projeto. Uma melhor compreensão de linguagens de programação em geral permite uma melhora na capacidade de expressar ideias, tendo como base a dificuldade em conceituar estruturas que não se possa descrever ou verbalizar, por exemplo. Também melhora naturalmente, com o conhecimento mais aprofundado das características de linguagens diversas, a capacidade de escolha daquela linguagem que melhor atenda ao tipo de programação desejada para o desenvolvimento. Isso ocorre também pelo fato de que, com a evolução das linguagens e dos métodos de programação, o conhecimento que um programador possui em rela- ção a uma linguagem, aos poucos vai ficando obsoleto e, assim, precisam aprender novas linguagens para se manterem no mercado de trabalho. Conhecer os motivos de cada linguagem ser implementada da forma como foi permite que o programador possa utilizá-la de forma mais consciente e inte- ligente, aumentando as chances de se obter códigos mais otimizados. Assim, além de terem melhores condições de usar uma linguagem de forma adequada, conhecendo suas características, é possível explorar seus recursos e utilizar ferramentas antes desconhecidas. Conhecendo as linguagens de programação, o programador tem maior capa- cidade de escolher uma linguagem não apenas por sua popularidade no meio profissional ou acadêmico, mas saber qual linguagem possui as características adequadas a determinada área do desenvolvimento de programas. Introdução Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 15 EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E16 AVALIAÇÃO DE LINGUAGENS E CATEGORIAS DE LINGUAGENS Linguagens de programação podem ser organizadas de diversas formas, de acordo com critérios técnicos ou não. Uma forma de distingui-las é por meio da finalidade ao qual se destinam, podendo ter uma diversidade de usos computacionais de complexidades distin- tas e com graus de complexidade também distintos. Existem linguagens com fins científicos, em que aplicações de dados são simples, mas que manipulam valores extremamente precisos e com grande quan- tidade de casas decimais, utilizando a totalidade dos recursos de hardware, de máquinas simples a supercomputadores. Há também aplicações comerciais que exigem menos capacidade computa- cional, mas que demandam estruturas de dados mais complexas, com necessidade muito maior de armazenamento para estes dados, normalmente. Projetos que envolvam o desenvolvimento de sistemas operacionais tam- bém necessitam de linguagens diferenciadas, capazes de manipular o hardware a fim de que possam, com isso, garantir o controle necessário do sistema opera- cional criado ao hardware onde quer que seja utilizado. A inteligência artificial necessita de menor processamento matemático, mas maior capacidade de análise simbólica e flexibilidade no uso de dados, pois é uma área que trabalha com situações menos exatas e lida com probabilidades. Finalmente, temos as aplicações para web, mais recentes e contemplando parte dos conceitos das aplicações comerciais no uso de dados, mas podendo também utilizar conceitos das demais áreas, constituindo o que há de mais recente entre as alternativas citadas até o momento. Algumas características também diferenciam linguagens de acordo com a forma com que seus programas são escritos e seu código compreendido. A facilidade de leitura e compreensão de um programa é um fator muito importante na popularização de uma linguagem de programação, pois afeta muito o tempo necessário para que se possa iniciar o desenvolvimento de programas e a facilidade com que estes são compreendidos por quem precise Avaliação de Linguagens e Categorias de Linguagens Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 17 realizar manutenções em programas já escritos. Com isto, uma linguagem mais simples pode ter a leitura e interpretação das funções implementadas pelo seu código, devido à menor variedade de comandos para uma mesma tarefa. Linguagensmais complexas tendem a possibilitar variações muito gran- des de soluções para um mesmo problema, por mais simples que sejam, e, com isso, diferentes programadores podem enxergar formas totalmente distintas para resolver problemas. Algumas destas soluções podem ser de fácil leitura e compreensão, mas podem também ter um nível de raciocínio lógico muito complexo e que demande um esforço lógico maior para compreender o que foi feito pelo programador que criou o código. Problemas diversos envolvem linguagens complexas, desde sintaxes que per- mitam muitas variações e operadores que possam sofrer sobrecargas com valores não esperados, gerando problemas em tempo de execução. Podemos então observar que linguagens mais limitadas e que tenham recur- sos para reduzir a quantidade de erros em tempo de execução que possam ocorrer são mais simples de se entender e aprender. Tendo em mente essas ideias, temos que uma linguagem simples permite maior facilidade no aprendizado e compreensão de seus códigos implementa- dos. É muito provável que se tenha, com isso, maiores limitações em relação à quantidade de soluções que possam ser implementadas em linguagens que sejam mais simples e que aceitem menos variações de sintaxe e combinações entre seus comandos. Um conceito chamado ortogonalidade traz esta ideia, pois representa que uma linguagem de programação com fraca ortogonalidade tem comandos que aceitam maior variedade de usos e interpretações, mas uma linguagem com forte ortogonalidade é mais restrita e com menor variação em sua programação. Uma fraca ortogonalidade faz com que a programação, numa linguagem assim, permita que exceções indevidas ocorram mais facilmente e limitem as possibilidades de desenvolvimento de soluções e diferentes combinações entre comandos, tipos de dados ou estruturas. EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E18 Tipos de dados influenciam essa ideia, pois quando temos em uma lingua- gem a definição precisa para o uso de cada tipo de dado, as exceções também diminuem, mas no caso da linguagem C que, por exemplo, não possui um tipo para Verdadeiro e Falso definido, é preciso improvisar, usando um tipo numérico. A sintaxe afeta diretamente a leitura e compreensão de programas devido ao uso de símbolos para finalizar blocos de comandos, ao invés de palavras reser- vadas próprias que indiquem a qual comando se referem como SE e FIMSE. A facilidade de codificação de uma linguagem é afetada por aspectos como sua facilidade na leitura e compreensão dos códigos escritos, quantidade de comandos e tipos de dados possíveis, afetando sua ortogonalidade. A implementação da abstração de dados em uma linguagem permite que recursos como trechos de código sejam representados por funções, chamadas por vezes em diversos trechos do programa, evitando a replicação sem necessi- dade de código repetitivo. Checagem de tipos de dados em tempo de execução também são muito inconvenientes e linguagens que o fazem durante a compilação tendem a ser muito menos custosas para manutenção e leitura do código. Tratamentos de erros e exceções durante a execução também são recursos muito bem-vindos, sendo algo que diferencia as linguagens C e C++, pois C pre- cisa do tratamento manual de erros sem recursos automatizados disponíveis. A referência a variáveis por meio de ponteiros também é perigosa pelo fato de ser possível a atribuição de mais de um ponteiro a uma variável ao mesmo tempo, podendo provocar confusão em relação a valores que uma variável possa conter. Existe um custo quando se usa uma linguagem de programação que envolve, além das características citadas anteriormente, as características de cada progra- mador e as técnicas de codificação que cada um adota. Isso inclui uma série de elementos envolvidos como treinamento de novos programadores em função da facilidade do aprendizado da linguagem e leitura de seus códigos, seu tempo de compilação e execução. O hardware (parte física) onde é executado o programa e os demais softwa- res (programas) que funcionam em paralelo ao programa desenvolvido como sistemas operacionais e softwares de proteção interfere diretamente na veloci- dade de execução e compatibilidade do software com o equipamento. Métodos de Implementação Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 19 MÉTODOS DE IMPLEMENTAÇÃO As linguagens de programação são divididas em quatro categorias principais, sendo elas de linguagens imperativas, funcionais, lógicas e orientadas a objeto. Essas categorias de linguagens podem ter ramificações, como no caso das linguagens imperativas que podem ser visuais ou não (.NET), linguagens de scripts como Javascript, ou que aceitam a orientação a objetos como C++, sem deixarem de ter como base a programação imperativa. Numa linguagem imperativa, o código que representa um algoritmo é muito detalhado e a ordem de execução é bem definida. Já numa linguagem lógica, esta se baseia em regras sem uma ordem pré-definida, ficando a critério de o sistema definir a ordem adequada de execução do código. Linguagens de marcação como HTML fazem parte de uma onda mais recente de linguagens de programação desenvolvidas com o propósito de desenvolver aplicações web, podendo ser consideradas como uma categoria a parte. Sabe-se que a memória armazena temporariamente os dados e o programa propriamente dito em tempo de execução, e o processador realiza as operações básicas lógicas e aritméticas. Assim, para haver o correto funcionamento, as linguagens em geral possuem um conjunto de macroinstruções que são implementadas por outro conjunto de microinstruções que lidam mais diretamente com sistema operacional e hardware. O processo de execução de programas codificados em diferentes linguagens de programação pode ocorrer diretamente na máquina, no caso de linguagens de máquina, ou em passos, como ocorre com compiladores que convertem lingua- gem de alto nível com comandos na sintaxe da linguagem não compreensíveis pelo hardware para linguagem de máquina compreensível pelo hardware. Esse método de compilação permite uma execução rápida de programas, pois gera um aplicativo independente do compilador depois de terminado o processo como na linguagem C. O processo parece simples, mas envolve etapas que serão detalhadas no decorrer do livro, que lidam diretamente com conjuntos de regras para análise de códigos escritos em determinada linguagem. EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E20 Outro processo bastante comum é a interpretação pura, em que um sof- tware interpretador compreende a codificação da linguagem sem necessidade de compilação e executa seus comandos de acordo com a ordem indicada do fluxo da execução. Essa interpretação tem a vantagem de poder indicar com maior exatidão onde um erro ocorreu e facilitar a solução de problemas ocorridos em run-time (tempo de execução). Por outro lado, pelo fato da interpretação ser feita em tempo real, o tempo de execução aumenta e maior poder de processamento é necessário no equipa- mento, ou maior simplicidade nas tarefas executadas pelo código. Uma forma híbrida de implementação consiste em compilar uma lingua- gem de alto nível em outra intermediária, mas de interpretação bem mais rápida para garantir melhores resultados em tempo de execução. Algumas versões de Java são híbridas, pois convertem o código Java em uma forma intermediária compatível com qualquerplataforma chamada byte code que roda na Java Virtual Machine específica de cada plataforma, mas há versões que convertem byte code em linguagem de máquina para maior veloci- dade de execução. Just-in-Time (JIT) também funciona de forma híbrida, sendo que o sistema traduz a linguagem inicial em Java, por exemplo, em linguagem intermediária para ser interpretada em tempo de execução, mas o código interpretado é man- tido para as execuções seguintes. O pré-processador é um software que faz a primeira preparação antes da compilação, para preparar tipos definidos pelo programador e carregar o código de bibliotecas para dentro do código original. Evolução das Linguagens de Programação Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 21 EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO Figura 1 – Genealogia das principais linguagens de programação Prolog Lua APL Fortran I Fortran II Fortran IV Fortran 77 Fortran 90 MODULA MODULA 2 Oberon Ada 2005 Ada 95 Ada 83 PHP Ei�el Perl awk C++ C99 C# 2.0 Python 3.0 Python 2.0 C# 3.0 C# 4.0 C# PL/I ML Scheme Miranda ICON COMMON LISP Ansi C (C89) Haskell Python Java Java 5.0 Java 6.0 Java 7.0 Javascript Ruby Ruby 1.8 Visual Basic.NET Visual Basic QuickBasic Ruby 1.9 Pascal ALGOL W ALGOL 58 ALGOL 60 ALGOL 68 BASIC CPL BCPL B C USP SNOBOL COBOL FLOW-MATIC SIMULA I SIMULA 67 Fortran 95 Fortran 2003 Fortran 2008 Smalltalk 80 Fonte: Sebesta (2012 - p. 37). EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E22 O INÍCIO Konrad Zuse provavelmente tenha sido o criador da primeira linguagem chamada Plankalkül na década de 1940 para equipamentos desenvolvidos por ele mesmo. Uma linguagem que já continha tipos de dados baseados em bits, estruturas de dados como vetores e registros, além de laços de repetição e uso de variáveis em expressões matemáticas. Os computadores desta época eram grandes, caros, lentos e sua programa- ção era bem específica, em linguagem de máquina para otimizar os escassos recursos que possuíam. Ainda no final da década de 1940, o UNIVAC I (primeiro computador ven- dido nos Estados Unidos com fins comerciais) utilizava uma linguagem chamada Short Code, que trabalhava dentro das especificações da arquitetura diferenciada do hardware do UNIVAC I. Anos depois, a IBM conseguiu criar uma das mais importantes linguagens da história, chamada Fortran (The IBM Mathematical Formula Translating System), na década de 1950, para ser utilizada com o IBM 704 como, provavelmente, a primeira linguagem compilada de alto nível. A linguagem era baseada nas instruções do IBM 704 e continha certas regras em sua sintaxe que padronizavam regras como a que variáveis iniciadas com as letras I, J, K, L, M e N seriam do tipo inteiro, e as demais para valores de ponto flutuante. Mudanças foram ocorrendo com o passar dos anos e a linguagem Fortran sofreu modificações, como suporte a orientação a objetos, até a versão 2008 (ISO/IEC 1539-1, 2010). Evolução das Linguagens de Programação Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 23 Figura 2 – Exemplo de código Fortran Fonte: Sebesta (2012 - p. 46-47). EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E24 A linguagem LISP também surgiu no final dos anos 1950 como exemplo de linguagem de programação funcional, baseada em suas predecessoras IPL-I, IPL-II e FLPL que eram mais limitadas. A linguagem LISP trabalha apenas com átomos e listas representando símbo- los literais simples ou agrupados (delimitados entre parênteses) respectivamente, sendo ideal para uso na área de inteligência artificial (IA) e de codificação sim- ples devido a pouca variação de comandos em seu código. Figura 3 – Exemplo de código LISP Fonte: Sebesta (2012 - p. 50-51). ALGOL (Algorithmic Language) foi uma linguagem com fins científicos que ser- viu de base para muitas outras e teve base na linguagem Fortran, modificando diversos conceitos para torná-la universal e sem ligação com algum hardware específico. Sua versão 58 ficou mundialmente conhecida e, com o tempo, sugestões de mudanças foram debatidas para que sua versão 60 fosse implementada, incluindo conceitos como passagem de parâmetros para sub-rotinas e recursividade. Evolução das Linguagens de Programação Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 25 Figura 4 – Exemplo de código ALGOL Fonte: Sebesta (2012 - p. 57-58). EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E26 A linguagem COBOL é uma das mais usadas na história e pode ter influen- ciado algumas outras linguagens que vieram depois dela, pois era fortemente voltada ao desenvolvimento de aplicações comerciais. Implementada no final dos anos de 1950, assim como a linguagem FLOW- MATIC para UNIVACs, COMTRAN, implementada pela IBM, e a linguagem AIMACO usada pela Força Aérea Norte Americana. A linguagem COBOL teve modificações padronizadas pelo padrão ANSI até o início dos anos 2000 e continua em uso em softwares específicos e main- frames. O aumento da capacidade de hardware contribuiu para que a linguagem sobrevivesse, pois, com baixa performance, seu custo e benefício se tornaram menos atrativos. Figura 5 - Exemplo de código COBOL Evolução das Linguagens de Programação Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 27 EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E28 Fonte: Sebesta (2012 - p. 61-63). A linguagem BASIC (Beginner’s All-purpose Symbolic Instruction Code), criada na década de 1970, foi muito popular pela facilidade de aprendizado e pela popu- larização dos microcomputadores na década de 1980. Seu código era bastante simples, mas limitado, e até o surgimento da versão Visual BASIC, seu uso foi sendo reduzido continuamente. Evolução das Linguagens de Programação Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 29 Figura 6 - Exemplo de código BASIC Fonte: Sebesta (2012 - p. 65). EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E30 A linguagem PL/I foi a primeira linguagem desenvolvida para ser genérica, atendendo a qualquer tipo de aplicação e sem vínculo a algum hardware mais específico da época. Uniu qualidades das demais linguagens citadas como recursividade, estruturas de dados e qualidade na entrada e saída de dados, combinadas com novosconcei- tos para criar uma linguagem complexa e que acabou não se firmando por isso. Outras linguagens que também não seguiram por muito tempo foram as lin- guagens APL, SNOBOL, SIMULA 67, e ALGOL 68, mas todas puderam trazer algum acréscimo para as linguagens desenvolvidas posteriormente. Na década de 1970, quando surgiu a linguagem Pascal, que teve sua base ins- pirada em linguagens como o ALGOL 60, sua popularidade foi tremenda devido ao seu uso no meio acadêmico para o aprendizado de programação. Uma linguagem ideal para a época, por ter códigos de fácil leitura e ser capaz de implementar códigos para diversos tipos de aplicações diferentes. Foi amplamente usada até a década de 1990, quando começou a perder espaço para linguagens como C++. No início dos anos 2000, a linguagem Delphi, híbrida de imperativa com orientação a objetos, utilizou a linguagem Pascal como base, incluindo compo- nentes para desenvolvimento em plataforma visual. Figura 7 - Exemplo de código Pascal Evolução das Linguagens de Programação Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 31 Fonte: Sebesta (2012 - p. 76 a 77). No início dos anos de 1970, a linguagem C foi implementada por Dennis Ritchie baseando-se nos conceitos de linguagens como B, BCPL e CPL, que foram desen- volvidas anteriormente, partindo do início dos anos de 1960. Essa linguagem é utilizada em larga escala, sendo uma das três linguagens mais utilizadas no mundo por servir de base para uma quantidade enorme de softwares que interajam diretamente com hardware e sirvam de base para outros softwares como sistemas operacionais ou sistemas embarcados. Tem uma leitura um pouco mais difícil por permitir maior variação nos coman- dos e ser menos ortogonal que muitas outras linguagens, mas como serviu de base para a elaboração de quase todas as linguagens que vieram após ela, direta ou indiretamente, segue sendo uma referência no desenvolvimento de softwares e aprendizado de programação. EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E32 Figura 8 - Exemplo de código C #include <stdio.h> int main () { float notas [3][2]; int i, j; float media[3]; for (i=0; i<3; i++) { for (j=0; j<2; j++) { printf (“Aluno %d - nota %d: “, i+1, j+1); scanf (“%f ”, ¬as [i][j]); } } for (i=0; i<3; i++) { printf (“\n\nNota do aluno %d”, i+1); for (j=0; j<2; j++) { printf (“\n%f . nota: “, notas [i][j]); media[i] = media[i] + notas [i][j]; } printf (“\nMedia: %f ”, media[i]/2); } } Fonte: O autor. Orientação a Objetos Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 33 A linguagem Prolog é baseada em programação lógica não procedural que poderia ser uma alternativa à programação imperativa, mas mostrou ser menos eficiente e muito específica em termos de área de aplicação. Outra linguagem bastante conhecida foi Ada, desenvolvida pelo Departamento de Defesa dos Estados Unidos, que usava seus códigos em sistemas embarca- dos. Era capaz de trabalhar encapsulamento, muitas facilidades para tratamento de exceções. Esta linguagem Ada teve evoluções nos e anos de 1990 e 2000, foi melho- rando sua programação orientada a objetos, incluindo melhorias como herança, mas seu uso pode ter declinado quando o Departamento de Defesa dos Estados Unidos deixou de solicitar programas na linguagem Ada. ORIENTAÇÃO A OBJETOS Smalltalk foi a primeira linguagem realmente implementada para programação orientada a objetos, e foi desenvolvida por Alan Kay que, na década de 1960, já imaginava que um dia computadores de menor porte poderiam ser utilizados por pessoas sem conhecimentos em programação. A linguagem Smalltalk se baseia no conceito do envio de mensagens a um objeto para ativar seus métodos e este retornar nova mensagem ao objeto que o chamou. Outro ponto fundamental da linguagem Smalltalk foi o uso de interface gráfica no desenvolvimento de aplicações que se tornou o ambiente padrão de desenvolvimento das posteriores linguagens de programação criadas. Figura 9 - Exemplo de código Smalltalk Fonte: Sebesta (2012 - p. 87). EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E34 A combinação entre diferentes tipos de categorias de linguagens de progra- mação é algo que ocorre com frequência cada vez maior ao longo da evolução das ferramentas de programação. Uma evolução muito importante que ocorreu foi a união entre a programa- ção imperativa e a orientada a objeto, permitindo o surgimento de evoluções como a linguagem C++, que adicionou à linguagem original C toda a parte de programação orientada a objeto. Importante ressaltar que esta evolução não trouxe prejuízos significativos quanto a performance, e manteve total compatibilidade com códigos feitos em linguagem C, mostrando que não houve necessidade de remover componentes da implementação original. No início dos anos 2000, com o surgimento da plataforma Microsoft para desenvolvimento. NET, que trouxe a linguagem C++ para o ambiente web, e que após uma versão chamada MC++, evoluiu para a atual C#. Outra implementação muito importante surgida no final dos anos 2000, chamada Objective-C, que combinava a base da linguagem C com a sintaxe da linguagem Smalltalk utilizada em larga escala pela Apple, após o fracasso da empresa NeXT de Steve Jobs, que permitiu seu uso como padrão para o desen- volvimento dos aplicativos para iPhone. No final dos anos 2000 ainda, outra linguagem baseada em C implementada foi a linguagem Go dentro da Google, permitindo que códigos extensos em C++ que demoravam a serem compilados pudessem ser mais rapidamente compila- dos na nova linguagem. Algumas das principais características era que funções podem retornar múl- tiplos valores e a declaração de variáveis é feita de maneira diferente de C. Go não implementa a orientação a objetos tradicional e os comandos em si são os mesmos da linguagem C com algumas diferenças e inclusões. A linguagem Java baseou-se em C++, modificando alguns conceitos, mas tendo uma sintaxe em sua construção de código bastante semelhante, mais oti- mizada e segura. Orientação a Objetos Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 35 EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E36 Durante a década de 1990, quando a Internet se tornou uma realidade em escala mundial, a linguagem Java encontrou seu propósito maior e popularizou- -se rapidamente nos anos seguintes, tornando-se a maior rival da linguagem C e C++ em termos de linguagem mais utilizada. Algumas diferenças conceituais como a inexistência de ponteiros, substituí- veis por outros tipos de dados capazes de referenciar classes, por exemplo. Tipo booleano também inexistente em C para uso em estruturas de decisão, mas assim como em C e C++, não se pode utilizar expressões em estruturas de decisão. Figura 10 - Exemplo de código Java Com tantas opçõesde linguagens de programação no mercado, é preciso conhecer várias ou ser especialista em uma ou duas? A área de atuação é importante e ajuda na escolha. Linguagens para Internet Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 37 Fonte: Sebesta (2012 - p. 94). LINGUAGENS PARA INTERNET Linguagens de scripts são mais recentes e também se desenvolveram com a evo- lução da Internet, a partir da década de 1990, e mantêm um ritmo de evolução constante e com novas ideias surgindo de tempos em tempos. Uma delas, chamada Perl, semelhante a linguagens imperativas, têm parti- cularidades como uma compilação de código, variáveis com indicação de suas estruturas de dados por meio de caracteres como “@”, “$” e “%”. Matrizes dinâmicas e controladas de formas diferentes de acordo com a necessidade por meio de cadeias de caracteres ou com lacunas entre as célu- las da matriz, permitindo, por exemplo, o aumento de tamanho de estruturas quando necessário. EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E38 Figura 11 - Exemplo de código Perl Fonte: Sebesta (2012 - p. 96-97). Javascript, uma linguagem que surgiu no início dos anos 2000, baseou-se na lin- guagem LiveScript de 1995 e teve sucessivas evoluções que adicionam recursos a esta poderosa linguagem a cada nova implementação. A linguagem Javascript pode ter seu interpretador adequado para ser embu- tido em aplicações e navegadores web, tendo seu código incluído dentro do código HTML, neste caso. Linguagens para Internet Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 39 Sua forma de codificação similar a Java, mas com conceitos diferentes, per- mite tipos definidos em tempo de execução e estruturas de dados dinâmicas, além de orientação a objetos sem recursos como herança. Figura 12 - Exemplo de código Javascript Fonte: Sebesta (2012, p. 98). EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E40 A linguagem de scripts PHP (Personal Home Page) também surgiu em meados da década de 1990. É uma linguagem que teve um crescimento enorme devido a sua capacidade de trabalhar com dados. Servidores web em geral continham websites que gerenciavam dados, e esta linguagem PHP pode embutir seu código dentro de códigos HTML, assim como Javascript, para aumentar as potencialidades da linguagem de marcação para páginas web HTML. Similar à linguagem Perl, Python é uma linguagem para propósitos diver- sos, criada durante a década de 2000. Tem uma estrutura de código diferente e se baseia em três tipos de dados (listas, tuplas e dicionários), É uma linguagem orientada a objetos como Perl e contém tratamento de exceções, controle de objetos descartados, computação gráfica e acesso a dados pelo navegador. Ruby, uma linguagem implementada nos anos 1990, continua em uso e seu código é todo voltado para orientação a objetos, assim como Smalltalk. Classes e objetos podem ter métodos adicionados dinamicamente e isso faz com que, a cada execução, classes e objetos possam ser diferentes. A linguagem Lua, desenvolvida no Brasil durante a década de 1990 por Roberto Ierusalimschy, Waldemar Celes e Luis Henrique de Figueiredo na Pontifícia Universidade do Rio de Janeiro, suporta programação procedural e funcional. É uma linguagem não orientada a objetos, mas segue os conceitos desta cate- goria de linguagens de programação, sendo uma linguagem simples com poucas palavras reservadas e costumando servir de complemento para outras linguagens. A linguagem C#, desenvolvida na década de 2000 pela Microsoft, mescla conceitos de várias linguagens como C++, Java e Delphi, trabalhando com pro- gramação visual e desenvolvimento .NET no pacote de desenvolvimento criado pela própria Microsoft chamado Visual Studio. C# é uma linguagem poderosa e segue em evolução para, assim como Java, ser uma referência na programação .NET, tendo as qualidades essenciais de C++ e podendo adicionar as evoluções advindas da programação web. Linguagens para Internet Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 41 Figura 13 - Exemplo de código C# Fonte: Sebesta (2012 - p. 103-104). EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E42 Finalmente, as linguagens de marcação como XML e HTML formam a base do desenvolvimento de páginas web e são simples, sem conceitos avançados como orientação a objetos, pois têm uma função única de estruturar e elementos a serem dispostos em páginas. São linguagens que aceitam o acréscimo de códigos de outras linguagens Linguagens de programação podem ser utilizadas por muito tempo, como a linguagem COBOL, que até hoje existente em sistemas legados de grandes mainframes. Algumas não sofrem modificações, mas outras vão sendo adaptadas para gerarem novas implementações que evoluem e se adaptam às necessida- des do mercado. A linguagem C continua em uso por diversos motivos citados ao longo do livro, mas também teve novas implementações que permitiram o surgimen- to de novas versões que também seguem fazendo sucesso no mercado do desenvolvimento de aplicações. A mais importante foi a linguagem C++, que permitiu um avanço enorme na programação e afastou um pouco o programador do baixo nível de pro- gramação. Outra implementação com base na linguagem C foi a linguagem Java e sua variante Javascript, com seu foco voltado para o desenvolvimento web. C# e Objective-C foram desenvolvidas para criação de aplicações web, sendo que C# permite programação para várias plataformas e a outra é mais espe- cífica para a Apple. Fonte: VEJA quais são as 20 linguagens de programação mais populares. Olhar Di- gital, 2015. Disponível em: <http://olhardigital.uol.com.br/noticia/veja-quais-sao-as- -20-linguagens-de-programacao-mais-populares/46271>. Acesso em: 29 mar. 2016. Considerações Finais Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 43 como Javascript e PHP, que contribuem com a qualidade dos resultados obtidos e agregam muitas funcionalidades a estas linguagens de marcação. Uma linguagem desenvolvida para auxiliar a produção de código em lingua- gens de marcação foi a linguagem CSS, que sofre evoluções para agregar novas funcionalidades. É uma linguagem simples, agregada ao HTML para padroni- zação de formato dos elementos das páginas como texto e imagem. Figura 14: Exemplo de código HTML Fonte: O Autor. CONSIDERAÇÕES FINAIS Um paradigma de programação se refere diretamente ao método de desenvol- vimento de código por parte do programador, sabendo que cada linguagem tem em seus paradigmas, os limites que suas técnicas de programação impõem. Desta forma, a escolha de uma linguagem adequada a cada caso envolve tais paradigmas, pois a escolha de uma opção equivocada pode prejudicar a quali- dade, o tempo de desenvolvimento ou até impossibilitar a produção do código capaz de atender às necessidades do projeto,devido às limitações da linguagem. Num paradigma estruturado ou procedural, é possível resolver problemas EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO, SINTAXE, SEMÂNTICA E ANÁLISE LÉXICA Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IU N I D A D E44 dividindo-os em partes de forma a tratar frações do problema, simplificando a codificação, e podendo tratar em funções ou procedimentos interligados por parâmetros para, no conjunto, chegar a uma solução ideal para problema. Já no paradigma orientado a objetos, ao invés de funções e procedimentos, objetos são instanciados a partir de classes criadas para que a forma como cada objeto trabalhe seja encapsulada e independente do resto do código, de certa forma, e possa ser facilmente reaproveitado em códigos futuros. Existe alguma similaridade nas formas de programação, pois partem de cer- tos princípios lógicos comuns a todas as linguagens, mas a forma como estes princípios são utilizados e quais técnicas mais específicas são implementadas representam as diferenças entre as linguagens. Independente de quais sejam os paradigmas de cada linguagem, cabe ao pro- gramador identificar aqueles relacionados à sua forma de produzir código e de que forma as especificidades técnicas de cada linguagem afetam seu trabalho. Se a aplicação a ser desenvolvida envolver programação orientada a objetos ou programação estrutural, por exemplo, isso pode ser um critério para a deci- são em relação à linguagem a ser utilizada na implementação. 45 1. Existem diversas linguagens diferentes de programação. Quais as diferenças entre as linguagens Smalltalk e HTML? 2. A linguagem C é uma das linguagens antigas que sobreviveram até os dias atuais. Ela sofreu evoluções e modificações. Quais linguagens que evoluíram de C, contendo características perti- nentes a essa evolução. 3. Existem linguagens voltadas para a criação de softwares para uso em desktops isolados ou em rede. Existem também lingua- gens para desenvolvimento de produtos para web. Cite as lin- guagens populares para desenvolvimento desktop e web. 4. Algumas linguagens, com o passar dos anos, sofreram altera- ções ou novas aplicações para continuarem ativas e se adap- tar às novas tecnologias e funcionalidades nos computadores. Surgiram alternativas de desenvolvimento tais como Delphi e Visual Studio. Quais linguagens serviram de base para estas tecnologias que surgiram muitos anos depois das linguagens utilizadas por elas? a) C e Java b) HTML E CSS c) Pascal e C++ d) PHP e Javascript 5. Algumas linguagens, além de usar letras em seus comandos, utilizam outros símbolos para sua codificação. O símbolo $ é usado em qual linguagem, por exemplo? 46 Classificação das Linguagens de Programação quanto à Geração Alguns autores dividem as linguagens de programação de acordo com a época em que surgiram, e, segundo Maclennan, temos cinco gerações distintas, tendo elas detalhes fundamentais que contribuíram para a divisão das categorias. Uma primeira geração seria representada por linguagens que contém instruções que trabalham em nível de hardware e instruções de controle mais simples, sem muitos re- cursos. A segunda geração poderia ser representada por linguagens com estruturas de controle mais elaboradas, permitindo aninhamento entre estruturas e não lidando tão direta- mente com a máquina. Numa terceira geração temos linguagens de alto nível, distantes do hardware e conten- do instruções já bem avançadas e com grande capacidade de variação nas aplicações possíveis, utilizando estruturas de dados mais complexas. A quarta geração representava linguagens orientadas a objeto com abstração de dados e demais conceitos relativos a esta forma de programação. Na quinta geração, ocorre a união das diferentes categorias de paradigmas de progra- mação como orientação a objetos e programação funcional. Assim, pode-se observar que linguagens de programação com finalidades muito distin- tas podem ser agrupadas, mas não existe um critério único para isto, pois mudanças de paradigma ou de formas de programação influenciam toda uma geração de linguagens criadas com propósitos coerentes com os tipos de aplicação comuns em determinada época. De qualquer maneira, uma linguagem pode ser classificada de acordo com a finalidade profissional a qual se destina, seja ela de manipulação de hardware puro em dispositivos com tecnologias embarcadas ou linguagens para aplicações comerciais de alto nível. Linguagens de programação são ferramentas muito poderosas e variadas em sua capa- cidade técnica e utilizações, mas certos conceitos são fundamentais para que se possa situar uma linguagem em relação à outra. Conhecer os fundamentos da programação é muito importante para o aprendizado de qualquer linguagem específica e, após o aprendizado de uma linguagem, outras são mais facilmente aprendidas. Fonte: Sebesta (2012). Material Complementar MATERIAL COMPLEMENTAR Título: Linguagens de Programação - Princípios e Paradigmas – 2ª ed. Autor: Allen B Tucker; Robert Nooman Editora: Amgh Editora Sinopse: Livro bastante conceituado sobre o projeto de linguagens de programação com exemplos práticos comentados de forma a facilitar a compreensão de instruções e como funcionam linguagens de programação em geral. REFERÊNCIAS REFERÊNCIA LIVROS ASCENCIO, A. F. G. Fundamentos da programação de computadores: algoritmos PASCAL, C/C++ (padrão ANSI) e JAVA. 3. São paulo: Ed. Pearson Education do Brasil, 2012. MACLENNAN, B. J. Principles of Programming Languages: Design, Evaluation and Implementation (em inglês). 3ª ed. Oxford: Oxford University Press, 1999. SEBESTA, R. W. Concepts of programming languages.10ª ed. New Jersey: Pd. Pear- son EducationInc., 2012. REFERÊNCIA LINKS VEJA quais são as 20 linguagens de programação mais populares. Olhar Digital, 2015. Disponível em: <http://olhardigital.uol.com.br/noticia/veja-quais-sao-as- -20-linguagens-de-programacao-mais-populares/46271>. Acesso em: 29 mar. 2016. GABARITO 49 1. Smalltalk é uma linguagem totalmente voltada à programação orientada a obje- tos, compilada e capaz de criar programas, e HTML é uma linguagem de marca- ção para web, sem recurso algum de orientação a objetos, interpretada e neces- sita de um navegador para que seus códigos funcionem. 2. A linguagem C++, evolução da linguagem C, evolui com a principal aquisição da programação orientada a objetos em sua definição. Alterações na sintaxe e funcionalidade de alguns comandos, novos tipos, e estruturas de dados foram implementadas. C# que foi modificada para WEB, e Objective-C para desenvolvi- mento de aplicações Apple. 3. C, Pascal, Basic, Java e Smalltalk para programação desktop, e Javascript, HTML, Perl, PHP e CSS para programação web. 4. C - Pascal e C++. 5. Perl e PHP. U N ID A D E II Professor Esp. Ronie Cesar Tokumoto NOMES, TIPOS DE DADOS, OPERADORES, EXPRESSÕES E ESTRUTURAS Objetivos de Aprendizagem ■ Conhecer regras para definição de nomes utilizados em linguagens. ■ Conhecer os tipos de dados aceitos. ■ Saber os tipos de operadores aceitos. ■ Compreender a estrutura de expressões lógicas e matemáticas. ■ Ser capaz de elaborar estruturas compostas de dados. Plano de Estudo A seguir, apresentam-se os tópicos que você estudará nesta unidade: ■ Sintaxe e semântica ■ Análise sintática e léxica ■ Nomes e tipos de dados ■ Operadores e expressões ■ Estruturas de controle Introdução Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 53 INTRODUÇÃO Uma linguagem de programação, independenteda época em que tenha sur- gido, deve possuir regras bem definidas para que códigos gerados nela possam realmente ser efetivos e cumprir seu papel no desenvolvimento de aplicações. O programador deve conhecer uma linguagem para poder programar nela, mas não é obrigado a saber exatamente tudo que uma linguagem pode ofere- cer, e tende a descobrir aos poucos os limites da linguagem com a qual trabalha. Independente do quanto conheça de uma linguagem, uma certeza que possui é que, provavelmente, errará muitas vezes ao desenvolver programas na mesma, e tais erros devem ser encontrados pelo responsável pela verificação do código antes de seu uso como produto executável. Analisadores de códigos embutidos em compiladores ou interpretadores devem ser capazes de ler um código criado e vasculhar sua estrutura para iden- tificar todos os possíveis erros que possam prejudicar seu funcionamento, de preferência antes do mesmo ser executado e gerar erros em tempo de execução. Tais erros em tempo de execução são piores, pois podem prejudicar gran- des operações dependendo de onde estiverem inseridos e sua função, podendo ser algo simples ou extremamente complexo. A sintaxe e a semântica são duas áreas da verificação de códigos que preci- sam ser muito bem definidas para reduzir a ocorrência de exceções e efetuar as devidas ligações entre as partes de um programa. A forma como essas análises são realizadas é o foco desta unidade, que se preocupa em mostrar um pouco da análise que é feita em um código para veri- ficar sua validade e acerto. Estruturas em forma de árvore são úteis para ilustrar como instruções de um código são construídas e compreendidas, separando em ramificações os ele- mentos que compõem estas instruções. A simbologia, operadores e demais elementos que podem compor instru- ções são estudados para que sejam compreensíveis as regras que definem como uma linguagem se comporta e quais suas limitações. NOMES, TIPOS DE DADOS, OPERADORES, EXPRESSÕES E ESTRUTURAS Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IIU N I D A D E54 SINTAXE E SEMÂNTICA Toda linguagem de programação é composta por comandos organizados den- tro de certa lógica e seguindo a mesma no desenvolvimento de seus códigos, de acordo com sua finalidade e forma como se implementam os programas. Descrever uma linguagem é um processo complicado, pois precisa ser feito de forma completa e levando em consideração as diferentes interpretações que um texto pode receber. Toda linguagem, enquanto implementada, precisa ser testada para que possa ser avaliada por possíveis usuários e tenha, por meio dos retornos (feedback), trazidos por estes, a possibilidade de ser ajustada até que possa ser oficialmente lançada no mercado e utilizada profissionalmente no desenvolvimento de soluções. Guias de referência, livros e cursos precisam ser ofertados para capacitar todos os interessados na ferramenta para que sejam capacitados a explorar as potencialidades da linguagem. Neste contexto, o termo sintaxe se refere a como são construídos os coman- dos de uma linguagem de programação, indicando, para cada palavra reservada, parâmetros aceitos e a forma correta de usá-los. Complementarmente, a semântica avalia a correta colocação dos comandos que podem conter ou não blocos com outros comandos associados a estes blo- cos, e sua colocação dentro de subprogramas ou do programa como um todo. Em geral, uma linguagem é formada por caracteres de um alfabeto agrupados em cadeias que formam sentenças. O termo comando será utilizado para deno- minar estas sentenças aceitas por uma linguagem de programação, mesmo que, em diversas linguagens, se utilize outras nomenclaturas, como TAG ou seletor. Uma análise de sintaxe parte do princípio que determinada linguagem con- tenha palavras reservadas formadas por símbolos de um alfabeto definido. O processo lê uma cadeia de símbolos contidos em uma linha até que se encontre um símbolo marcador de final de comando. Todas as sequências menores de símbolos são analisadas separadamente para serem validadas em relação às regras de construção de comandos na linguagem em termos de palavras reservadas e parâmetros. Sintaxe e Semântica Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 55 Existem geradores de código capazes de construir, com limitações, progra- mas inteiros para atender demandas, mas, pela limitação que o gerador possui de criação de variações de comandos, o programa tende a ser mais limitado e padronizado. Um termo muito utilizado nesta área de estudos é metalinguagem, que repre- senta uma linguagem utilizada para representar outra, em que a BNF (Backus-Naur form) é uma metalinguagem para programação. Pelas regras da BNF, a associação, por exemplo, se baseia no conceito de que uma variável recebe um valor ou expressão, sendo o símbolo de igualdade (=), responsável por separar as duas partes do comando. Listas de identificadores são separadas pelo símbolo de vírgula (,), lem- brando que estes identificadores podem ser valores ou expressões, por exemplo. Operadores também têm seus símbolos definidos no caso de operadores matemáticos, como soma (+), subtração (-), operadores lógicos como E(&), OU (|), e operadores relacionais como maior (>) e menor (<). A escolha das palavras-chave, regras de construção de comandos e expressões válidas é implementada de forma particular em cada linguagem, e as limitações e exceções que influenciam diretamente a ortogonalidade da linguagem estão diretamente ligadas ao uso de metalinguagens como a BNF. A Figura 1 contém um exemplo de código gerado utilizando apenas os ele- mentos definidos até o momento, seguindo a simbologia definida como padrão e utilizando os conceitos básicos de estruturação de algoritmos para a constru- ção dos comandos. Figura 1 - Exemplo de código em metalinguagem Fonte: O Autor. Toda metalinguagem segue um raciocínio semelhante na estruturação de suas sentenças que pode ser organizado em partes que podem formar uma árvore que define todos os componentes de cada comando. NOMES, TIPOS DE DADOS, OPERADORES, EXPRESSÕES E ESTRUTURAS Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IIU N I D A D E56 A figura 2 mostra como poderia ser a árvore de um dos comandos mostra- dos na figura 1, separando todos os elementos do comando dentro da estrutura. Figura 2 - Exemplo de árvore de sintaxe de um comando <atribuição> <atribuição> <expressão> Var3 +Var1 Var2 = Fonte: O Autor. Pode acontecer de expressões diferentes em sua estrutura terem resultados iguais, devido à equivalência de alguns operadores, e gerarem árvores diferentes, mas com interpretações iguais, gerando ambiguidade. Neste caso há ambiguidade, pois, tendo o mesmo resultado, duas expressões podem, então, resolver um mesmo problema. Existem casos onde esta mudança gera problemas com resultados, e estas exceções precisam ser tratadas utilizando outros símbolos adicionais como parênteses ou regras de formação de expressões que reduzam as possibilidades de ocorrência de situações inesperadas, como expressões não desejadas. Uma regra importante para estabelecer a forma como são interpretadas expressões em determinada metalinguagem são as precedências entre opera- dores que indicam quais tem prioridade sobre outros na ordem dos cálculos. Outro ponto importante sobre o uso de operadores é a ordem em que estes são utilizados em expressões e sua prioridade nos cálculos, pois é preciso regras para garantir que os cálculos sigam regras matemáticas tradicionais. Operadores como a adição não sofrem influência na ordem com queduas somas são realizadas, pois o resultado será sempre o mesmo, mas operadores como a divisão geram resultados diferentes quando a ordem correta para as divi- sões que foram calculadas não é respeitada. Além dos operadores e expressões, temos diversas outras estruturas como variáveis, comandos e estruturas de dados que precisam ter regras cuidadosa- mente estabelecidas para que a metalinguagem seja funcional. Sintaxe e Semântica Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 57 Estruturas como laços de repetição, por exemplo, precisam ser implemen- tadas de forma que sua sintaxe seja clara e exceções que possam gerar erros de execução sejam evitadas, como repetições em quantidade errada ou contado- res de tipos indevidos. Como um laço de repetição gera uma quantidade de repetições de outros comandos, estes precisam de delimitadores claros para que o processo de aná- lise sintática seja eficiente, podendo avaliar comandos aceitos ou não dentro de um laço e a sintaxe de cada um destes comandos embutidos. Figura 3 - Exemplo de Laço de repetição Fonte: O Autor. O exemplo da Figura 3 mostra um comando que define um laço de repetição simples, em que temos a definição do número de repetições, o conteúdo a ser executado nas repetições e o fechamento do bloco de operações a serem reali- zadas durante o laço. Observando a Figura 4, é perceptível a divisão do comando em diversos ele- mentos para definir o laço de repetição e a forma como sua sintaxe é estruturada. Figura 4 - Exemplo de árvore de sintaxe de um laço de repetição <laço> para <identi�cador> <identi�cador> <identi�cador>de ate faça <valor> <valor>Var3 Fonte: O Autor. A semântica é outro ponto fundamental para a definição de uma metalingua- gem e um código gerado por essa linguagem precisa ser analisado tanto em sua sintaxe quanto em sua semântica. NOMES, TIPOS DE DADOS, OPERADORES, EXPRESSÕES E ESTRUTURAS Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IIU N I D A D E58 A semântica analisa questões estruturais mais complexas à correta coloca- ção dos comandos de acordo com a ordem em que devem estar dispostos em um código e detalhes como declarações de variáveis que podem ser necessárias antes do uso das mesmas, dependendo de como se queira implementar uma metalinguagem. Uma gramática é composta de símbolos que formam seu vocabulário, sendo que esses símbolos são formados por elementos pertencentes a um alfabeto defi- nido para delimitar a quantidade possível de símbolos. Cada símbolo tem uma interpretação diferente e possui uma lista de proprieda- des válidas que ampliam o uso de cada símbolo na construção da metalinguagem. Esses atributos podem ser sintetizados para passar informações sobre o símbolo para níveis superiores da árvore de análise semântica ou herdados que passam informações para níveis inferiores da árvore de análise semântica. Além destes dois tipos de atributos, existe um terceiro que é gerado quando se declaram variáveis e estruturas de dados, por exemplo, que criam novos símbo- los que passam a ser aceitos dentro da análise semântica como válidos, contendo a forma de uso já previamente determinada na metalinguagem. Uma variável em diversas linguagens de programação é declarada com um nome com regras de uso de caracteres restrita, um tipo válido dentre os acei- tos e, em alguns casos, um símbolo terminal para indicar o fim da declaração. Com isto, antes deste símbolo terminal, pode-se utilizar outro símbolo sepa- rador para que mais de uma variável de mesmo tipo seja declarada num mesmo comando a ser analisado sintática e semanticamente. Um exemplo pode ser visto na Figura 5, em que é mostrada a mesma situ- ação de associação de valor a uma variável pelo ponto de vista sintático e, em seguida, semântico, para que se perceba a diferença na estruturação do comando. Figura 5 - Exemplo de atribuição de valor à variável Fonte: O Autor. Sintaxe e Semântica Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 59 A semântica de uma linguagem de programação é complexa e exige uma definição muito clara de seus elementos, sendo interessante a descrição de uma lin- guagem base, sem ambiguidades e simplificada para ser facilmente compreendida. Assim, poderia ser considerada uma linguagem intermediária entre o que seria uma linguagem de baixo nível, muito simples, mas desnecessariamente preocupada com o uso do hardware normalmente. Estaria num nível abaixo de uma linguagem completa de alto nível, por possuir uma complexidade muito elevada e ambígua. A partir da definição desta linguagem intermediária, é preciso que um inter- pretador seja desenvolvido para verificar códigos criados nesta linguagem e sua estrutura, lógica e comandos. A semântica é mais complexa que a sintaxe, e descrever o significado de suas expressões em uma linguagem é uma tarefa difícil, mas importante para que os profissionais que programarem na linguagem conheçam as instruções e suas funções dentro de um código. A chamada Semântica Operacional lida com programas em execução, inter- pretando o que ocorre com cada instrução e alterações que possam ocorrer com valores utilizados pelo hardware durante o processo. Na Figura 6, temos um exemplo em que um comando de decisão do tipo “se” é interpretado de forma a deixar bem claro como os desvios do fluxo ocor- rem e a condição para que estes desvios sejam feitos. Figura 6 - Exemplo de análise semântica operacional Fonte: O Autor. Toda linguagem precisa que as expressões construídas em seu código sejam validadas e, para isto, é preciso provas algébricas para demonstrar as regras que tratam da validade de operadores e expressões. NOMES, TIPOS DE DADOS, OPERADORES, EXPRESSÕES E ESTRUTURAS Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IIU N I D A D E60 Isso pode ser feito por meio de outra semântica chamada axiomática, que se baseia em lógica matemática e trabalha com expressões lógicas antes e depois de cada instrução do código para garantir que as condições para execução das instruções ocorra adequadamente. Outro método bastante importante, chamado de Semântica Denotacional, se baseia na teoria da recursividade para descrever uma linguagem de progra- mação. Ela, com objetos matemáticos e funções para descrever o significado de programas, sendo que objetos matemáticos são precisos e bem definidos, ao passo que instruções de linguagem, não. Assim, é preciso trabalhar para conseguir definir os objetos para a lingua- gem e associar estas funções ligadas a estes objetos para definir os elementos da sintaxe da linguagem. Um exemplo de relação denotacional poderia ser utilizado para analisar a Figura 4, em que poderíamos ter uma função como a da Figura 7 em que letras maiúsculas com índices indicam as funções associadas ao conceito de pré-con- dição de uma estrutura de decisão. Figura 7 - Exemplo de semântica denotacional para estrutura de decisão Fonte: O Autor. Temos na Figura 7 diversos símbolos que representam regras da semântica deno- tacional, como Δ que indica a descrição de uma função matemática; M1, Mb e Ms que indicam os nomes das funções utilizadas na análise; A e B que repre- sentam expressões válidas ou não; e s o estado relativo aos dados da instrução. Análise Sintática e Léxica Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve reiro d e 19 98 . 61 ANÁLISE SINTÁTICA E LÉXICA A análise léxica é a busca por padrões em cadeias de símbolos que sejam aceitos em uma linguagem de programação. Esta análise é feita antes da análise sintá- tica, pois verifica, um a um, todos os símbolos e sua validade, uma vez que, em caso de falha, a análise sintática nem precisa ocorrer para aquela instrução. Um exemplo simples é mostrado na Figura 8, em que é ilustrada a análise léxica da primeira linha da estrutura de decisão baseada na estrutura mostrada na Figura 6 que representa a parte fundamental da estrutura em si. Figura 8 - Exemplo de análise léxica em estrutura de decisão Fonte: O autor. Os compiladores utilizam a análise léxica para gerar os lexemas já analisados e extraídos do código e passa-los ao analisador sintático para efetuar sua etapa de verificação do código, podendo assim ter apenas a função de verificar a sintaxe, sem se preocupar com a identificação de símbolos incompreensíveis já verifica- dos pelo analisador léxico. A análise sintática é realizada para verificar um código criado para uma determinada linguagem de programação e conferir se está sintaticamente cor- reto, fornecendo mensagens de feedback em caso de erros, além de produzir uma estrutura contendo a análise realizada, para servir de base para sequência do processo de compilação do código. A estrutura sintática pode ser obtida através de um processo que inicia pela parte superior da possível estrutura (cima-baixo) ou pela parte inferior até sua extremidade superior (baixo-cima), ambas complexas e lentas, pois o processo de análise se baseia na ideia da leitura de visualizar apenas um próximo símbolo. NOMES, TIPOS DE DADOS, OPERADORES, EXPRESSÕES E ESTRUTURAS Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IIU N I D A D E62 A análise recursiva descendente trabalha com a regra cima-baixo para utili- zar subprogramas de forma recursiva para analisar códigos contendo blocos de instruções e estruturas aninhadas. Segundo uma norma adequada para este caso, chamada BNF estendida, pode-se usar colchetes para representar elementos que são opcionais em uma instrução e usar chaves para representar elementos que podem se repetir uma ou mais vezes. Na Figura 9 temos um exemplo em notação BNF estendida utilizando uma instrução de atribuição para oferecer mais de uma alternativa possível e ilustrar como estruturar a análise descendente recursiva. Figura 9 - Exemplo de BNF estendida e subprograma para análise recursiva Fonte: O Autor. NOMES E TIPOS DE DADOS O uso de nomes é utilizado em programação para definir elementos que comple- mentam instruções baseadas no uso de palavras-chave, e seguem certas regras definidas por cada linguagem para que seus analisadores léxicos e sintáticos con- sigam interpretar cada instrução codificada. Nomes e Tipos de Dados Re pr od uç ão p ro ib id a. A rt . 1 84 d o Có di go P en al e L ei 9 .6 10 d e 19 d e fe ve re iro d e 19 98 . 63 A linguagem FORTRAN foi a primeira a permitir nomes com mais de um caractere, permitindo até seis caracteres em sua implementação inicial, abrindo as portas para que novas regras com maior quantidade de caracteres aceitos fos- sem surgindo. Algumas linguagens exigem nomes contendo apenas letras do alfabeto, podendo ser maiúsculas ou minúsculas apenas, ou ambas as opções em con- junto, além de caracteres como “_”. Palavras reservadas também têm suas regras em cada linguagem de pro- gramação, e estas regras podem até ser diferentes das utilizadas na composição dos demais tipos de nomes permitidos numa linguagem, como nomes de vari- áveis e constantes. Variáveis que representam endereços de memória associados a nomes em programas para armazenamento de dados são comuns em todas as linguagens, assim como constantes que apenas se diferenciam pela não alteração dos valo- res armazenados em memória durante a execução do programa. Toda variável ou constante tem um tipo de dado associado que indica o tipo de valor aceito para armazenamento em memória e o quanto de espaço na memória do hardware é reservado para este armazenamento, podendo este ser temporário na memória RAM ou permanente em disco, no caso de alguns tipos de dados para manipulação de arquivos. Entende-se por valor para uma variável ou constante o tipo de dado que é permitido e a faixa de valores aceitos pela definição do tipo de dado na lingua- gem e o limite aceito pelo espaço reservado para o armazenamento em memória. Vincular um tipo a uma variável é uma associação que ocorre durante a codi- ficação, usando elementos aceitos em uma linguagem de programação ou espaços de memória reservados para tipos variáveis em tempo de execução. Esta vinculação permite que compiladores façam as ligações necessárias entre sub-rotinas e elementos de ligação no código e que realizem chamadas a estas sub-rotinas durante a execução. Os vínculos que ocorrem dinamicamente em tempo de execução, por exem- plo, possuem tempo de vida associado ao quanto são utilizados em tempo de execução de um programa e perdem seus vínculos no momento em que dei- xam de ser utilizados. NOMES, TIPOS DE DADOS, OPERADORES, EXPRESSÕES E ESTRUTURAS Reprodução proibida. A rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998. IIU N I D A D E64 Uma variável local pertencente a uma sub-rotina, com escopo apenas para uso durante a execução da mesma. Esta sub-rotina é liberada da memória assim que é finalizada, assim como ocorre com objetos que sejam finalizados por méto- dos destrutores em linguagens orientadas a objeto. Dentro da declaração de tipos, uma linguagem que seja do tipo fortemente tipada tem bem estabelecido o tipo de dado aceito por variáveis e constantes, tendo então a reserva de memória já padronizada em termos de espaço a ocupar. Uma linguagem fracamente tipada já permite que a reserva de espaço em memória seja menos padronizada e ocorra de forma bem dinâmica durante a execução, associando a quantidade de memória para armazenamento de valo- res de acordo com o dado recebido, por exemplo. É preciso ter regras bem definidas numa linguagem em relação à compatibili- dade entre tipos de dados e conversões possíveis para evitar exceções indesejadas em tempo de execução. O chamado escopo citado a pouco define se variáveis têm uso permitido ape- nas dentro de sub-rotinas quando chamadas (variáveis locais) ou em outras áreas do código (variáveis globais), mas existe outra categoria de escopo que permite que uma variável seja visível dentro da sub-rotina em que foi declarada, assim como em outras sub-rotinas chamadas por ela, utilizando o conceito de herança da programação orientada a objetos. Os tipos de dados definem com quais valores um programa desenvolvido em determinada linguagem pode trabalhar em tempo de execução, podendo mani- pular desde tipos simples até estruturas de dados mais complexas. Tipos primitivos representam a categoria básica de valores aceitos na lingua- gem e contemplam, em geral, valores numéricos inteiros ou de ponto flutuante (números com casas decimais), tipos caractere (texto em geral), booleanos (ver- dadeiro ou falso), e cadeias de valores ou caracteres. Tipos podem ser definidos pelo usuário como listas de valores chamadas tipos enumerados, restringindo a faixa de valores de aceitos de um tipo primi- tivo, ou matrizes e registros que representam coleções de outros tipos agrupados em uma estrutura com uma ou mais dimensões. Registros são mais comumente usados para armazenamento de tipos varia- dos em uma mesma estrutura e matrizes para dados de mesmo tipo de dado, Operadores e Expressões Re pr od uç ão p ro ib id a. A rt .
Compartilhar