Sei sulla pagina 1di 7

Mrio Leite

Professor do CESUFOZ (Foz do Iguau) especialista em Engenharia (PUC/RJ) e em Anlise de Sistemas (CESUMAR Maring/PR) mestre em Engenharia de Produo (UFSC). e-mail: leitemario@bol.com.br

Nelson Abu Sanra Rahal Jnior


Mestre em Cincia da Computao (UFSC), Doutorando em Cincia da Computao (UFSC)

Programao Orientada ao Objeto: uma abordagem didtica Object-Oriented Programming: a didatic presentation Resumo Este artigo focaliza a metodologia de escrita de cdigo denominada Programao Orientada ao Objeto (OOP), cada vez mais empregada no desenvolvimento de sistemas, tornando-se o paradigma mais atual em termos de criao de softwares. Em particular, mostrado um exemplo prtico do uso de dois conceitos bsicos dessa metodologia: herana e polimorfismo. O exemplo apresentado mostra a criao da superclasse Mamfero e de trs subclasses: Homem, Co e Gato. Usando o conceito de herana, o mtodo Comunicar (originrio da classe Mamfero) herdado pelas subclasses, e atravs do conceito de polimorfismo esse mtodo redefinido. Palavras chave: abstrao, classe, herana, objeto, OOP, polimorfismo Abstract This article shows the methodology of writing code named Object-Oriented Programming (OOP), more and more used in the development of systems, becoming itself the most current paradigm in terms of creation of softwares. Specially, it has been shown a practical example of two basic concepts of the use of this methodology: Inheritance and polimorphism. The presented example shows the creation of the "Mamfero" superclass and three subclasses: "Homem", "Co", and "Gato". Using the concept of Inheritance, the method Comunicar (originally from Mamifero class) is inherited by the subclasses, and by the concept of polymorphism this method is redefined. Key-words: abstraction, class, inheritance, object, OOP, polymorphism. 1 - Introduo A Programao Orientada ao Objeto (Object-Oriented Programming) pode ser considerada como uma extenso quase natural da Programao Modular; entretanto a sigla OOP tem causado um certo "frisson" entre a comunidade de Informtica, nos ltimos anos. Na verdade, isto no deveria acontecer, uma vez que a OOP foi concebida h muito tempo atrs (no inicio da dcada de 70). A sua origem vem da linguagem Simula (Simula Language), concebida na Noruega no incio da dcada de 60, e como o nome indica, foi criada para fazer simulaes; entretanto, seu uso alavancou um conceito que at ento passava "despercebido" pela maioria dos projetistas: a similaridade com o mundo real. A primeira linguagem de programao a implementar sistematicamente os conceitos de OOP foi a linguagem SIMULA-68; em seguida surgiu a linguagem Smalltalk -criada pela Xerox -, que pode ser considerada a linguagem que popularizou e incentivou o emprego da OOP. Atualmente podemos encontrar verses de Smalltalk para microcomputadores, o que facilitou enormemente o seu uso, tirando-a dos ambientes privativos das Universidades. O resultado foi uma linguagem de pura linhagem OO,

poderosssima, que implementa todos os conceitos de OO, o que no acontece com as chamadas linguagens OO hbridas que implementam apenas alguns conceitos de orientao ao objeto. Com o aparecimento da famosa "crise do software", o emprego da OOP foi a sada protagonizada pelos desenvolvedores para minimizar os custos dos sistemas, em particular os custos relativos s manutenes corretivas, uma vez que cerca de 75% dos custos dos programas referem-se ao indesejvel expediente de alterar e/ou remendar cdigos dos sistemas j implantados e em operao. Basicamente, a OOP utiliza os mesmos princpios da engenharia de hardware que projeta novos equipamentos usando os mesmos componentes bsicos como transistores, resistores, fusveis, diodos, chips, etc. Os "objetos" j existentes so utilizados para produzir novos "objetos", tornando essa metodologia mais poderosa que as metodologias tradicionais de desenvolvimento de sistemas. Se consideramos a Orientao ao Objeto como um novo paradigma de desenho de software, devemos considerar, tambm, uma nova maneira de pensar, porque apesar de a escrita do cdigo continuar sendo procedural, alguns conceitos mudam radicalmente: a estruturao e o modelo computacional. Fundamentalmente o que se deseja com esta metodologia so basicamente duas caractersticas: reutilizao de cdigo e modularidade de escrita; e nisto a OOP imbatvel quando comparada com as metodologias antigas. Em termos de modelo computacional podemos dizer que enquanto as metodologias tradicionais utilizam o conceito de um processador, uma memria e dispositivos de I/O para processar, armazenar e exibir as informaes, a OOP emprega um conceito mais real, mais concreto, que o de Objeto. Uma definio para objeto seria a de um "ente" ativo dotado de certas caractersticas que o tornam "inteligente", a ponto de tomar certas decises quando devidamente solicitado. Outra definio mais formal para objeto poderia ser: uma unidade dinmica, composta por um estado interno privativo (estrutura de dados) e um comportamento (conjunto de operaes). E neste caso, segundo PRICE [12], um objeto em particular como um processador com memria prpria e independente de outros objetos. Em termos de implementao, objeto um bloco de dados privados envolvidos por cdigo, de maneira que o acesso a ele s pode ser feito sob condies especiais. Todo o comportamento desse "ente" encapsulado descrito atravs de rotinas que manipulam seus dados, sendo que o seu estado corrente est em seus prprios dados; em outras palavras, cada objeto tem suas prprias caractersticas, moldadas a partir de uma matriz. Formalmente, para ser considerada uma linguagem OO, esta precisa implementar quatro conceitos bsicos: abstrao, encapsulamento, herana e polimorfismo. Abstrao considerada como a habilidade de modelar caractersticas do mundo real do problema que o programador esteja tentando resolver. Por exemplo, se o programador estiver interessado em controlar dados dos clientes de uma empresa, muito mais fcil lidar com uma linguagem que oferea recursos em que ele possa criar algo chamado "Cliente" ao invs de recorrer estruturas de dados tipo array ou record. Nesse contexto a abstrao refere-se capacidade de modelar o mundo real, e por outro lado, podemos consider-la como um mecanismo pelo qual restringimos o nosso universo de anlise e as variveis e constantes que compem esse universo, desprezando os dados que no nos interessa na anlise. Podemos demostrar o uso de abstrao facilmente, quando fechamos os olhos e pensamos em uma mesa; esta mesa imaginria provavelmente no vai ser igual uma outra imaginada por outras pessoas, mas o que importa que todos as pessoas que imaginaram uma mesa, colocaram nessa as informaes que para elas so necessrias para a sua funo (de ser uma mesa). No importa se a mesa de trs ps ou quatro, ou se o tampo de vidro, madeira ou mrmore; o que importa que a imagem que idealizamos em nossa cabea de uma mesa e tenha as informaes necessrias para cumprir sua funo. Encapsulamento a base de toda a abordagem da Programao Orientada ao Objeto; isto porque contribui fundamentalmente para diminuir os malefcios causados pela interferncia externa sobre os dados. Partindo desse princpio, toda e qualquer transao feita com esses dados s pode ser feita atravs de procedimentos colocados "dentro" desse objeto, pelo envio de mensagens. Desta maneira, dizemos que um dado est encapsulado quando envolvido por cdigo de forma que s visvel na rotina onde foi criado; o mesmo acontece com uma rotina, que sendo encapsulada, suas operaes internas so invisveis s outras rotinas. E at mesmo em linguagens consideradas no OO, como no caso do Clipper 5.xx, segundo FERREIRA &

JARABECK [1], pode-se observar um certo encapsulamento nas rotinas em que as variveis so declaradas como LOCAL. Nesses casos tais variveis so visveis somente dentro dessas rotinas aonde foram declaradas, o que permite ao programador uma certa segurana quanto aos acessos indevidos por parte de outras rotinas, o que no acontece com variveis PRIVATE ou PUBLIC, no contexto dessa linguagem. No encapsulamento podemos visualizar a sua utilidade pensando em um vdeo cassete, onde temos os botes de liga-desliga, para frente, para traz, etc. Estes botes executam uma srie de operaes existentes no aparelho, onde so executadas pelos componentes existentes dentro do aparelho (transistores, cabos, motores, etc.) No interessa ao operador saber como o funcionamento interno do equipamento; esta informao s relevante para os projetistas do aparelho. As informaes pertinentes ao usurio do equipamento so as existentes no meio externo (botes, controle remoto) que ativam as operaes internas do equipamento. Desta maneira o aparelho de vdeo cassete pode evoluir com os avanos tecnolgicos, e as pessoas que o utilizam continuam sabendo utilizar o equipamento, sem a necessidade de um novo treinamento. Na rea de software acontece o mesmo: as classes podem continuar evoluindo, com aumento de tecnologia, e os programas que utilizam essas classe continuam compatveis. Isto ocorre porque a esses programas no interessa saber como o funcionamento interno da classe e sim sua funo, para que ele possa executar, conforme ela evolui, novas funes colocadas sua disposio. Herana um mecanismo que, se for bem empregado, permite altos graus de reutilizao de cdigo. Do ponto de vista prtico, pode ser entendido como sendo um conjunto de instncias criadas a partir de um outro conjunto de instncias com caractersticas semelhantes, e os elementos desse subconjunto herdam todas as caractersticas do conjunto original. A idia fornecer um mecanismo simples (mas muito poderoso) para que se defina novas classes a partir de uma j existente. Assim sendo, dizemos que essas novas classes herdam todos os membros (propriedades+mtodos) da classe-me; isto torna o mecanismo de herana uma tcnica muito eficiente para construir, organizar e reutilizar cdigo. Por isso, nas linguagens que no suportam esse mecanismo, as classes so criadas como unidades independentes: cada uma com seus membros concebidos do zero (sem vnculo direto com outras classes), o que torna o processo mais demorado e com cdigos, s vezes, redundantes. Um exemplo de linguagem que no implementa herana na sua forma clssica o Visual Basic (at a atual verso desktop 6.0); neste caso o desenvolvedor tem que simular esse mecanismo, usando a criatividade. A herana possibilita a criao de uma nova classe de modo que essa classe (denominada subclasse, classe-filha ou classe derivada) herda TODAS as caractersticas da classe-me (denominada superclasse, classe base ou classe primitiva); podendo ainda, a classe-filha, possuir propriedades e mtodos prprios. No processo de herana podemos imaginar um ser humano, que nasce com todas as caractersticas de um ser humano sadio; agora, coloquemos nele uma roupa e um relgio. A roupa e o relgio no faz parte do ser humano, mas quando "pegamos" este ser, vestido e com um relgio, e realizamos o processo de herana gerada uma copia idntica da matriz. Se colocarmos um sapato preto no ser humano original a sua copia tambm ficar calada, e se trocarmos a camisa do ser humano original a sua cpia tambm vai receber a nova camisa; isto demostra que a copia continua vinculada matriz de origem. Podemos tirar quantas cpias que desejarmos da matriz original e todas estas cpias mantero o seu vnculo. Podemos, at, tirar cpias das cpias, mas o processo de modificarmos a matriz original implicar numa mudana em todas as outras que esto abaixo dela. Nunca uma modificao feita nas copias altera a matriz de origem, e nunca podemos remover um item que tenha sido recebido por intermdio da herana, isto que dizer que nenhuma das cpias (humanas) poder se dar ao luxo de no ter o relgio. O termo polimorfismo, etimologicamente, quer dizer "vrias formas"; todavia, na Informtica, e em particular no universo da OOP, definido como sendo um cdigo que possui "vrios comportamentos" ou que produz "vrios comportamentos"; em outras palavras, um cdigo que pode ser aplicado vrias classes de objetos. De maneira prtica isto quer dizer que a operao em questo mantm seu comportamento transparente para quaisquer tipos de argumentos; isto , a mesma mensagem enviada a objetos de classes distintas e eles podero reagir de maneiras diferentes. Um mtodo polimrfico aquele que pode ser aplicado vrias classes de objetos sem que haja qualquer inconveniente. o caso por exemplo, do mtodo Clear em Delphi, que pode ser aplicado tanto classe TEdit como classe TListBox; nas duas situaes o contedo desse objetos so limpos, mesmo pertencendo, ambos,

classes distintas, LEITE [6]. Segundo FERREIRA & JARABECK [2], um exemplo bem didtico para o polimorfismo dado por um simples moedor de carne. Esse equipamento tem a funo de moer carne, produzindo carne moda para fazer bolinhos. Desse modo, no importa o tipo (classe) de carne alimentada; o resultado ser sempre carne moda, no importa se de boi, de frango ou de qualquer outro tipo. As restries impostas pelo processo esto no prprio objeto, definidas pelo seu fabricante e no pelo usurio do produto. 1.1 - Justificativa Na programao Orientada ao Objeto temos a necessidade de buscar as classes de domnio, onde atravs da qual um indivduo observa a realidade (domnio) e procura capturar sua estrutura (abstrair entidades, aes, relacionamento, etc) com elementos que forem considerados relevantes para a descrio desse domnio. Com as classes de domnio identificadas, podemos utilizar as tcnicas de abstrao para a composio das classes abstratas, construindo desta maneira um sistema facilmente reutilizvel nas suas estruturas internas. Analisando o objetivo de desenvolvimento do nosso projeto, temos identificadas as classes Homem, Co e Gato, onde estas classes possuem atributos e mtodos semelhantes, juntamente com aqueles exclusivos de cada uma. Criando um grupo de dados em comum com estas classes, podemos criar uma classe chamada Mamfero, onde esta ter a caracterstica de ser a superclasse que dar origem s demais classes do sistema. As classes geradas desta superclasse (Homem, Co e Gato) tm em sua estrutura os atributos e mtodos que dizem respeito apenas elas. Desta maneira, a classe Homem no possui o atributo "cauda" que existe nas demais classes, mas todas as classes geradas a partir da superclasse possuem todos os atributos e mtodos nela declarados.?Atravs do recurso de abstrao podemos melhorar o sistema sem ter que realizar um grande esforo de manuteno. As correes necessrias s classes especficas so realizadas nelas mesmo, mas as correes necessrias todas as classes devem ser feitas uma vez s: na superclasse, pois as demais classes geradas a partir dela j sofreram essas correes. Quando criamos as classes de domnio estamos criando softwares no paradigma da orientao ao objeto com caractersticas de camadas, onde identificamos vrias camadas no mesmo projeto. Nosso aplicativo tem apenas duas camadas, a camada de domnio do problema (Homem, Co e Gato) e a camada de interface (janela do aplicativo) em conjunto com essas classes (figura 2). As tcnicas de abstrao podem ser aplicadas na criao de janelas ( frames), centralizando os recursos de operacionalidade em uma superclasse e deixando a especializao para as classes especficas (subclasses) criadas a partir daquela. A programao em camadas se faz necessria para se ter um reaproveitamento de cdigo com as classes abstratas. Na ausncia dessa tcnica o reaproveitamento fica comprometido por estarmos trabalhando com o domnio e a janela juntos, como se fosse uma nica pea. verdade que o tempo necessrio para se criar um software usando o paradigma da orientao a objetos maior no incio do projeto pela necessidade de identificarmos as classes abstratas. Todavia um bom software com tcnicas de OOP gerado a partir do tempo gasto nessa etapa; quanto mais abstratas forem as suas classes de apoio, maior ser a facilidade de implementao das classes especficas. Embora um sistema de pequeno porte possa ser implementado muito mais rapidamente com tcnicas de programao estruturada do que nas tcnicas de OOP, ter sua manuteno comprometida na relao custo-tempo, onde a manuteno em um softwarecodificado com a tcnica da programao estruturada muito mais difcil de ser realizada. J no software orientado ao objeto basta alterar na classe primitiva para que todas as classes derivadas percebam essa correo. A manuteno de um software criado com a tecnologia OO muito mais fcil e mais rpida do que numa programao estruturada pela facilidade que se tem em alterar a superclasse e todos as classes geradas a partir dela. Num programa com as caractersticas de estruturado isto j no acontece, tendo as suas correes de serem realizadas em todos os mdulos que se faam necessrias. 1.2 - Objetivo O objetivo deste trabalho mostrar um exemplo prtico e didtico do uso de dois conceitos bsicos da metodologia OOP: herana e polimorfismo. Estes dois conceitos quando usados em conjunto permite ganhos extraordinrios na codificao de rotinas, evitando replicaes

desnecessrias de estruturas do tipo If..Then, Select ou Cases, e aumentando sensivelmente a produtividade do desenvolvedor. Este exemplo mostra a criao da superclasse Mamfero e de trs subclasses: Homem, Co e Gato. Usando o conceito de herana, o mtodo Comunicar (originrio da classe Mamfero) herdado pelas subclasses; e atravs do conceito de polimorfismo, esse mtodo redefinido facilmente para as subclasses, (falar para o homens, latir para os ces e miar para os gatos) mostrando o quanto se ganha em produtividade na criao de sistemas com a reutilizao de cdigo (vide Figura 1). Como mostra o exemplo da figura 2, quando executamos o mtodo Comunicar (originrio da superclasse Mamfero) ele redefinido para latir, de modo que a instncia Tot o execute adequadamente, evidenciando a importncia do polimorfismo

Figura 1 - Esquema da hierarquia das classes

Figura 2 - Interface da aplicao 2 - Metodologia O exemplo criado foi idealizado com a necessidade de se projetar um conjunto de classes de

fcil entendimento e que permitisse o uso dos conceitos de herana e polimorfismo, sendo este exemplo tirado do mundo real, originando a classe Mamfero. Primeiramente buscou-se identificar elementos em comum s classes Homem, Co e Gato, para que estes fossem adicionados classe Mamfero, que passou a ser a superclasse do exemplo. A partir dos elementos pertinentes todas as demais classes, foi feito o estudo da especializao existente cada classe, tendo a necessidade de uma redefinio de comportamento do mtodo Comunicar (figura 2), que foi customizado conforme a classe em que ele se identificava melhor (polimorfismo). Toda a implementao do programa de exemplo e seus testes foram realizado dentro da prpria estrutura da instituio de ensino superior CESUMAR (Centro de Ensino Superior de Maring, localizada no norte do Paran na cidade de Maring), e para a criao do exemplo foi utilizado a linguagem de programao JAVA em ambiente operacional Windows 98. 3 - Resultados Este trabalho foi apresentado aos alunos de graduao como objetivo de validao do contedo, sendo executado como complemento da disciplina "Tpicos Avanados em Programao", onde se demostrou sua facilidade e clareza dos termos tcnicos e assimilao desse contedo por parte dos alunos. Com a sua aplicabilidade em sala de aula, os alunos experimentaram a produo de uma aplicao cem por cento orientada ao objeto numa linguagem portvel em vrias plataformas. Desse modo o docente tem a oportunidade de trabalhar com a rea de portabilidade de software, software para Web e reaproveitamento de cdigo. O resultado imediato foi um sensvel aumento de interesse nessa metodologia por parte dos alunos e o aparecimento de algumas boas idias de implementao de programas usando a OOP. 4 - Concluses e Recomendaes O paradigma da programao orientada ao objeto possibilita a criao de sistemas que parecem teias de aranhas, onde cada n dessa teia uma classe, mas cada classe pode ser aproveitada para a composio de outros ns da teia, bem como a reutilizao desses ns em outros sistemas, diminuindo drasticamente o tempo de codificao e depurao de cdigos. Na idealizao de um sistema orientado ao objeto passamos a analisar a possibilidade de abstrao que as classes podem sofrer, pois quanto maior for a capacidade de abstrao, maior ser a projeo de reutilizao de classes no sistema. Nessa abstrao surgem as superclasses que tem elementos em comum e que sero utilizados nas subclasses; estes elementos sofrem, conforme a necessidade, o recurso do polimorfismo. Projetar um sistema em OOP identificando superclasses e elementos que tero o recurso do polimorfismo, s se adquire com experincia em vrios projetos que utilizam essa tecnologia. O exemplo apresentado neste trabalho tem um papel importante na identificao dos processos de herana e polimorfismo, pela sua simplicidade, facilidade de identificao de suas caracterstica e esboo das mesmas. Dessa maneira, este material passa a ser um instrumento til de apoio transmisso das metodologias nele tratadas. Por outro lado, devido sua importncia na criao de softwares com qualidade - de acordo com PALADINI [10], para adequao ao uso do cliente - recomendamos que a metodologia de Orientao ao Objeto seja assunto de discusso corrente nos cursos ligados Informtica, dessa e de outras instituies de ensino superior, no apenas como complemento de alguma disciplina. E as disciplinas que contemplarem esse assunto devero trat-lo de maneira didtica e com exemplos bem esclarecedores para no cair nas mesmas armadilhas que existem na literatura, as quais no raramente exibem sofisticaes desnecessrias e exemplos impossveis de serem bem entendidos. Essa literatura "superior" faz com que os programadores considerem a metodologia de Orientao ao Objeto algo distante e s acessvel para alguns "iniciados", o que no verdade. Portanto, fundamental que o ensino de OOP nas escolas seja direcionado para um aprendizado de maneira suave, empregando uma boa didtica, de modo a fazer com que o aluno entenda perfeitamente os objetivos desta tcnica, porm, sem mitificla, para que possa ser assimilada naturalmente e aplicada na prtica.

Bibliografia e Referncias Bibliogrficas [1] FERREIRA, Marcelo; JARABECK, Flvio. CA Visual Objects-O Livro, SP, Express, 1995. [2] FERREIRA, Marcelo; JARABECK, Flvio. Programao Orientada ao Objeto com Clipper 5.0, So Paulo, Makron Books, 1991. [3] FURLAN, Jos David. Modelagem de Objetos atravs da UML: anlise e desenho orientados a objeto. So Paulo, Makron Books, 1998. [4] JONES, Capers. Produtividade no desenvolvimento de software. SP, Makron Books, 1991. [5] LEITE, Mrio. Programao Orientada ao Objeto - Uma Abordagem Didtica - Monografia para Especializao em Anlise de Sistemas. Maring, CESUMAR, 1998. [6] LEITE, Mrio. Curso Bsico de Delphi. Maring, SYC, 1998. [7] MARTIN, James. Princpios de Anlise e Projetos baseados em objetos. Rio, Campus, 1994. [8] MAURO, R.C; MATOSO M. L. Aspetos de Implementao de Servidores de Banco de Dados OO", In: XXIII Conf. Latino Americana de Informtica - CLEI'97 pp. 29-38 Chile, 1997. [9] ODEL, James J; MARTIN, James. Anlise e Projetos Orientados ao Objeto. SP, M Books, 1996. [10] PALADINI, Edson Pacheco. Gesto da Qualidade: Teoria e Prtica. So Paulo, Atlas, 2000. [11] PRESSMAN, Roger S. Engenharia de software. So Paulo, Makron Books, 1995 [12] PRICE, Tom. Programa de Especializao: opo para o Mestrado. Porto Alegre,UFRGS, 1997 [13] RUMBAUGH, James; BLAHA, Michael; PREMERLANI, William, EDY, Frederick; LORENSEN, William. Modelagem e Projetos Baseados em Objetos. SP, Campus, 1994.

Potrebbero piacerti anche