TÍTULO: UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY



Documentos relacionados
Ruby. Simplicidade e produtividade

Ruby e Ruby on Rails

Luciano Ramalho setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Orientação a Objetos

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

Programação Orientada a Objeto em Python

Começando com Ruby on

Objetivos do mini curso. Conhecer a linguagem. Noção de programação utilizando Python. Aprender o báscio.

Linguagem de Programação III

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Introdução a Java. Hélder Nunes

Orientação a Objetos

Informática I. Aula 6. Aula 6-12/09/2007 1

Programação de Computadores - I. Profª Beatriz Profº Israel

Python. Introdução à Programação SI1 - BSI

Análise e Projeto de Sistemas

Sistemas de Banco de Dados Aspectos Gerais de Banco de Dados

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

PROGRAMA DE DISCIPLINA

VisTrails. Fernando Seabra Chirigati Aluno de Engenharia de Computação e Informação COPPE/UFRJ fernando_seabra@cos.ufrj.br

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Clique no botão para iniciar o treinamento TAREFAS CONTRAT OS RELACIO NAMENT CONFIGURAÇÕES. A ideia é usar os próprios ícones do CGW.

Implementando uma Classe e Criando Objetos a partir dela

Guião de Introdução ao Eclipse IDE Índice

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

AUTOR(ES): IANKSAN SILVA PEREIRA, ALINE GRAZIELE CARDOSO FEITOSA, DANIELE TAMIE HAYASAKA, GABRIELA LOPES COELHO, MARIA LETICIA VIEIRA DE SOUSA

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

COMPILADORES E INTERPRETADORES

Introdução à Linguagem

QualiQuantiSoft Versão 1.3c

AULA 12 CLASSES DA API JAVA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes alba.lopes@ifrn.edu.br

História. Nasceu em 1993, numa discussão entre Yuhikiro Matsumoto e um colega.

Prof. Marcelo Henrique dos Santos

Curso de Aprendizado Industrial Desenvolvedor WEB

Projeto de Software Orientado a Objeto

Desenvolvendo Websites com PHP

LINGUAGEM ORIENTADA A OBJETOS

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

UNIVERSIDADE FEDERAL DO PARANÁ

PROGRAMA DE DISCIPLINA

Introdução à Tecnologia Web. Tipos de Sites. Profª MSc. Elizabete Munzlinger

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética

Java. Marcio de Carvalho Victorino

Capítulo 11. Conceitos de Orientação a Objetos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Linguagens de Programação. Linguagens de Script. Carlos Bazilio

estiglp-11/ csharp e Fsharp 1 Relatório Linguagens de programação 11/12 João Caixinha nº5946

FRWTC800 - Desenvolvimento Web com Ruby on Rails

4 O Workflow e a Máquina de Regras

Minicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso:

Análise de Dados do Financeiro

Introdução à Programação

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

Primeiros passos das Planilhas de Obra v2.6

NetBeans. Conhecendo um pouco da IDE

Aplicação Prática de Lua para Web

Manual do Painel Administrativo

UNICE Ensino Superior Linguagem de Programação Ambiente Cliente Servidor.

Professor: Douglas Sousa Cursos de Computação

Palavras-chave: i3geo, gvsig, Mapserver, integração, plugin. Contato: ou

Python Intermediário. terça-feira, 4 de agosto de 15

Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a Classes estimulam projeto centrado em dados:

Diferenças da versão 6.3 para a 6.4

Algoritmos e programação

Programação Web Prof. Wladimir

ATIVIDADES PRÁTICAS SUPERVISIONADAS

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

Criando & Consumindo um WebService com ASP.NET 2.0 Publicado em: 25 de Agosto de 2007 Por Herman Ferdinando Arais

Algoritmos e Programação I

Informática I. Aula 5. Aula 5-13/05/2006 1

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

O que há de novo. Audaces Idea

HTML / JAVASCRIPT. A versão atual é o HTML5 (seus predecessores imediatos são HTML 4.01, XHTML 1.1, etc.).

Linguagem de Programação Procedural (VB) Prof. MSc Eng Marcelo Bianchi AULA 01 - INTRODUÇÃO AO VB

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

5. Métodos ágeis de desenvolvimento de software

Um Processo para Desenvolvimento de Aplicações Web Baseado em Serviços. Autores: Fábio Zaupa, Itana Gimenes, Don Cowan, Paulo Alencar e Carlos Lucena

Conceitos básicos de programação

Primeiro contato com JavaScript

PROGRAMANDO EM C# ORIENTADO A OBJETOS

FATEC Cruzeiro José da Silva. Ferramenta CRM como estratégia de negócios

GERAÇÃO DE RELATÓRIOS

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Figura 1 - Arquitetura multi-camadas do SIE

FBV - Linguagem de Programação II. Um pouco sobre Java

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

CAPÍTULO 35 Como utilizar os componentes ColdFusion

NOVIDADES DO JAVA PARA PROGRAMADORES C

Dadas a base e a altura de um triangulo, determinar sua área.

Framework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C#

Transcrição:

TÍTULO: UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY CATEGORIA: EM ANDAMENTO ÁREA: CIÊNCIAS EXATAS E DA TERRA SUBÁREA: COMPUTAÇÃO E INFORMÁTICA INSTITUIÇÃO: FACULDADE ANHANGUERA DE TAUBATÉ AUTOR(ES): LUCAS FURTADO DE OLIVEIRA, RODRIGO VITTORAZO ORIENTADOR(ES): FERNANDO SALLES CLARO

Resumo A proposta para este projeto de pesquisa é apresentar a técnica de desenvolvimento de software denominada Metaprogramação, utilizando as linguagens de altíssimo nível e de características dinâmicas Python e Ruby. Linguagens dinâmicas (também denominadas linguagens de script) tem como fundamentos as habilidades de que suas classes e objetos consigam ler seus atributos (Introspecção ou Reflexão) e de alterar o comportamento de seus objetos em tempo de execução (Interseção), sem estas características, não seria possível a Metaprogramação. A utilização de linguagens de programação com estas características no desenvolvimento de softwares vem se destacando quando se deseja maior produtividade e menor curva de aprendizagem. Para o desenvolvimento do trabalho, será realizado uma pesquisa do tipo exploratória através de um levantamento bibliografia, discutindo conclusões e agregando ideias de pesquisas realizadas ao longo do tempo por estudiosos da área de ciências da computação, obtendo assim uma compreensão mais clara sobre como se deve aplicar a esta técnica de desenvolvimento de softwares. Este estudo tem como objetivo principal definir o que é Metaprogramação, a importância de seu estudo, além de aplica-lá através de exemplos, mostras diferenças como sintaxe e estrutura ao emprega-lá em linguagens diferentes, e avalia-lá, pontuando suas vantagens e desvantagens. Introdução A Metaprogramação pode ser definida como código que escreve código, ou seja, um programa que pode criar ou alterar outros programas ou a si mesmo. Esta técnica vem sendo utilizada para o aumento de produtividade no desenvolvimento de software, pois evita que partes do código fonte sejam escritos diretamente pelo programador. Linguagens com essas características de manipular código fonte são denominadas Metalinguagens. Exemplos são Lisp, Python e Ruby, que possuem recursos como reflexão e a própria linguagem como um objeto de primeira classe. Metaprogramas podem ser classificados como estáticos, por exemplo os compiladores e pre-processadores, que são executados antes do código que manipulam, e dinâmicas, por exemplos frameworks como Ruby on Rails e Django, em que a execução e modificação no código são realizadas em conjunto.

Objetivo O objetivo deste trabalho é compreender o que é a metaprogramação, agrupar conhecimentos, ideias, estudos e experiencias, destacando vantagens, desvantagens, formas de aplicação, avaliações de quando aplicar esta técnica, críticas e dicas, utilizando os recursos disponíveis presentes nas linguagens de programação Python e Ruby. Metodologia Para o desenvolvimento do trabalho proposto, a metodologia consiste em uma pesquisa do tipo exploratória, realizando um levantamento bibliográfico por meio de livros e artigos de autores famosos no meio do desenvolvimento de software, como Luciano Ramalho, Fabio Akita, Dave Thomas, Guido van Russum e Yukihiro Matsumoto. A pesquisa também se baseia na interpretação das ideias propostas por estes pesquisadores, a fim de agrupá-las para a resolução do mesmo problema. Desenvolvimento A Metaprogramação se baseia no fato de um software poder escrever ou manipular outros softwares (compiladores). Linguagens com essa características são denominadas metalinguagens, já a linguagem do programa manipulado é denominada linguagem objeto. Metaprogramas também podem se referir a programas que gerem ou manipulam seu próprio código, ou seja, a metalinguagem e a linguagem objeto são a mesma linguagem. Estas características muitas vezes é denominada reflexão, e são mais comuns em linguagens de alto nível onde não há uma separação exata entre o tempo de compilação e execução, como Python e Ruby. Python é uma linguagem de programação desenvolvida por Guido van Rossum em 1991, a motivação para criação desta linguagem foi a necessidade de uma linguagem de alto nível para um projeto de sistema operacional chamado de Amoeba. Segundo Rossum, o desenvolvimento na linguagem C das ferramentas de administração do projeto estava demorando demais, e a linguagem não funcionaria por uma serie de rações na Bourne Shell do sistema operacional. Então houve a carência de uma linguagem que pudesse fazer uma ligação entre a linguagem C e a Shell do sistema operacional.

Ruby é uma linguagem de programação orientada a objeto desenvolvida por Yukihiro Matsumoto em 1993 e apresentada ao publico somente em 1995. Ficou conhecida como Matz. É uma linguagem de simples compreensão e leitura, que possibilita o desenvolvimento e manutenção em um curto periodo de tempo. Um dos exemplos mais comuns de código escrevendo código esta na forma como são definidos os métodos acessores em Ruby, não precisamos definir cada método getter e setter, podemos utilizar o método de classe attr_accessor. >>> Class Person >>> attr_accessor :name >>> p = Person.new >>> p.name = "lucas" >>> puts p.name => "lucas" Em Python, assim como no Ruby, tudo é um objeto, incluindo classes, como pode ser visto no exemplo a seguir, demonstrando que a classe str do Python é na verdade um objeto do tipo type : >>> type(str) <type 'type'> Podemos também inspecionar um elemento, visualizando seus métodos e atributos em tempo de execução: #Exemplo em Python >>>dir(int) [' abs ', ' add ', ' and ', ' class ', ' cmp ', ' coerce ', ' delattr ', ' div ', ' divmod ', ' doc ', ' float ', ' floordiv ', ' format ', ' getattribute ', ' getnewargs ', ' hash ', ' hex ', ' index ', ' init ', ' int ', ' invert ', ' long ', ' lshift ', ' mod ', ' mul ', ' neg ', ' new ', ' nonzero ', ' oct ', ' or ', ' pos ', ' pow ', ' radd ', ' rand ', ' rdiv ', ' rdivmod ', ' reduce ', ' reduce_ex ', ' repr ', ' rfloordiv ', ' rlshift ', ' rmod ',

' rmul ', ' ror ', ' rpow ', ' rrshift ', ' rshift ', ' rsub ', ' rtruediv ', ' rxor ', ' setattr ', ' sizeof ', ' str ', ' sub ', ' subclasshook ', ' truediv ', ' trunc ', ' xor ', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real'] Neste exemplo, utilizando o method helper dir para retornas todos os métodos da classe int, que em Python representa números inteiros. Métodos Além desses recursos, os objetos são abertos, ou seja, podemos modificar seu comportamento. Como exemplo o script abaixo modificamos o comportamento de subtração de inteiros em Ruby, agora realizando adição: #Código em Ruby >>1 + 1 2 >>class Fixnum >> def +(other) >> self - other >> end >>end >>1 + 1 => 0 Podemos definir novos métodos e comportamentos para um determinado objeto, não afetando outros que foram instanciados a partir da mesma classe: >>> a = "string" => "string" >>> a.say_hello NoMethodError: undefined method `say_hello' for "string":string from (irb):3 from /usr/bin/irb:12:in `<main>' >>> def a.say_hello

>>> "Hello" >>> a.say_hello => "Hello" >>> "other string".say_hello NoMethodError: undefined method `say_hello' for "other string":string from (irb):8 from /usr/bin/irb:12:in `<main>' Considerando as afirmações anteriores, levar o dinamismo a um novo nível. No próximo exemplo, estamos criando um novo tipo de objeto de adiciona um novo método a outros objetos: >>> class Student; end >>> class Teacher >>> def teach(student) >>> def student.writing >>> puts "writing" >> student = Student.new >>student.writing NoMethodError: undefined method `writing' for #<Student:0x00000000e75568> from (irb):31 from /usr/bin/irb:12:in `<main>' >> teacher = Teacher.new >> teacher.teach(student) >> studend.writing => writing Outra característica interessante em Ruby esta na forma como os métodos de um objeto são invocados, são apenas chamadas por referencias passando como

argumento o nome do método desejado. Assim, podemos invocar métodos dinamicamente utilizando outro método especial send: >>> 12.to_s => "12" >>> 12.send :to_s => "12" Não bastando todo este flexibilidade, podemos definir construir as chamadas de métodos dinamicamente, podemos utilizar o método especial method_missing. Este método vai intercepta chamadas de métodos que não existem, possibilitando adicionar funcionalidades de acordo com as necessidades. >>> class Person >>> def method_missing(method, *args) >>> message = method.to_s.split("_") >>> puts message.last if message.first == "say" >>> person = Person.new >>> person.say_hello => hello >>> person.say_world => world Resultados Preliminares Com a pesquisa realizada foi possível obter experiencia em técnicas de Metaprogramação através da exploração das linguagens Python e Ruby, capacitando os leitores há aplicar os estudos levantados por este trabalho em seus projetos, independente de seus tamanhos. Outra vantagem obtida foi mostrar a importância da Metaprogramação no desenvolvimento de software, pois seu conhecimento é de grande importância para a utilização de frameworks como Ruby e Django.

Também foi constatado que a Metaprogramação deve ser usada com moderação e sabedoria, apesar de uma técnica poderosa, o codigo criado pode se tornar difícil de ler, entender e manter. Finalmente, foi possível definir o conceito de Metaprogramação de forma clara, habilitando leitores a aplicá-los em outras linguagens além de Python e Ruby. Fontes Consultadas BORGES, Luiz Eduardo. Python para Desenvolvedores. 2. ed. Rio de Janeiro: Edição do Autor, 2010. LUTZ, Mark; ASCHER, David. Aprendento Python: Programação orientada a objetos. 2. ed. Porto Alegre: O'reilly, 2007. THOMAS, Date; FOWLER, Chad; HUNT, Andy. Programming Ruby 1.9: The Pragmatic Programmers Guide. Dallas: The Pragmatic Programmes, 2010. THOMAS, Dave; HANSSON, David Heinemeier; BREEDT, Leon. Desenvolvimento Web ágil com Rails. 2. ed. Porto Alegre: Bookman, 2008. URUBATAN, Rodrigo. Desenvolvimento Fácil e Rápido de Aplicações Web. 2. ed. São Paulo: Novatec, 2012.