Baixe o app para aproveitar ainda mais
Prévia do material em texto
Métodos de programação APRESENTAÇÃO Conhecer e entender os métodos e tipos de programação é um desafio instigante e, de certa forma, um compromisso de todo profissional de desenvolvimento de software. Ao compreender os conceitos que levam ao desenvolvimento de diferentes paradigmas, é possível apresentar maior discernimento quanto à adoção de uma linguagem de programação que atenda a uma determinada necessidade. Nesta Unidade de Aprendizagem, você vai conhecer a evolução dos principais tipos de métodos de programação e o seu histórico de desenvolvimento. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Definir métodos de programação.• Sintetizar o histórico dos métodos de programação.• Identificar os tipos de métodos de programação.• DESAFIO Os paradigmas de programação são diferentes classificações atribuídas à estruturação de linguagens de programação. Ao longo do desenvolvimento da computação, surgiram vários paradigmas e, consequentemente, novas linguagens de programação que empregavam seus conceitos na forma de se estruturar, o que também impactou os profissionais da área, uma vez que é comum um profissional mais novo achar estranho trabalhar com uma linguagem embasada em um paradigma de décadas atrás. Imagine que você trabalha em uma equipe de desenvolvimento de softwares em uma organização que já trabalha há muito tempo com softwares desenvolvidos internamente, com linguagens de programação da década de 90, como Visual Basic 5.0 e Delphi 6.0. Na sua equipe há um programador mais novo que começou a trabalhar com linguagens orientadas a objetos, principalmente com Java, e que encontrou uma dificuldade na adaptação ao paradigma de linguagens estruturadas. Você, como programador mais experiente, deve explicar ao programador: a) A diferença entre os dois paradigmas. b) O porquê de, ao contrário do Java, não ser possível desenvolver com as linguagens de paradigma estruturado Visual Basic 5.0 e Delphi 6.0. INFOGRÁFICO Aprender sobre a evolução dos paradigmas de programação e entender o caminho percorrido até os recursos atuais de programação é, além de instigante, necessário para o profissional de programação. A seguir, no Infográfico, veja a evolução das linguagens e dos paradigmas de programação e os desafios já transpostos ao longo dos anos pelos projetistas, engenheiros de computação e comunidade de desenvolvedores. CONTEÚDO DO LIVRO Os métodos de programação fazem parte da história da programação, assim como as linguagens e tecnologias relacionam-se à arte de programação. Esses paradigmas contam muito da evolução e de como a ciência ao longo do tempo desenvolveu meios mais próximos das necessidades de programação propostas à comunidade. Leia o capítulo Métodos de programação, da obra Paradigmas de programação, e conheça um pouco mais sobre a evolução dos paradigmas de programação, veja os tipos existentes e entenda seus conceitos e sua relação com as linguagens que surgiram ao longo do tempo. Boa leitura. PARADIGMAS DE PROGRAMAÇÃO Fabricio Machado da Silva Métodos de programação Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Explicar o que são métodos de programação. � Sintetizar o histórico dos métodos de programação. � Identificar os tipos de métodos de programação. Introdução Em geral, quando se trata do tema paradigmas de programação, não se atribui a devida importância para o assunto. Todo o profissional de programação de computadores deveria se atentar aos diferentes para- digmas, pois eles são a base para as diferentes linguagens que existem e existiram ao longo da evolução da programação. É comum pensar, como estudantes ou profissionais, quais os be- nefícios de entender os conceitos de linguagens de programação em uma área com tantos temas muito pertinentes, mas saber como uma linguagem funciona para interpretar as instruções e a evolução de lin- guagens e conceitos ao longo do tempo, sem dúvidas, traz vantagens na construção de softwares. Neste capítulo, você aprenderá o que são os métodos de programa- ção, quais são os diferentes tipos e como ocorreu a sua evolução. Paradigmas de programação Como seres humanos, sentimos necessidade de expressar nossos pensamentos, seja de forma verbal, utilizando o nosso poder de comunicação, ou escrita, escrevendo textualmente o que estamos pensando. A linguagem de progra- mação, assim como a nossa linguagem natural, permite nossa comunicação com as máquinas. Dessa maneira, podemos instruir, por meio de linhas de comandos, as máquinas a executarem determinada instrução. No entanto, para Tucker e Noonan (2009), as linguagens de programação se diferem das linguagens naturais de duas maneiras importantes. Apesar de permitirem a comunicação entre humanos e máquinas, elas possuem um domínio de expressão mais reduzidos do que as linguagens naturais, pois seu objetivo é permitir a compreensão de ideias computacionais, ou seja, se propõem a atender diferentes requisitos das linguagens naturais. Toda a linguagem de programação está construída sobre um paradigma. Mas, afinal, o que é um paradigma? Um paradigma representa um padrão de pensamento que guia um conjunto de atividades relacionadas, trata-se de um padrão que define um modelo para a resolução de problemas e regra, basica- mente, toda e qualquer linguagem de programação existente. Os paradigmas de programação estão classificados em quatro diferentes tipos, que evoluíram ao longo das últimas décadas: � programação imperativa; � programação funcional; � programação lógica; � programação orientada a objetos. A Figura 1 ilustra de forma hierárquica os diferentes paradigmas de pro- gramação atuais e sua derivação dos paradigmas imperativo e declarativo. Figura 1. Paradigmas de programação. Fonte: Adaptada de Simão (2018). Paradigma de programação Paradigma imperativo Paradigma declarativo Paradigma procedimental Paradigma funcional Programação baseada em regras Paradigma lógico Paradigma orientado a objetos Programação orientada a eventos Métodos de programação2 Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Algumas linguagens de programação foram projetadas para suportar diferentes paradigmas. Um exemplo disso, é o da linguagem de programação C++, que foi projetada para ser uma linguagem imperativa e orientada a objetos. No início da programação, o único meio de conseguir programar um computador era inserindo um código binário de programas para a sua me- mória principal, o que representava uma grande probabilidade de erros e uma manutenção praticamente impossível. Nessa época, escrevia-se programas utilizando linguagens de baixo nível, porém, com a popularidade dos computa- dores, as demandas por softwares se tornaram enormes. Então, as linguagens necessitaram evoluir para um paradigma de nível mais alto, sendo a evolução dos métodos e linguagens uma consequência dessa demanda. Na próxima seção, você verá um pouco da evolução dos paradigmas de programação ao longo das décadas e o surgimento de diferentes linguagens que possibilitaram o desenvolvimento de softwares com melhor compreensão e manutenção do que os existentes no início da programação. Histórico dos métodos de programação No início da programação de computadores, as primeiras linguagens disponí- veis eram as de máquinas e as próprias linguagens de construção (Assembly) dos primeiros computadores. A partir delas, muitas linguagens de programa- ção e dialetos foram desenvolvidos, algumas obtiveram sucesso e inclusive influência sobre outras linguagens e, naturalmente, outras tiveram um tempo de vida limitado Sebesta (2018). A programação de computadores não tem uma data correta de início. Na década de 1930, surgiram os primeiros computadores elétricos; já em 1948, Konrad Zuse publicousua criação, a linguagem de programação Plankalkül. Nessa época, ela ainda não tinha muita utilidade, então, foi esquecida. Con- tudo, antes da programação passar para o computador, eram usados cartões de papelão, que eram perfurados, criando códigos. 3Métodos de programação Os paradigmas da programação foram criados, em sua maioria, na década de 1970. Nessa época surgiram as seguintes linguagens: � Simula — inventada nos anos de 1960 por Nygaard e Dahl, foi a primeira linguagem a suportar o conceito de classes; � C — foi uma das primeiras linguagens de programação de sistemas, criado por Dennis Ritchie e Ken Thompson, tem uma das maiores influências no mundo atual; � Prolog — projetada em 1972, foi a primeira linguagem de programação com paradigma lógico; � Pascal — foi muito importante, mas atualmente está quase sem uso; � C++ — criada para ser compatível com C, foi muito importante, pois é mais simples e dinâmica; � Perl — é uma boa linguagem para trabalhar em níveis de sobrecarga grandes. Nos anos de 1990, a internet surgiu como um furacão, mudando totalmente o rumo da programação. As linguagens Java e JavaScript foram criadas nessa época, ambas relacionadas à internet. Na mesma época, surgiram a Visual Basic e o Object Pascal. Java é uma linguagem relativamente simples, orientada a objetos, criada com o intuito de revolucionar as linguagens de programação. Já PHP (acrônimo para “pré-processador de hipertexto”) é muito importante para o desenvolvimento de aplicativos para Web, é a linguagem que, cada vez mais, toma conta dos websites (MILETTO; BERTAGNOLLI, 2014). Na Figura 2, você verá um breve resumo histórico da evolução e da in- fluência de algumas linguagens de programação sobre outras. Apesar desse histórico não ser completo, é possível perceber alguns eventos e tendências mais influentes. Métodos de programação4 Figura 2. Resumo da história das linguagens de programação. Fonte: Tucker e Noonan (2009, p. 7). A década de 1950 marcou a chegada das linguagens de alto nível. Essas linguagens se diferenciavam das linguagens de máquina por não estarem dire- tamente dependentes de uma arquitetura específica. As primeiras linguagens que chegaram com essa característica foram Fortran, Cobol, Algol e Lisp. Fortran e Cobol foram linguagens que alcançaram um grande sucesso e possuem, até hoje, um grande legado de sistemas escritos que atuam inclusive em grandes organizações, como segmento financeiro. Já Lisp foi caindo em desuso e Algol praticamente sumiu (MILETTO; BERTAGNOLLI, 2014). 5Métodos de programação Certamente, o maior motivador para o desenvolvimento das linguagens e métodos de programação nas últimas décadas tem sido o rápido desenvol- vimento dos recursos computacionais e o surgimento de novas e emergentes tecnologias, entre as quais podemos destacar as seguintes áreas: � inteligência artificial; � World Wide Web ; � sistemas e redes; � dispositivos móveis. Ao contrário do que costumamos imaginar, a programação funcional não é o oposto de programação orientada a objetos. São tipos diferentes de programação, mas podem, inclusive, ser usadas em uma mesma aplicação, principalmente em linguagens multiparadigmas, como o JavaScript. O projeto de uma nova linguagem de programação é algo bem complexo, o projetista deve se preocupar com inúmeros desafios e adotar soluções es- pecíficas, que se proponham a atender esses desafios. Os principais desafios envolvidos no projeto de uma nova linguagem de programação são: � arquitetura; � requisitos técnicos; � padrões. Entre os desafios propostos aos projetistas, vamos destacar os padrões. Sempre que uma linguagem de programação tem um amplo uso entre os desenvolvedores, é natural que novo processo de padronização surja, ou seja, a comunidade define um padrão de construção independentemente da máquina da linguagem e que todos os seus programadores devem aderir. Isso é importante porque o método de padronização, entre outras vantagens, busca a estabilização em diferentes plataformas, possibilitando a portabilidade dos programas construídos a partir dela. Métodos de programação6 Se observarmos essa evolução, é possível perceber que algumas lingua- gens que obtiveram sucesso foram projetadas por comunidades ou grupos de desenvolvedores, exigindo uma certa padronização quanto aos programas construídos. Tipos de programação Os tipos de programação estão diretamente relacionados ao conceito do para- digma no qual a linguagem foi concebida, por exemplo é impossível utilizar uma linguagem linear como Ada ou Assembly e tentarmos construir um programa com blocos de funções. Isso acontece porque o paradigma desse tipo de linguagem não provê recursos que o paradigma procedural possibilita, permitindo o reuso de código por meio de funções (blocos que executam uma determinada funcionalidade). Portanto, é importante entender e conhecer bem os tipos de paradigmas de programação e seus conceitos, para que ao utilizar uma linguagem se saiba como, de acordo com o tipo de paradigma em que ela foi concebida, devem ser estruturados os códigos. A seguir você verá os tipos de paradigmas que surgiram ao longo da evolução da programação. Paradigma imperativo Após a geração de programação linear com linguagens de máquina, houve um grande avanço com o advento das linguagens procedurais. Esse tipo de paradigma foi o primeiro que apresentou as linguagens de alto nível, que permitiam a utilização de um vocabulário mais próximo ao natural para construção de programas. Esse paradigma recebe o nome de imperativo pela forma como as instruções nos códigos são repassadas para o compilador: � Faça isso. � Depois faça aquilo. 7Métodos de programação Halissa Franco Halissa Franco Halissa Franco É uma forma imperativa de dar ordens para que a máquina execute as instruções dadas, e ela executará cada uma, passo a passo, com o propósito de chegar no resultado esperado. Uma linguagem imperativa suporta algumas características comuns: � atribuições, declarações e expressões; � estruturas de controle; � abstração procedural. Basicamente, os códigos são construídos obedecendo a estrutura de de- clarações e as instruções. A linguagem mais popular desse paradigma é a linguagem C (MILETTO; BERTAGNOLLI, 2014). Paradigma declarativo A principal característica das linguagens com programação declarativa é o foco não estar em como uma execução vai ocorrer, mas sim no resultado a ser atingido. Um dos melhores exemplos para entender esse paradigma são as instruções structured query language (SQL), pois nela são passados para o banco de dados apenas o que se pretende, sem a preocupação sobre como o banco de dados vai executar a instrução, o foco é somente o retorno ou resultado da consulta. Atualmente, uma das principais linguagens de programação utilizada, o framework JavaScript Angular, é um exemplo de implementação desse para- digma, que, aliás, é muito utilizado em razão do advento dos sistemas Web, no qual o código submete uma execução e espera o retorno. Paradigma estruturado No sentido mais restrito, o conceito de programação estruturada se refere à forma do programa e do processo de codificação. É um conjunto de convenções que o programador pode seguir para produzir o código estruturado, e suas regras de codificação impõem limitações sobre o uso das estruturas básicas de controle, estruturas de composição modular e documentação. Métodos de programação8 Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco As características do paradigma estruturado são: � programação sem GOTO (eliminação completa ou parcial do comando GOTO, que significa “ir para”); � programação com apenas três estruturas básicas de controle — sequên- cia, seleção e iteração;� forma de um programa estruturado; � aplicação de convenções de codificação estruturada a uma linguagem de programação específica. Algumas linguagens com esse paradigma são Pascal e C. Paradigma orientado a objetos O paradigma de orientação a objetos surge como o advento da reutilização de código e a facilidade na manutenção. No paradigma de orientação a objetos, o princípio é a construção de código, implementando as entidades do mundo real por meio do conceito de classes que possuem relação entre si. Como o desempenho das aplicações não é uma das grandes preocupações na maioria delas (devido ao poder de processamento dos computadores atuais), a programação orientada a objetos se tornou muito difundida. A programação orientada a objetos está embasada em quatro pilares. � Abstração: como estamos lidando com objetos do mundo real, por exem- plo, carro, casa, pessoa etc.), precisamos imaginar como esses objetos vão se integrar dentro do nosso sistema e modelar seu comportamento abstraindo comportamento e características específicas de cada um. � Encapsulamento: não importa para um código que invoca um método saber como outro vai ser executado, trata-se de uma característica que traz principalmente segurança ao código. � Herança: assim como no mundo real, a herança em programação orientada a objetos seria a capacidade de uma classe herdar de outra métodos e atri- butos, sendo, portanto, uma característica relacionada ao reuso de código. � Polimorfismo: existem animais capazes de se adaptar a algumas ne- cessidades do mundo real e se comportar de forma diferenciada em alguns casos, essa particularidade também é possível no paradigma de orientação a objetos. Mesmo herdando o comportamento de outra classe, a classe herdeira pode modificar o seu comportamento em de- terminadas situações. 9Métodos de programação Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco 1. Encapsulamento: Colocar algo dentro de uma capsula, para deixar visível apenas o necessário para que o user/class funcione corretamente. A capsula é o objeto, que é agrupador dos membros do objeto [atributos, métodos] Modificadores de acesso: • Public: Visível em todo o sistema • Protected: Visível em todas as classes do mesmo pacote e é transmitidos por herança. • Package(default): Visível em todas as classes do mesmo pacote •Private: Visível somente na class Halissa Franco 2. Herança: Quando se tem relação de classes que compõe outro, você tem uma composição. Diferente da composição na Herança uma classe descende de outras herdando, portanto, as classes filhas o comportamento e características das classes mães. Exemplo: Dada uma classe mãe Animal todas as suas classes filhas (ex: cão, lobo urso) herdarão da classe mãe: Atributos: tamanho, peso, idade Métodos: fazer barulho, comer, dormir e vaguear. Halissa Franco 3. Polimorfismo a. Estático (sobrecarga): Mesmo método escrito com parâmetros diferentes, múltiplas formas. É estático pois está escrito de forma estática no código, não muda dinamicamente. Várias funções (mesmo nome) escritas de formas diferentes. b. Dinâmico: Precisa ter herança. A partir do tipo mais genérico, você consegue receber objetos instanciados a partir dos tipos mais específicos, então um tipo mais genérico consegue se comportar igual a todos os outros tipos mais específicos e consegue ter também múltiplas formas Halissa Franco 4. Abstração: Pegar o conceito do mundo real e simplificar para o software. Por ser algo muito abstrato, a programação orientada a objetos é difícil de aprender. Vários conceitos são artificiais e isso torna o aprendizado bastante complicado. O resultado que se vê é muito código não orientado ao objeto, mas escrito em linguagens orientadas a objetos. Para atender a diversidade e complexidade do universo da programação é que os paradigmas são divididos. É importante salientar que não existe um paradigma vinculado à determinada linguagem de programação, o paradigma tem que ser independente de linguagem. Por exemplo, a orientação a objetos é um paradigma criado para a solução de problemas de desenvolvedores e não tem uma ligação de necessidade com nenhuma linguagem, quem aborda esses paradigmas são as linguagens de programação. Você pode observar que várias linguagens de programação abordam vários tipos de paradigma de programação. A escolha do melhor paradigma é necessariamente relacionada ao tipo de problema que precisa ser solucionado. Veja no link a seguir um site sobre os pilares e conceitos do paradigma de programação orientada a objetos. https://qrgo.page.link/JBCZA MILETTO, E. M.; BERTAGNOLLI, S. C. Desenvolvimento de software II: introdução ao de- senvolvimento web com HTML, CSS, JavaScript e PHP. Porto Alegre: Bookman, 2014. 276 p. (Série Tekne; Eixo Informação e Comunicação). SEBESTA, R. W. Conceitos de linguagem de programação. 11. ed. Porto Alegre: Bookman, 2018. 758 p. Métodos de programação10 Halissa Franco Halissa Franco SIMÃO, J. M. Orientação a objetos: programação em C++. Curitiba: Departamento Acadê- mico de Eletrotécnica, Universidade Federal Tecnológica do Paraná, 2018. 26 p. (Notas de aula). Disponível em: http://www.dainf.ct.utfpr.edu.br/~jeansimao/Fundamentos1/ LinguagemC++/Fundamentos1-2-SlidesC++1-A-2018-08-01.pdf. Acesso em: 25 ago. 2019. TUCKER, A. B.; NOONAN, R. E Linguagens de programação: princípios e paradigmas. 2. ed. Porto Alegre: AMGH, 2009. 630 p. Leituras recomendadas EDELWEISS, N.; LIVI, M. A. C. Algoritmos e programação: com exemplos em Pascal e C. Porto Alegre: Bookman, 2014. 476 p. (Série Livros Didáticos Informática UFRGS). LEDUR, C. L. Desenvolvimento de sistemas com C#. Porto Alegre: SAGAH, 2018. 268 p. MACHADO, R. P.; FRANCO, M. H. I.; BERTAGNOLLI, S. C. Desenvolvimento de software III: programação de sistemas web orientada a objetos em Java. Porto Alegre: Bookman, 2016. 220 p. (Série Tekne; Eixo Informação e Comunicação). NEGRESIOLO, L. Tudo o que você precisa (e deveria) saber sobre Programação Orien- tada a Objetos. Gizmodo Brasil, São Paulo, 22 jan. 2019. Disponível em: https://gizmodo. uol.com.br/tudo-sobre-programacao-orientada-a-objetos/. Acesso em: 25 ago. 2019. OKUYAMA, F. Y.; MILETTO, E. M.; NICOLAO, M. Desenvolvimento de software I: conceitos bá- sicos. Porto Alegre: Bookman, 2014. 236 p. (Série Tekne; Eixo Informação e Comunicação). PINHEIRO, F. A. C. Elementos de programação em C: em conformidade com o padrão ISO / IEC 9899. Porto Alegre: Bookman, 2012. 548 p. 11Métodos de programação DICA DO PROFESSOR Para desenvolver uma solução é necessário que se conheça tanto o problema quanto os tipos de paradigmas de programação existentes. Apenas assim, pode ser entregue um produto que atenda aos objetivos determinados. A seguir, na Dica do Professor, saiba um pouco mais sobre a importância dos paradigmas de programação. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS 1) É natural que estudantes da área de computação questionem o porque de se estudar os conceitos e a história das linguagens de programação, no entanto, adquirir esse conhecimento proporciona ao aluno e futuro profissional diversas vantagens. Assinale a alternativa que expresse algumas dessas vantagens: A) Embasamento para escolha de linguagens adequadas e melhor entendimento da importância da implementação. B) Facilidade de comunicação com outros desenvolvedores e reúso de componentes. C) Preparação para certificações e reúso de componentes. D) Aumento da capacidade de raciocínio lógico e conhecimento geral. E) Delegação de responsabilidades e reaproveitamento de códigos. 2) Computadores têm sidoutilizados para uma infinidade de áreas que, por sua vez, resultam no desenvolvimento de novos conceitos e linguagens que demandam novos paradigmas e métodos de programação. Assinale a alternativa correta sobre algumas das áreas que impulsionaram esse desenvolvimento: A) Indústria Automobilística e Comércio Eletrônico. B) Medicina e Inteligência Artificial. C) Inteligência Artificial e World Wide Web. D) Dispositivos Móveis e Governo. E) Inteligência Artificial e Governo. 3) As linguagens de programação podem apresentar características e comportamentos definidos de acordo com o paradigma que a construiu. No entanto, uma linguagem pode apresentar características provenientes de diferentes paradigmas. Dessa forma, assinale a alternativa verdadeira: A) Os paradigmas não estão vinculados à linguagem de programação. B) As linguagens de programação são as responsáveis na definição de um paradigma. C) O paradigma de orientação a objetos foi o precursor do conceito de reusabilidade de código. D) No paradigma estrutural, não importa o COMO e sim O QUE se pretende alcançar com o código do programa. E) Para escolher o melhor paradigma, deve-se levar em consideração a tecnologia e não o contexto do problema que se deseja resolver. 4) O paradigma de programação imperativo tem como principal característica a declaração comandos, que descreve uma sequência de instruções para alcançar um objetivo. Sobre os conceitos do paradigma imperativo, assinale a alternativa correta: A) A programação imperativa não possibilita trabalhar com reúso de código. B) A programação imperativa é um paradigma ultrapassado que não tem mais uso. C) A programação imperativa não foca na resolução do problema, nem nas instruções. D) A programação imperativa apresenta linguagens amplamente utilizadas, como a linguagem C, por exemplo. E) A programação imperativa tem o foco em entender os comandos sem seguir uma lógica. 5) O paradigma de programação estruturada surgiu com a ideia da criação de estruturas e blocos de execução de rotinas e foi amplamente utilizado, dando ênfase para o surgimento do paradigma orientado a objeto. Assinale a alternativa correta sobre o paradigma de programação estruturada: A) O paradigma estruturado foi substituído pelo orientado a objetos. B) O paradigma estruturado não permite a reutilização de código. C) O paradigma estruturado permite recursos como herança e polimorfismo. D) O paradigma estruturado trabalha com conceito de classes e funções. E) O paradigma estruturado permite a organização do código em estruturas funcionais. NA PRÁTICA Ao iniciar o aprendizado em uma nova linguagem de programação, é importante conhecer, além dos recursos e e da sintaxe, a sua arquitetura e suas vantagens ou desvantagens. Neste contexto, conhecer o paradigma em que a linguagem foi construída torna-se um atalho para a tarefa. A seguir, no Na Prática, veja as características e vantagens da utilização do paradigma orientado a objetos. SAIBA + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Informações sobre paradigmas de programação No vídeo a seguir, você vai encontrar de forma resumida e didática algumas informações relacionadas aos paradigmas de programação. Conteúdo interativo disponível na plataforma de ensino! Definições de programação imperativa, declarativa e reativa Neste artigo, você vai encontrar uma definição sucinta de programação imperativa, programação declarativa e de programação reativa, um paradigma relativamente novo. Conteúdo interativo disponível na plataforma de ensino! História da programação Neste artigo, você vai conhecer um pouco da história da programação, passando por décadas de evolução, diferentes paradigmas e linguagens. Conteúdo interativo disponível na plataforma de ensino! Programação declarativa APRESENTAÇÃO A programação declarativa tem como principal característica a possibilidade de programar de acordo com o objetivo a ser atingido. Assim, a programação acontece a partir do resultado que se deseja obter com o programa e não com foco no que será executado, para atingir o resultado esperado. É um tipo de programação em que o programa deve declarar os objetivos da sua execução. Nesta Unidade de Aprendizagem, você vair definir conceitualmente o que é programação declarativa, identificar algumas linguagens de programação declarativa e verificar algumas aplicações desse paradigma. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Definir programação declarativa.• Identificar as linguagens de programação declarativa.• Aplicar a programação declarativa.• DESAFIO A programação declarativa é um paradigma de programação que possibilita desenvolvimento mais objetivo, pois o desenvolvedor precisa especificar apenas o que deseja obter de resultado com o programa. Dentro desse contexto, aplicações clientes servidor, como, por exemplo, WebService, têm ampla adesão. Você, como desenvolvedor da equipe de desenvolvimento da companhia, tem como desafio um novo projeto de integração entre dois sistemas. O seu sistema deve se integrar com um WebService responsável por fazer o cálculo e a geração da folha de pagamento. Sendo assim, o sistema deverá enviar um arquivo XML com os dados dos funcionários, como ponto e férias, e receber outro aquivo XML de retorno com os dados da folha de pagamento gerada. Diante desse cenário, como a programação declarativa pode atender essa necessidade? Justifique a adequação realizada para o escopo do projeto. INFOGRÁFICO A programação declarativa surgiu como uma forma de construção de código focado em especificar o que você deseja alcançar e não em como. Oriunda de estudos matemáticos de alguns pesquisadores e com o objetivo de atender demandas mais específicas, como a Inteligência Artificial, ela vem sendo utilizada desde então. E, ao longo do tempo, algumas linguagens surgiram como expoentes nesse paradigma. Confira, no Infográfico, um pouco mais sobre os conceitos desse paradigma e algumas linguagens que se aplicam aos tipos funcional e lógico. Halissa Franco Halissa Franco Halissa Franco CONTEÚDO DO LIVRO As linguagens de programação que seguem o paradigma declarativo têm como característica a construção dos programas orientados para a meta que devem alcançar e não como executarão o passo a passo para alcançarem essas metas. Por isso, são linguagens que se tornam mais fáceis de aprender, além de serem amplamente utilizadas no mercado, como SQL, por exemplo. No capítulo Programação declarativa, da obra Paradigmas de Programação, você vai compreender o significado do paradigma de programação declarativa, identificando as linguagens de programação mais utilizadas e suas respectivas aplicações. Boa leitura. PARADIGMAS DE PROGRAMAÇÃO Fabricio Machado da Silva Programação declarativa Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Definir programação declarativa. � Identificar as linguagens de programação declarativa. � Aplicar a programação declarativa. Introdução Na década de 1970, a programação declarativa surgiu como um novo paradigma para a área da programação, diferente dos já existentes, pois exigia que o programador informasse quais os objetivos pretendidos com a computação. Essa ação era contrária a apenas escrever algoritmos detalhados descrevendo como os objetivos poderiam ser alcançados. Dessa forma, a programação declarativa se constituiu como um para- digma em que as linguagens de programação mantêm a característica de aprendizagem mais fácil do que a linguagem de programação imperativa. Neste capítulo, você entenderá melhor as características da progra- mação declarativa e identificará algumas linguagens declarativas e sua aplicação. Programação declarativa A linguagem de programação declarativa surgiu como um novoparadigma de construção de programas, diferente da linguagem de programação impe- rativa, na qual a construção de um programa ocorre por meio da construção de algoritmos complexos que descrevem passo a passo como um determinado resultado é alcançado, nesse paradigma, o foco está em descrever quais os resultados devem ser alcançados. Segundo SEBESTA (2018), a programação declarativa requer que o programador foque nos objetivos da computação, e não em como esses objetivos serão alcançados. Halissa Franco Halissa Franco Halissa Franco As aplicações construídas seguindo o paradigma da linguagem declarativa são classificadas em dois domínios principais, conforme descrito a seguir. � Aplicações de inteligência artificial: no campo da inteligência artificial é fácil imaginar porque esse paradigma se adapta bem, pois são aplicações que se preocupam com os objetivos, utilizando regras e lógicas. Nesse domínio a linguagem Prolog tem sido um destaque. � Aplicações de acesso de informações em banco de dados: os maiores usos de linguagens de programação declarativa estão concentrados no domínio de consultas e manipulação de dados em sistemas de gestão de base de dados (SGBD), a structured query language (SQL), por exemplo, se tornou o expoente desse uso. Na programação declarativa, podemos dizer que um programa é um con- junto de declarações, por exemplo, verdade, falso, satisfaz restrição etc. O conceito fundamental e o foco devem estar sempre na declaração, mas a sequ- ência não importa. Além disso, é comum dizer que a programação declarativa se distingue da programação imperativa no sentido de apenas especificar o que, ao contrário de especificar o como. As linguagens de programação declarativas ainda podem ser subdividas em funcional e lógica. O Prolog se destaca como um exemplo de linguagem decla- rativa e lógica no paradigma de linguagem declarativa e funcional. Linguagens de cálculos, como o LISP é um exemplo disso (TUCKER; NOONAN, 2009). A Figura 1 ilustra os diferentes tipos de programação declarativa. Figura 1. Diferentes tipos de programação declarativa. Fonte: Adaptada de Botelho (2015). Programação declarativa2 Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Ainda no escopo de programação lógica, que é um dos tipos de programa- ção declarativa, um programa é um conjunto de afirmações sobre as várias entidades do domínio da aplicação. Já na programação funcional pura, um programa é constituído por apenas um conjunto de definições de funções, e cada função é definida sempre em razão de outras funções. Linguagens de programação declarativa A primeira linguagem de programação funcional a surgir foi inventada para fornecer recursos para o processamento de listas, uma necessidade impulsionada pelo surgimento das primeiras aplicações na área de inteligência artificial. A programação lógica é caracterizada pelo uso de uma notação lógica formal para comunicar processos computacionais para um computador. O cálculo de predi- cados é, atualmente, a notação utilizada nas linguagens de programação lógica. As linguagens de programação funcionais e lógicas são tipos de linguagens de programação. A seguir vamos detalhar mais as linguagens funcionais LISP e lógica Prolog, que são as principais nos seus respectivos tipos. Linguagem de programação LISP O interesse na área de inteligência artificial no início dos anos de 1950 fomentou a necessidade do processamento de listas, provindas a partir da linguística, da psicologia e da matemática (SEBESTA, 2018). Cada área tinha seu interesse específico, os linguistas estavam interessados no processamento da linguagem natural, os psicólogos em modelar o comportamento e os matemáticos em mapear processos de raciocínio mental. Todos chegaram a uma conclusão em comum: era necessário criar uma forma de permitir o processamento dados simbólicos em listas encadeadas pelo computador. Na época, a maior lista da computação era constituída por dados numéricos armazenados em vetores. A linguagem de programação LISP surgiu dos estudos realizados por John McCarthy no Massachusetts Institute of Technology (MIT). Sua primeira versão foi chamada de LIST puro, por ser uma linguagem puramente funcional. Essa versão do LIPS trabalhava com apenas três tipos de dados: � Átomos, que são símbolos com a forma de identificadores ou literais numéricos. 3Programação declarativa Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco � Listas, que são especificadas com a delimitação de seus elementos com parênteses, nos quais os elementos são restritos a átomos, tendo o seguinte formato: (A B C D). � Estruturas de listas aninhadas, também especificadas com parênteses, por exemplo, (A (B C) D (E (F G))), que é composta de quatro elemen- tos. O primeiro elemento é o átomo A; o segundo, é a sub lista (B C); o terceiro, é o átomo D; e o quarto, é a sub lista (E (F G)), que tem como seu segundo elemento a sub lista (F G). Como LISP foi projetada no conceito de programação funcional, todas as computações são realizadas por meio da aplicação de função a argumentos. A sintaxe do LISP é, portanto, muito diferente de linguagens imperativas, como C++ ou Java. Por exemplo, em Java, a sintaxe é uma mistura de inglês e álgebra, ao passo que em LISP, a sintaxe é um modelo simplista, o código e os dados dos programas têm exatamente a mesma forma: listas dentro de parênteses. Considere mais uma vez a lista (A B C D). Quando interpretada como dados, ela é uma lista de quatro elementos, mas se vista como código, é a aplicação da função chamada A para os três parâmetros B, C e D. A Figura 2 demonstra a representação interna de duas listas em LISP. Figura 2. Representação interna de duas listas em LISP. Fonte: Adaptada de Sebesta (2018). Programação declarativa4 Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Veja a seguinte função de exemplo em LISP. O código a seguir define uma função de predicado em LISP que recebe duas listas como argumentos e retorna True, se as duas listas forem iguais, ou NIL (false) caso contrário. (DEFUN equal _ lists (lis1 lis2) (COND ((ATOM lis1) (EQ lis1 lis2)) ((ATOM lis2) NIL) ((equal _ lists (CAR lis1) (CAR lis2)) (equal _ lists (CDR lis1) (CDR lis2))) (T NIL) ) ) Linguagem de programação Prolog O Prolog é baseado em cláusulas de Horn (um subconjunto da lógica de primeira ordem), e é provavelmente a linguagem mais famosa na família de programação lógica. Foi um projeto colaborativo de Alain Colmerauer, Phillipe Roussel (ambos da Universidade de Aix-Marselha) e Robert Kowalski (Universidade de Edimburgo). Sua primeira versão apareceu, como Smalltalk e C, em 1972. Seu nome é uma abreviatura de programmation en logique (francês para programação em lógica). Para Nicoletti (2003, p. 35), o Prolog tem sido muito influente nos domínios das provas de teoremas, sistemas especialistas, processamento de linguagem natural e no campo da inteligência artificial (notavelmente o IBM Watson2) em geral. Além disso, influenciou de forma significativa o desenvolvimento da linguagem de programação Erlang. Para Sebesta (2018), o Prolog é uma linguagem de programação de alto nível baseada em lógica formal. Ao contrário das linguagens de programação tradicionais, baseadas na execução de sequências de comandos, o Prolog é baseado na definição e na solução de fórmulas lógicas. Por vezes, é chamado de linguagem declarativa ou baseada em regras, porque seusprogramas con- sistem em uma lista de fatos e regras. É, também, amplamente utilizado para aplicações de inteligência artificial, em particular para sistemas especialistas. 5Programação declarativa Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco O Prolog possui quatro blocos de construção: � lógico or; � lógico and; � reescrita de termos; � unificação. Combinando esses quatro blocos, é possível executar qualquer computação. O Prolog, assim como o SQL, tem dois aspectos principais, um para expressar os dados e outro para consultá-los. As construções básicas da programação lógica, termos e declarações são herdadas da lógica. Existem três declarações básicas: � fatos, que são afirmações fundamentais sobre o domínio do problema (por exemplo, “Sócrates é um homem.”); � regras, que são inferências sobre fatos no domínio (por exemplo, “Todos os homens são mortais.”); � consultas, que são perguntas sobre esse domínio (por exemplo, “É Sócrates mortal?”). Fatos e regras são armazenados em uma base de conhecimento que o compilador Prolog transporta para uma forma mais eficiente para consulta. Quando “fazemos” uma pergunta, o Prolog faz uma pesquisa exaustiva por meio do banco de dados de fatos e regras até encontrar um resultado, usando o backtracking internamente. Aprenda pelo menos uma nova linguagem de programação a cada ano. Diferentes linguagens resolvem os mesmos problemas de maneiras diferentes, ao aprender várias abordagens, você amplia seu pensamento e evita “ficar preso” em uma mesma rotina. Além disso, aprender linguagens de programação é muito mais fácil atualmente, pois há muitos softwares disponíveis gratuitamente na Internet. Programação declarativa6 Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco A escolha de linguagens declarativas, seja do tipo lógica ou funcional, é sempre uma questão ligada ao contexto da solução que se deseja atender. Linguagens declarativas são de excelente aplicação em contextos mais abs- tratos, como consultas a banco de dados e questões que envolvam áreas da inteligência artificial. Para conhecer os pilares e conceitos do paradigma de programação orientada a objetos acesse o link a seguir. https://qrgo.page.link/JBCZA BOTELHO, L. M. Inteligência artificial: apontamentos para as aulas. Lisboa: Departamento de Ciências e Tecnologias da Informação, Instituto Superior de Ciências do Trabalho e da Empresa, 2015. 10 p. Disponível em: http://home.iscte-iul.pt/~luis/aulas/ia/Co- nhecimento%20declarativo%20em%20programacao%20em%20logica.pdf. Acesso em: 21 ago. 2019. NICOLETTI, M. C. A cartilha Prolog. São Carlos: Edufscar, 2003. 124 p. (Série Apontamentos). SEBESTA, R. W. Conceitos de linguagem de programação. 11. ed. Porto Alegre: Bookman, 2018. 758 p. TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2. ed. Porto Alegre: AMGH, 2009. 630 p. Leituras recomendadas EDELWEISS, N.; LIVI, M. A. C. Algoritmos e programação: com exemplos em Pascal e C. Porto Alegre: Bookman, 2014. 476 p. (Série Livros Didáticos Informática UFRGS). LEDUR, C. L. Desenvolvimento de sistemas com C#. Porto Alegre: SAGAH, 2018. 268 p. MACHADO, R. P.; FRANCO, M. H. I.; BERTAGNOLLI, S. C. Desenvolvimento de software III: programação de sistemas web orientada a objetos em Java. Porto Alegre: Bookman, 2016. 220 p. (Série Tekne; Eixo Informação e Comunicação). 7Programação declarativa MILETTO, E. M.; BERTAGNOLLI, S. C. Desenvolvimento de software II: introdução ao de- senvolvimento web com HTML, CSS, JavaScript e PHP. Porto Alegre: Bookman, 2014. 276 p. (Série Tekne; Eixo Informação e Comunicação). OKUYAMA, F. Y.; MILETTO, E. M.; NICOLAO, M. Desenvolvimento de software I: conceitos bá- sicos. Porto Alegre: Bookman, 2014. 236 p. (Série Tekne; Eixo Informação e Comunicação). PINHEIRO, F. A. C. Elementos de programação em C: em conformidade com o padrão ISO / IEC 9899. Porto Alegre: Bookman, 2012. 548 p. Programação declarativa8 DICA DO PROFESSOR A programação funcional é uma maneira de pensar sobre a construção de software, criando funções puras. As linguagens funcionais são declarativas, pois usam expressões e declarações, em vez de execução de instruções. São, portanto, linguagens que apresentam características de abstração e previsibilidade, entre outras vantagens. Na Dica do Professor, você verá um pouco mais sobre as características da linguagem funcional e por que ela se enquadra como um dos tipos de linguagem declarativa. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS 1) As linguagens de programação declarativas têm como principal característica lógica do programa estarem orientadas para o resultado a ser obtido e não para o modo como será alcançado. Ou seja, têm foco no quê e não no como. Assinale a alternativa que descreva outra característica também associada a esse paradigma: A) Modelagem de entidades do mundo real. B) Facilidade de aprendizagem. C) Comandos e instruções passo a passo. D) Facilidade de integração com outras linguagens. E) Criação de códigos enxutos. 2) As linguagens de programação declarativa, assim como linguagens em outros paradigmas, são indicadas para programas em algumas áreas do conhecimento. Assinale a alternativa que identifica as áreas do conhecimento em que mais se aplicam as linguagens de programação declarativa: A) Processamento de Imagem e Banco de Dados. B) Sistemas Estruturados e Processamento de Imagem. C) Jogos e Banco de Dados. D) Inteligência Artificial e Banco de Dados. E) Móbile e Sistemas Web. 3) As linguagens de programação lógica, como o Prolog, têm grande embasamento na lógica matemática, fazendo uso de símbolos na declaração pela lógica de predicados. Assinale a alternativa correta acerca de algumas características da programação lógica: A) Processamento simbólico e fácil modificação. B) Processamento simbólico e soluções algorítmicas. C) Difícil modificação e respostas parcialmente corretas. D) Soluções heuríticas e soluções algorítmicas. E) Estruturas de controle e de conhecimento integradas. 4) O paradigma de programação funcional é uma forma de programação declarativa, criado explicitamente para dar suporte a uma abordagem funcional pura, para a solução de problemas. Para atingir esse objetivo, são características desse paradigma: A) Alta importância da ordem de execução dos passos. B) Controle de fluxo, utilizando loops e condições. C) Alterações no programa são mais complexas. D) Foco em como controlar tarefas. E) Foco em funções com objetos de primeira classe e coleção de dados. 5) As linguagens de programação por restrições são uma complementação ao padrão lógico e se referem à implementação de restrições na relação entre variáveis, especificando soluções e critérios a serem cumpridos, atuando sobre domínios. As linguagens de programação por restrições atuam sobre alguns domínios. Assinale a alternativa abaixo que apresenta alguns domínios onde esse tipo de linguagem atua: A) Estrutural e condicional. B) Matemático e funções. C) Booleano e finito. D) Estrutural e orientado a objetos. E) Imperativo e funcional. NA PRÁTICA A linguagem LISP é um exemplo de linguagem declarativa funcional muito utilizada em aplicações que necessitam resolver questões matemáticas mais complexas, como em um jogo de xadrez. O jogo de xadrez exige raciocínio lógico e capacidade de realizar cálculos probalísticos matemáticos, por isso, a criação de um programa em LISP que utiliza os recursos da programação declarativa é um bom exemplo de uso desse paradigma. Confira, Na Prática, a criação de um programa em LISP básico que possibilita um jogo de xadrez entre o usuário e o computador e compreendacomo a linguagem declarativa se adapta a esses casos. Conteúdo interativo disponível na plataforma de ensino! SAIBA + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Imperativo ou Declarativo? Confira, neste artigo, uma comparação didática sobre as diferenças entre os Paradigmas Declarativo e Imperativo. Conteúdo interativo disponível na plataforma de ensino! A linguagem SQL Este artigo apresenta uma introdução sobre a linguagem declarativa SQL. Confira essa descrição e por que essa linguagem se tornou a mais explícita do paradigma declarativo. Conteúdo interativo disponível na plataforma de ensino! Introdução à Linguagem de Programação PROLOG Confira, no vídeo, uma breve apresentação sobre a linguagem declarativa PROLOG, uma das primeiras linguagens de programação declarativa que surgiu. Conteúdo interativo disponível na plataforma de ensino! Programação imperativa APRESENTAÇÃO O imperativo é o mais antigo dos paradigmas da computação e se consagrou como o mais utilizado e de maior sucesso, visto que a maioria das linguagens de programação implementam- no, mesmo que também implementem outros paradigmas como o orientado a objetos ou o estruturado, por exemplo. O paradigma imperativo alcançou sucesso também pelo fato de se adaptar ao modelo clássico de Von Neumann, em que o programa e seus dados são alocados na mesma memória, o que facilita o processamento das instruções pelo compilador. Nesta Unidade de Aprendizagem, você irá conhecer o que é a programação imperativa, como distinguir as linguagens de programação imperativa e exemplos de sua aplicação. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Explicar o que é a programação imperativa.• Distinguir as linguagens de programação imperativa.• Aplicar a programação imperativa.• DESAFIO O paradigma imperativo é o mais antigo dos paradigmas da computação e o que obteve, até então, o maior sucesso. Esse sucesso pode ser relacionado à própria arquitetura de processamento dos computadores. Conhecê-lo e saber como aplicá-lo é fundamental. Veja a seguinte situação: Você foi contratado como desenvolvedor em uma equipe de desenvolvimento para um novo projeto. Nesse projeto, o seu desafio será construir um sistema responsável por automatizar as rotinas de planejamento e controle da programação da linha de produção. As características do ambiente exigem que o programa execute rotinas de reprogramação da linha de produção, sem grande necessidade de interface gráfica, nem preocupações com integrações, por exemplo, e que rode em computadores cujos recursos de hardware são poucos, como memória e CPU. Então você sugere a implementação em uma determinada linguagem, após analisar as características do software e os requisitos de ambiente. a) Qual linguagem você sugere? b) Como você utilizaria a programação imperativa por meio dessa linguagem para atender a esse cenário? Lembre-se de justificar sua escolha. INFOGRÁFICO O paradigma de programação imperativo é o mais estabilizado e utilizado pela maioria das linguagens de programação. Ele se baseia no modo de funcionamento do computador, ou seja, é influenciado por sua arquitetura. Consequentemente, isso se reflete na execução sequencial baseada em comandos e no armazenamento de dados alteráveis, conceitos que são baseados na maneira pela qual computadores executam os programas em nível de linguagem de máquina. O termo “imperare”, do Latim, significa “comandar”. O paradigma imperativo foi predominante nas linguagens de programação, pois estas são mais fáceis de traduzir para uma forma adequada de execução na máquina. No Infográfico a seguir, você irá conhecer os principais conceitos que caracterizam uma linguagem de programação imperativa e as primeiras linguagens que implementaram esse paradigma. Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco CONTEÚDO DO LIVRO O paradigma de programação caracteriza-se por se basear no próprio funcionamento do computador, que, por sua vez, baseia-se no modelo de Von Neumman. Essa característica é perceptível no modo de instrução sequencial e alteração do estado de variáveis, conceitos fundados na forma como os computadores executam programas em nível de linguagem de máquina. Isso justifica certamente o grande sucesso desse paradigma e o grande número de linguagens de programação que implementam suas características. Na obra Paradigmas de programação, base teórica para essa Unidade de Aprendizagem, leia o capítulo Programação Imperativa e conheça um pouco mais sobre o paradigma imperativo, as principais características de linguagens de programação que implementam esse paradigma e alguns exemplos de aplicação. Boa Leitura. PARADIGMAS DE PROGRAMAÇÃO Fabricio Machado da Silva Programação imperativa Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Explicar o que é a programação imperativa. � Distinguir as linguagens de programação imperativa. � Aplicar a programação imperativa. Introdução O paradigma imperativo na computação tem em seu nome a semelhança com o padrão imperativo das linguagens naturais que expressam ordens. Portanto, linguagens de programação (LP), que implementam esse padrão, são caracterizadas por programas construídos a partir de algoritmos que expressam uma sequência de comandos a serem executados pelo computador para alcançar determinado resultado. O paradigma imperativo é o mais antigo dos paradigmas da com- putação e o que obteve, até então, o maior sucesso. Esse sucesso pode ser relacionado à própria arquitetura de processamento dos computadores. Neste capítulo, você entenderá do que se trata o paradigma im- perativo, algumas das linguagens mais utilizadas e um pouco da sua aplicação. Halissa Franco Paradigma imperativo O paradigma de programação imperativo surgiu na década de 1940, quando John von Neumann e colaboradores percebem que tanto um programa de computador como seus dados poderiam compartilhar a memória principal. Essa descoberta foi um conceito inovador, devido ao fato de que os primeiros computadores armazenavam seus programas fora da memória. Com a pos- sibilidade de armazenar um programa na memória, foi possível alcançar um novo patamar de versatilidade e computação. A arquitetura do modelo de von Neumann se tornou, então, a base do conceito do paradigma de programação imperativa, na qual a memória da máquina contém tanto as instruções do programa que está executando como os valores dos dados (armazenamento dos dados). Além disso, no centro dessa arquitetura, encontra-se outra característica clássica do paradigma imperativo: alterar o valor de um local de memória e destruir o seu valor anterior, ou seja, o conceito de atribuição. Segundo Tucker e Noonan (2009, p. 277): Já que elas surgiram do modelo de von Neumann-Eckert, todas as linguagens imperativas incluem a atribuição como um elemento central. Além disso, elas suportam declarações de variáveis, expressões, comandos condicionais, laços e abstração procedural. Em LP imperativas, as expressões são interpretadas conforme a recuperação de valores correntes de variáveis por meio de nomes que referenciam seus respectivos endereços na memória. A Figura 1 ilustra o exemplo clássico da estrutura do modelo de von Neumman e como programas em linguagens imperativas são executados pelo computador. Programação imperativa2 Halissa Franco Halissa Franco Figura 1. Arquitetura de von Neumann e o paradigma de LP imperativa. Fonte: Linguagem... (2018, documento on-line). Ainda utilizando como base a arquitetura de von Neumman, programas construídos em linguagens imperativas tem seus comandos executados na ordem em que aparecem na memória, embora os comandos condicionais e as ramificações possam alterar um pouco esse fluxo de execução.No início, os comandos de uma linguagem imperativa eram apenas abstrações simplifica- das de instruções em máquinas de von Neumman, padrão que englobavam comandos de atribuição, condicionais e ramificações. Boa parte dos computadores mais populares nos últimos anos foi projetada com base na arquitetura proposta por von Neumann. Nela, dados e programas são armazenados na mesma memória. A unidade central de processamento (UCP), que executa realmente as instruções, é separada da memória. 3Programação imperativa Halissa Franco Halissa Franco Halissa Franco Halissa Franco Dessa forma, podemos sintetizar que a fundamentação da programação imperativa se resume a três conceitos: � Estado de uma máquina, relacionado aos valores de um conjunto de variáveis. � Expressões, compostas pela relação entre esses valores ou o resultado de operações entre esses valores. � Comandos de atribuição e controle, que manipulam esses estados das variáveis. Em outras palavras, um programa escrito em uma linguagem imperativa é representado por um conjunto de dados que determinam o seu estado e, por meio da manipulação desses dados (leitura, criação de expressões e geração de novos valores), o seu estado vai sendo alterado até o resultado esperado ser alcançado. Linguagens de programação imperativas Agora, você verá um pouco mais sobre as características que definem se uma linguagem se enquadra no paradigma de programação imperativa e alguns exemplos de linguagens imperativas. Além das características já comentadas em relação à implementação de instruções e comandos que um programa em linguagem imperativa especifica para que o computador alcance determinado resultado, uma linguagem imperativa é classificada completa quanto a Turing quando possibilita a implementação de qualquer algoritmo que possa ser projetado (TUCKER; NOONAN, 2009). Ser completa quanto a Turing é uma característica que permite mensurar se uma linguagem consegue implementar qualquer situação, incluindo situações comuns que envolvam: � estruturas de controle; � entrada e saída de dados; � manipulação de exceções e erros; � abstração procedural; � expressões e atribuição; � suporte de bibliotecas para estrutura de dados. Programação imperativa4 Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Para definir melhor este conceito, vamos analisar a implementação dessas características do ponto de vista de duas linguagens imperativas, a linguagem C e a linguagem Ada. A linguagem C foi projetada inicialmente para ser implementada no sistema operacional UNIX, nos laboratórios Bell, por Ken Thompson e Dennis Ritchie, que participavam ativamente do desenvolvimento de um avançado sistema operacional que, ao contrário dos sistemas operacionais criados, estava sendo escrito em programming language one (PL/I) em vez de assembly (OKUYAMA; MILETTO; NICOLAO, 2014). Após o laboratório Bell desistir do projeto do sistema operacional, Thomp- son e Ritchie continuaram o desenvolvimento de um sistema de documentação, que seria independente de máquina e possibilitava a execução em minicompu- tadores baratos do final de 1960, nascia assim o sistema operacional UNIX. A linguagem C foi utilizada na construção desse sistema operacional, incial- mente baseada na linguagem basic combined programming language (BCPL) que não possuía tipo (OKUYAMA; MILETTO; NICOLAO, 2014). A partir disso, a linguagem C foi amplamente utilizada, principalmente em ambientes acadêmicos, tendo, inclusive, impacto no surgimento de inú- meras outras linguagens conhecidas atualmente, como Java, Python e C++ (PINHEIRO, 2012). A linguagem C possui comandos de atribuição, sequência e os condicionais if e switch, laços while, for e do e chamadas a funções. Com relação à estrutura de dados, a linguagem C permite trabalhar com matrizes, ponteiros, estrutu- ras (registros) e tipos de dados de união. Como uma linguagem imperativa, o C não possui: � iteradores; � manipulação de exceções; � sobrecarga; � genéricos. Veja um exemplo de código em C que define uma estrutura com nome, ano de matrícula, curso e média de entrada de um aluno e, logo após, implementa uma função de receber como parâmetro um apontador para uma estrutura do tipo definido, criando dinamicamente uma estrutura. Para a nova estrutura, devem ser copiados os dados da estrutura recebida. A função retorna o apon- tador para a nova estrutura ou NULL, caso não consiga reservar memória. 5Programação imperativa Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco typedef struct aluno { char nome[40]; int ano; char curso[40]; float media; } aluno; aluno * copia _ aluno( aluno * a) { aluno *t; t=(aluno *)malloc(sizeof(aluno)); if (t==NULL) return t; *t = *a; /* ou: strcpy(t->nome,a->nome); t->ano = a->ano; strcpy(t->curso,a->curso); t->media = a->media; */ return t; } Outro bom exemplo de linguagem imperativa, é a linguagem Ada. Ela foi desenvolvida no final da década de 1970 pelo departamento de defesa norte- -americano para ser usada em grandes sistemas de controle e comando e em sistemas embarcados em tempo real. Caracteriza-se por ser uma LP imperativa de alto nível e baseada em Pascal. Seu principal projetista foi o francês Jean Ichbiah. A linguagem foi pa- dronizada pela American National Standards Institute (ANSI) em 1983 e, em 1985, pela International Organization for Standardization (ISO). Um fato curioso acerca da linguagem Ada é que, em 1995, a ISO padronizou uma versão melhorada chamada de Ada 95, que se tornou a primeira LP orientada a objeto (OO) padronizada internacionalmente (TUCKER; NOONAN, 2009). Programação imperativa6 A estrutura básica de um programa em Ada é a seguinte: -- Declarações de bibliotecas Procedures nome _ do _ programa is -- Declarações de variáveis begin -- Corpo do programa end nome _ do _ programa; Pela estrutura demonstrada, você pode perceber as características do paradigma imperativo na linguagem. Vamos analisar o seguinte: � Linguagens imperativas permitem a troca de valor de variáveis no trecho do código do programa, logo após a sua criação é designado um espaço para a declaração das variáveis. � Linguagens imperativas permitem que as variáveis sejam manipuladas e as instruções e os comandos sejam repassados para o computador, explicando como fazer para chegar a um determinado resultado, logo após o comando begin é necessário especificar o que o programa deverá fazer. Desenvolvendo e aplicando programação imperativa Para ajudar a elucidar o conceito de programação imperativa, analise o código em Ada, apresentado na Figura 2. Esse exemplo demonstra a aplicação do paradigma imperativo por meio da criação de um algoritmo que escreve a tabuada. 7Programação imperativa Halissa Franco Halissa Franco Figura 2. Algoritmo em Ada que escreve a tabuada. Fonte: Leal (2012, documento on-line). No algoritmo apresentado na Figura 2, você pode perceber que a linguagem Ada possibilita outros recursos de linguagens imperativas, como os comandos interativos, nesse caso representados pelo comando FOR. Segundo Tucker e Noonan (2009), as linguagens com a maior influência sobre Ada foram Algol e Pascal. Exemplos dessa influência abundam: desde o uso do símbolo := para atribuição até o uso de begin-end para blocos. Sintaticamente, as duas maiores diferenças dessas linguagens predecessoras foram o uso desímbolos de término únicos para estruturas compostas; e o uso do ponto e vírgula como um símbolo de término de comando, em vez de um separador de comandos. Podemos também perceber que a sintaxe da linguagem Ada exige bem mais comandos do que a linguagem C. O exemplo da escrita da média demanda bem mais comandos em Ada do que seria necessário na linguagem C. Programação imperativa8 Vamos, agora, comparar por meio do exemplo demonstrado na Figura 3, a sintaxe de um algoritmo em linguagem C, que consiste em ler números, um de cada vez, e, então, contar e somar. Por último, o algoritmo verifica se o número analisado é o novo número mínimo ou máximo da lista. Perceba que a sintaxe usa comandos imperativos e uso de variáveis. Figura 3. Algoritmo em C que faz contagem, soma e análise de números em sequência. Fonte: Tucker e Noonan (2009, p. 288). O programa usa uma declaração de atribuição múltipla para inicializar sum e ct e, posteriormente, min e max. Atribuições condicionais são usadas para atualizar min e max. A entrada e a saída que utilizam códigos de formatos também são utilizadas. Para finalizar, analise um exemplo em outra linguagem imperativa, o Perl. Segundo Tucker e Noonan (2009, p. 296), “Perl é uma linguagem de scripting amplamente usada, que é uma linguagem de alto nível interpretada em tempo de execução em vez de compilada em linguagem de máquina”. 9Programação imperativa O exemplo da Figura 4 é um script em Perl que envia as notas de alunos por e-mail; esse é um bom exemplo de casos em que linguagem de scripting imperativa Perl é empregada. Perceba, também a utilização das características imperativas no código. Figura 4. Script em Perl que envia por e-mail as notas de alunos. Fonte: Tucker e Noonan (2009, p. 304). Em todos os exemplos, é perceptível, apesar das diferenças e aplicações das linguagens, que todas seguem os princípios do paradigma imperativo, deixando clara a sua importância para a computação. Programação imperativa10 Veja, no link a seguir, alguns vídeos nos quais são feitas comparações entre os para- digmas imperativo, funcional e OO. https://qrgo.page.link/jtDar LEAL, C. Linguagem de Programação Ada. Mostre ao Mundo, Campinas, 19 out. 2012. Disponível em: http://www.mostreaomundo.com.br/2012/10/linguagem-de-progra- macao-ada.html. Acesso em: 28 ago. 2019. LINGUAGEM de programação: classificações. Universidade da Tecnologia, [S. l.], 16 fev. 2018. Disponível em: https://universidadedatecnologia.com.br/linguagem-de-progra- macao-classificacoes/. Acesso em: 28 ago. 2019. OKUYAMA, F. Y.; MILETTO, E. M.; NICOLAO, M. Desenvolvimento de software I: conceitos bá- sicos. Porto Alegre: Bookman, 2014. 236 p. (Série Tekne; Eixo Informação e Comunicação). PINHEIRO, F. A. C. Elementos de programação em C: em conformidade com o padrão ISO / IEC 9899. Porto Alegre: Bookman, 2012. 548 p. TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2. ed. Porto Alegre: AMGH, 2009. 630 p. Leituras recomendadas EDELWEISS, N.; LIVI, M. A. C. Algoritmos e programação: com exemplos em Pascal e C. Porto Alegre: Bookman, 2014. 476 p. (Série Livros Didáticos Informática UFRGS). LEDUR, C. L. Desenvolvimento de sistemas com C#. Porto Alegre: SAGAH, 2018. 268 p. MACHADO, R. P.; FRANCO, M. H. I.; BERTAGNOLLI, S. C. Desenvolvimento de software III: programação de sistemas web orientada a objetos em Java. Porto Alegre: Bookman, 2016. 220 p. (Série Tekne; Eixo Informação e Comunicação). MILETTO, E. M.; BERTAGNOLLI, S. C. Desenvolvimento de software II: introdução ao de- senvolvimento web com HTML, CSS, JavaScript e PHP. Porto Alegre: Bookman, 2014. 276 p. (Série Tekne; Eixo Informação e Comunicação). NICOLETTI, M. C. A cartilha Prolog. São Carlos: Edufscar, 2003. 124 p. (Série Apontamentos). SEBESTA, R. W. Conceitos de linguagem de programação. 11. ed. Porto Alegre: Bookman, 2018. 758 p. 11Programação imperativa DICA DO PROFESSOR Certamente você já desenvolveu, em alguma linguagem de programação que implementou, o paradigma imperativo, ou, então, se ainda não implementou, certamente irá implementar. Apesar de seu grande sucesso e das características que o tornam um paradigma estável, existem vantagens e desvantagens que todo profissional precisa conhecer. Na Dica do Professor de hoje, conheça as principais características do paradigma imperativo e suas principais vantagens e desvantagens. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS 1) O paradigma de programação imperativa é largamente caracterizado pelo fato de seus programas expressarem instruções e comandos que o computador deve executar para alcançar os objetivos. Outra característica importante do paradigma de programção imperativa é: A) Mutação de estado (alterar os valores das variáveis). B) Costuma expressar o código principalmente por meio de funções. C) Implementa recursos de herança e polimorfismo entre as classes. D) As expressões são compostas por símbolos e letras. E) Caracteriza-se pela implementação de subprogramas ou modularização de programas. As linguagens de programação imperativa podem ser classificadas como completas 2) quanto a Turing. Analise as questões e assinale a que representa uma síntese do que significa ser completa quanto a Turing. A) Possibilitar a implementação de recursos de reutilização de código. B) Apresentar sintaxe semelhante a linguagens de baixo nível. C) Apresentar recursos que permitem expressar qualquer algoritmo computacional. D) Possibilitar que os dados de um programa fiquem fora da memória do computador. E) Permitir tratar todas as exceções de código em um algoritmo. 3) As linguagens de programação imperativa são também chamadas de linguagens procedurais devido ao fato de permitirem uma certa estruturação do código construído. Acerca desse conceito, assinale a alternativa que apresenta uma desvantagem dessa característica: A) Falta de recursos de implementação de código recursivo. B) Dificuldade em legibilidade do código. C) Falta de recursos de comandos interativos. D) Falta de flexibilidade dado o caráter sequencial das instruções. E) Dificuldade de disponibilidade de linguagens de programação no mercado. A programação em linguagem imperativa se caracteriza por expressar a chegada a um resultado e não como. Analise o código abaixo, acerca de um o trecho do código 4) de um programa em linguagem C, e assinale a alternativa correta sobre a característica do paradigma imperativo que é possível perceber. function join(array) { var text = ""; for (var i = 0; i < array.length; i++) { text += array[i]; } return text; } A) Uso de função. B) Instruções explícitas. C) Comando incremental. D) Reuso código. E) Código enxuto. 5) Uma linguagem de programação pode dar suporte a mais do que um só paradigma de programação. Nesse contexto, analise as alternativas a seguir e assinale a que apresenta as características que justifiquem que uma linguagem forneça suporte à implementação do paradigma imperativo. A) Funções, estruturas de controle e abstração procedimentos. B) Variáveis, implementação lógica e abstração de procedimentos. C) Variáveis, atribuição e execução sequencial de procedimentos. D) Alto nível de abstração e implementação sequencial de instruções. E) Variáveis, estruturas de controle e alta abstração. NA PRÁTICA A linguagem de programação PASCAL é um bom exemplo de linguagem imperativa, muito utilizada, na década de 1990, em aplicações comerciais e também em ambientes acadêmicos, sendo inclusive, em muitos casos, juntamente com o C, a linguagem de introdução aos estudantes ao ambiente de programação. A utilização da linguagem PASCAL para soluções que necessitam de instruções sequenciais para se chegar a um determinado resultado, ou seja, soluções que necessitam de uma implementação em linguagem imperativa, é uma boa alternativa. Veja, Na Prática, um exemplo de como ocorre a criação de um programaem PASCAL que identifica se um número informado é um número primo. Conteúdo interativo disponível na plataforma de ensino! SAIBA + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Diferença entre as programações Orientação-objetos, Imperativa e Funcional Neste site, leia este excelente material que faz um comparativo da programação imperativa com outros paradigmas de programação. Conteúdo interativo disponível na plataforma de ensino! Introdução à lógica de programação imperativa Para saber mais, assista a esse vídeo, que mostra uma introdução à lógica de programação imperativa. Conteúdo interativo disponível na plataforma de ensino! Introdução a Lógica de programação Imperativa Conteúdo interativo disponível na plataforma de ensino! Programação estruturada APRESENTAÇÃO A programação estruturada é um paradigma de programação cujo princípio é a construção de códigos legíveis, de fácil entendimento e manutenção. É um paradigma independente de linguagem de programação que fez grande sucesso entre os desenvolvedores por estabelecer uma disciplina rígida de padronização e construção de programas. Nesta Unidade de Aprendizagem, você vai compreender os princípios e fundamentos da programação estruturada, vai ainda conhecer algumas linguagens de programação que implementam esse paradigma e a sua aplicação em casos reais. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Reconhecer a programação estruturada.• Descrever as linguagens de programação estruturada.• Aplicar a programação estruturada.• DESAFIO As linguagens de programação estruturada surgiram como uma nova proposta às antigas linguagens, as quais demandavam desvio de fluxo em um código com a utilização dos comandos GOTO, constituindo casos em que o fluxo às vezes tornava complexa a análise de código. Esse tipo de comando era muito utilizado para resolver situações de desvio de fluxo em linguagens como BASIC, por exemplo. Assim, considere a seguinte situação: Você trabalha em uma equipe de desenvolvimento e recebeu da sua gerência o desafio de reescrever um sistema atual em BASIC para a linguagem C. Ao analisar o código atual, você percebe problemas característicos da implementação que justificam a migração para uma nova linguagem, uma vez que eles tornam o código difícil de manter e interpretar. A seguir, veja o código: Considerando a situação apresentada: a) Identifique problemas no código. b) Justifique como a implementação estruturada em C conseguiria solucionar esses problemas. INFOGRÁFICO Nos anos 70, em decorrência da crise do software das décadas antecessoras, surgiram avanços na linguagem de programação, como a programação estruturada. A programação estruturada, portanto, foi a consequência de melhorias no padrão de desenvolvimento de software. A seguir, no Infográfico, veja, de forma sintetizada, alguns eventos de melhoria nas linguagens que surgiram nessa época e que estão relacionados com a programação estruturada. Halissa Franco Halissa Franco Halissa Franco Halissa Franco CONTEÚDO DO LIVRO A crise do software, cujo ápice foi na década de 60, fez com que a indústria do ramo desenvolvesse novas formas de construção de software voltadas a uma fácil manutenção e entendimento dos programas de computadores. Neste cenário, surgem novas formas de se estruturar o código e outras linguagens para suportar novas estruturas de programação. Assim, surgem os conceitos que formariam os fundamentos do paradigma de programação estruturada. Leia o capítulo Programação estruturada, da obra Paradigmas da Programação, e aprenda o significado de programação estruturada, vendo também algumas linguagens percursoras do paradigma e como são implementados programas com os conceitos de programação estruturada. Boa leitura. PARADIGMAS DE PROGRAMAÇÃO Fabricio Machado da Silva Programação estruturada Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Reconhecer a programação estruturada. � Descrever as linguagens de programação estruturada. � Aplicar a programação estruturada. Introdução O paradigma de programação estruturada se refere a construção de programas que permitem uma clareza lógica na implementação de seu código. Esse paradigma, implementado por muitas linguagens, como Pascal, C, Fortran e Cobol, foi muito utilizado em programas nas décadas de 1970 e 1980. A programação estruturada tem como princípio a estruturação do código por intermédio de apenas três estruturas de controle básicas. Neste capítulo, você entenderá melhor os conceitos da programação estruturada, a sintaxe de algumas das linguagens que utilizam esse tipo de programação e a sua aplicação em alguns programas. Programação estruturada Para entender a motivação que originou a programação estruturada, é funda- mental lembrar que tudo começou com a famosa crise do software na década de 1960. Nessa época, Edsger W. Dijkstra, por meio do seu artigo A Case against the GO TO Statement, criticou o uso excessivo desse comando na programação. O comando GO TO, amplamente utilizado pelas linguagens de programação da época, trata-se de uma estrutura de controle para permitir saltos de instruções. Sua ampla utilização pelos programadores gerava um número considerável de programas praticamente impossíveis de serem entendidos, e a consequência disso era a dificuldade de manutenção dos programas. Halissa Franco Halissa Franco Halissa Franco Essa declaração foi originalmente essencial para a programação no Basic, pois os intérpretes mais antigos apenas permitiam que as instruções if fossem executadas em uma linha e não tinham manipulação mais avançada dos loops for ou while. Nas versões modernas do Basic, você verá o GOTO, grafado como uma única palavra, usado apenas para retornar ao topo de um loop principal (SEBESTA, 2018, p. 267). No exemplo a seguir, você pode observar a implementação do comando GOTO no Basic, que fica lendo um valor na tela e retornando à instrução para ler o novo número. 10 READ R 20 PRINT "R ="; R; 30 A = 3.14*R^2 40 PRINT "AREA ="; A 50 GOTO 10 Segundo Tucker e Noonan (2009, p. 168), “A controvérsia do comando Go To começou com uma nova carta de Dijkstra, desta vez para o editor da Communications of the ACM, intitulada Go To Statement Considered Harmful (Declaração Go To considerada prejudicial). Com essa carta, a revolução da programação estruturada estava lançada. A partir de então, inicia-se uma revolução na forma de construção de códigos para programas, que seria a base para o surgimento da programação estruturada. De modo geral, esse paradigma de programação, com o objetivo de corrigir os problemas citados, embasava o projeto de programas com prin- cípios básicos por meio da utilização de apenas três estruturas de controle: � Sequência — implementa os passos de processamento necessários para a descrição de qualquer programa, por exemplo, um segmento de código em que é enviado o comando ''faça tarefa 1'' e, logo após, o comando ''faça tarefa 2'', pode ser representado com a sequência de dois retângulos, ou em um pseudocódigo que seria denotado pela expressão das duas tarefas uma após a outra. � Seleção — possibilita que o fluxo de processamento seja selecionado com base em sentenças lógicas, para isso são usadas duas formas de condicional; a primeira seria o uso da condicional if then, e a segunda, switch. � Iteração — possibilita que segmentos do programa tenham a sua exe- cução repetida até que uma determinada cláusula seja satisfeita. São implementados por comandos while ou for, por exemplo. Programação estruturada2 Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco Halissa Franco
Compartilhar