Paradigma Orientado a EventosDiferentemente de paradigmas como Estruturado e Funcional, o paradigma Orientado a Eventos esta mais para uma tecnica de programacao do que para um paradigma propriamente dito. A Wikipedia define este paradigma como aquele em que o fluxo do programa e determinado por eventos.Nota: Entenda-se por evento, qualquer interacao do usuario com o programa, como pressionar de alguma tecla ou movimentacao no mouse, alem de mensagens de outros programas ou threads.A mesma fonte ainda define o paradigma como uma tecnica de arquitetura onde a aplicacao possui uma iteracao principal, que possui duas areas bem definidas: a deteccao de eventos e o tratamento dos mesmos. Para termos uma nocao do que isto significa, tomemos o seguinte exemplo escrito em Python e PyGTK, que cria uma janela com um botao, que se fecha quando este botao e clicado.#!/usr/bin/env python"""Implements simple operations on PyGTK.Hello World is a simple Python program whichuses PyGTK to show a window with a Hello Worldbutton. This window closes when button is clicked.It's an adaptation of the original code in PyGTK tutorial"""import pygtkpygtk.require('2.0')import gtkclass HelloWorld: def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy) self.window.set_border_width(10) self.button = gtk.Button("Hello World") self.button.connect("clicked", self.hello, None) self.button.connect_object("clicked", gtk.Widget.destroy, self.window) self.window.add(self.button) self.button.show() self.window.show() def run(self): gtk.main() def destroy(self, widget, data=None): print "destroy signal occurred" gtk.main_quit() def delete_event(self, widget, event, data=None): print "delete event occurred" return False def hello(self, widget, data=None): print "Hello World"# # Main# if __name__ == "__main__": hello = HelloWorld() hello.run()Listagem 1. Exemplo de codigo orientado a eventos.Na listagem 1, temos como exemplo de loop principal, a funcao run(). Nas linhas 26, 27, 32 e 33, temos a ligacao dos eventos (i.e., signals) com os seus respectivos tratadores (i.e., callbacks). Estes tratadores sao definidos na forma de funcoes e quando um evento e detectado em um componente do programa, o mesmo procura no seu codigo pelo tratador especifico daquele evento, redirecionando o fluxo de execucao para o mesmo, caso exista. No caso, quando o botao for clicado, por exemplo, o fluxo de execucao do programa sera desviado para o metodo hello() (linha 32), que imprimira uma mensagem na tela. Repare que este mesmo botao possui outro evento associado a ele (linha 33), que executa o metodo de destruicao da janela. Assim, ao clicar no botao, uma mensagem e impressa e a janela se fecha.Vantagem e DesvantagemUma vantagem da programacao orientada a eventos e que o conceito de eventos facilita a criacao e manipulacao de interfaces graficas para programas. A desvantagem e que o entendimento deste paradigma e complicado para iniciantes, pois a maioria esta acostumada a programas sequenciais, com uma unica entrada e uma unica saida.Programacao Orientada a AspectosA Programacao Orientada a Aspectos (POA) objetiva separar semanticamente o codigo, como forma de torna-lo mais legivel e facil de se manter que nos outros paradigmas. Ao se programar Orientado a Objetos, o programador tenta encapsular varias caracteristicas comuns dentro de classes, que sao instanciadas ao longo do programa, criando os objetos. Ja na na POA, o objetivo e aglomerar essas chamadas, de forma com que todos os aspectos do programa sejam codificados juntos.Este