Você está na página 1de 4

Programao Estruturada versus Programao Orientada a Objetos

25.1.09

A Wikipdia define a programao imperativa como umparadigma que descreve a computao como aes (comandos) e estados (variveis) de um programa. O nome do paradigma,Imperativo, est ligado ao tempo verbal imperativo, onde o programador diz ao computador: faa isso, depois isso, depois aquilo... Este paradigma de programao se destaca pela simplicidade, uma vez que todo ser humano, ao se programar, o faz imperativamente, baseado na ideia de aes e estados, quase como um programa de computador.

Programao Estruturada
Em linguagens puramente imperativas, como Assembly, muito fcil o programador criar cdigos de difcil leitura, pois esse tipo de linguagem possui o que se chama de saltos(jumps) em sua estrutura. Estes saltos funcionam da seguinte forma: o programador define uma marcao (label) no cdigo e depois, a partir de qualquer parte do programa, ele pode executar um desvio de fluxo de execuo (salto) para aquela marcao. Pode ser que primeira vista isso no tenha problema, contudo, na depurao do cdigo, o programador fica em apuros com tantas marcaes e saltos, pois isso dificulta o entendimento do fluxo de execuo do programa. Neste contexto, surge a programao estruturada, como uma forma de possibilitar que o programador tenha maior controle sobre sobre o fluxo de execuo do programa. Para isso, segundo a Wikipdia , qualquer programa pode ser reduzido a 3 estruturas: 1. Estruturas de sequncia: Onde uma tarefa executada aps a outra, linearmente. 2. Estruturas de deciso: Onde, a partir de um teste lgico, determinado trecho de cdigo excutado, ou no. 3. Estruturas de iterao: Onde, a partir de um teste lgico, determinado trecho de cdigo repetido por um nmero finito de vezes. No trecho de cdigo Python a seguir, podemos reparar o emprego das trs estruturas citadas. Nas linhas 1, 2 e 3 temos um exemplo de uma estrutura de sequncia. Cada linha executada aps a anterior, comeando da primeira. Entre as linhas 5 e 9, temos uma estrutura de deciso, exemplificada pelo comando if. Na linha 5 este comando executa um teste lgico. Caso o valor seja verdadeiro, as linhas 6 e 7 sero executadas. Caso contrrio, o fluxo se desvia para a linha 8, que executar a linha 9. Nas linhas 6 e 7, temos uma estrutura de iterao. Na linha 6 est declarada a estrutura, que regula quantas vezes a linha 7 ser executada.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9.

print "Tabuada!" a = int(raw_input("Entre com a tabuada que deseja [0-9]: ")) print # Apenas para deixar uma linha em branco. if 0 <= a <= 9: for i in range(10): print "%d x %d = %.2d" % (a, i, a * i) else: print "Entre ZERO e NOVE!"

Listagem 1. Exemplo de cdigo estruturado. Vantagens Prov um melhor controle sobre o fluxo de execuo do cdigo, quando comparada com a programao imperativa. fcil de se entender, sendo amplamente usada em cursos introdutrios de programao.

Desvantagens Ainda se foca em como a tarefa deve ser feita e no em o que deve ser feito. Tende a gerar cdigos confusos, onde tratamento dos dados so misturados com o comportamento do programa.

Programao Orientada a Objetos


Uma das desvantagens da programao estruturada, como foi citado, a tendncia em gerar cdigos onde tratamentos de dados so misturados com o comportamento do programa. Alm disso, caso o programador quisesse criar um programa semelhante a um que j tivesse feito, era complicado pegar determinadas partes deste programa j pronto e trazer para o novo projeto, uma vez que eram necessrias, na maior parte das vezes, realizar mudanas substanciais no cdigo. Neste cenrio surgiu a Programao Orientada a Objetos (POO l-se P--). Ela foi criada para tentar simular o mundo real dentro do computador e para isso utiliza objetos. Desta forma, fica a cargo do programador modelar objetos e a interao entre eles. Essa modelagem leva em considerao alguns conceitos, dentre os principais, pode-se citar: Classe: o molde para criar objetos. Possui todas as especificaes de um grupo deles. Ex.: Os objetos Eddie Vedder e Kurt Cobain, apesar de serem diferentes, derivam da mesma classe Pessoa. Atributos: Definem caractersticas de objetos, e.g., a classe Pessoa tem os AtributosNome, Endereo, Telefone e Sexo. Mtodos: Definem o comportamento dos objetos, tendo seus nomes normalmente definidos por verbos. Para a classe Pessoa, por exemplo, podem haver os mtodosComprar, Vender e Alugar. Abstrao: a habilidade de se concentrar nos principais aspectos de um grupo de objetos, em vez de se preocupar com as suas especificaes. Ex.: Para a classe Pessoaso definidas as principais caractersticas comuns maioria das pessoas, sem que haja preocupao especial com objetos muito especficos e, por conseguinte, pouco comuns (e.g., pessoas com dedos a mais ou a menos). Encapsulamento: a habilidade de esconder de outros objetos, as caractersticas intrnsecas de um dado objeto. Toda a comunicao inter objetos deve ser realizada via

mtodos. Um objeto no deve ser capaz de acessar, e tampouco alterar, atributos de outro objeto diretamente. Associao: a habilidade pela qual um objeto utiliza recursos de outro. Por exemplo:Corda parte de um Violo. Herana: a capacidade de criar subclasses a partir de uma superclasse. Essas subclasses herdam, ento, todas as caractersticas da superclasse. normalmente definida como uma associao do tipo " um", e.g., Cliente uma Pessoa. Polimorfismo: o princpio pelo qual uma subclasse sobrescreve um comportamento (mtodo) herdado de sua superclasse. Por exemplo, a classe Pessoa implementa o mtodo Comprar, mas a classe Cliente, derivada da classe Pessoa, precisa de algo mais especfico, envolvendo mais dados. Ento a classe Cliente sobrescreve o mtodoComprar, tornando-o mais especfico.

Estes so alguns conceitos da POO. Sugiro a leitura da pgina da Sun, na seo de leituras recomendadas, no rodap deste texto, para mais informaes sobre eles. No cdigo abaixo temos implementadas algumas das caractersticas da POO, que foram citadas. um cdigo bastante simples, sem aplicao direta em problemas reais. Contudo, serve como exemplo de implementao de Classes, Atributos, Herana, Polimorfismo e instanciao de objetos.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.

# -*- coding: utf8 -*class Pessoa: def __init__(self, nome_, endereco_, telefone_, sexo_): self.__nome = nome_ self.__endereco = endereco_ self.__telefone = telefone_ self.__sexo = sexo_ def comprar(self): pass def vender(self): pass def alugar(self): pass class Cliente(Pessoa): def __init__(self, nome_, endereco_, telefone_, sexo_): Pessoa.__init__(self, nome_, endereco_, telefone_, sexo_) def comprar(self, nome): print "Sobrecarregando o mtodo comprar()" # # Main # eddie = Pessoa("Eddie Vedder", "Seatle", "555-6332", "M") kurt = Pessoa("Kurt Cobain", "Paradise", "555-disk_god", "M")

Listagem 2. Exemplo de cdigo Orientado a Objetos. Vantagens

Prov uma melhor organizao do cdigo. Contribui para o reaproveitamento de cdigo.

Desvantagens No possui o mesmo desempenho de cdigos estruturados similares. Seus conceitos so de difcil compreenso se comparados aos conceitos da Programao estruturada.

Concluso
Foram apresentados os principais conceitos da Programao Estruturada e da Orientada a Objetos. Ambos paradigmas so herdeiros do Paradigma Imperativo, mas proveem novas funes, criando novas abordagens para o mesmo. O Paradigma Estruturado o que domina atualmente cursos introdutrios de programao, mas o Paradigma Orientado a Objetos que a estrela da festa em sistemas maiores. Dificilmente encontra-se um grande projeto de software sem a utilizao de POO, sendo este, requisito fundamental para profissionais da rea de programao. Em suma, cada paradigma tem suas vantagens e desvantagens, sendo indicados para fins especficos. Enquanto que no Estruturado temos simplicidade de termos e facilidade de aprendizagem, que o levam para as primeiras aulas de programao, no Orientado a Objetos, temos mais recursos e melhores organizao e reaproveitamento de cdigo, colocando em um novo nvel, os paradigmas Imperativo e Estruturado, dos quais ele herda caractersticas