You are on page 1of 9
Programagéo Orentada a Objlos Capitulo 11 263 Seyt2d Lise 208 1ATeE, Programagao Orientada a Objetos ‘A Programago Orientada a Objetos (POO) @ uma técnica de programagdo que vem sendo discutida hé muitos anos. Sua origem data de meados da década de 1960 e até hoje parece ndo ser muito bem entendida, ocasionando muitas divides aos profssionais da area de desenvolvimento de programagao de computadores, principalmente aos iniciantes. Os capitulos 9 e 10 apresentaram a abstragio (de dados, procedimentos e fungées), uma das bases da POO. Este capitulo destaca outros detalhes e alicerces que embasam essa técnica de programagao. 11.1 Origem AA técnica de programago de computadores baseada no paradigma da orientagdo a objetos nao é recente, como muitos profissionais ainda acreditam. Seu reconhecimento piiblico data do inicio da década de 1990, apesar de sua popularizagao ter corrido a partir da década de 1970; no entanto, o conceito de Programago Orientada a Objetos (POO - em inglés, Object Oriented Programming - OOP) surgiu por volta do inicio da década de 1960, a partir da necessidade de simulagdes em computadores (LEITE & RAHAL JR., 2008). Naquela ocasido, ja havia grande preocupagéo com a qualidade no desenvolvimento de programas, o reaproveitamento de cédigo escrito e o tempo de desenvolvimento dos sistemas, que comegava a ser demorado. Dessa necessidade desenvolveu-se a técnica de programaco estruturada, que se toma a base fundamental para 0 surgimento da técnica de programagéo orientada a objetos. cenério para a area de software nao era nada animador, pois a industria de hardware estava muitos anos a frente. O modo de concepgao dos programas era muito ristico, pois um programa tinha de ser escrito para ‘um computador em especifico. Nao existia um programa que fosse executado em qualquer computador ou plataforma, Essa concepgdo s6 apareceu muito tempo depois. ‘A era da computacéo comercial inica-se em 1950, quando os computadores deixaram de ser ferramentas de uso militar (como ocorreu na década de 1940). A cinica linguagem utiizada era a da maquina, formada por Ccédigos bindrios. Com o tempo surgiu a linuagem Assembly, mais facil do que a de maquina. Apesar de mais {Acil, é uma linuagem intimamente vinculada 2os recursos da mAquina, o que a torna de dificil compreensao. Um programa escrito em linguagem Assembly para um computador X nao pode rodar em um computador Y. O mesmo programa necessita ser novamente escrito, segundo as regras do computador Y, 0 que, além de trabalhoso, 6 excessivamente dispendioso. Com as linguagens de maquina e Assembly surge a primeira gerago de linguagens de programagao, que so de baixo nivel. dtr Ea Algoimos Logica para Desenvolvimento de Programario de Computadores - José Augusto NG. Manzano ¢ Jay F. de Ova ~ 2" Eso 264 ‘Algoritmos - Légica para Desenvolvimento de Programagéo de Computadores Entre 1954 até 1968, surgiram as primeiras linguagens de programacéo de alto nivel (maior proximi-dade com a forma escrita humana, em inglés) ¢ a primeira a ser langada foi FORTRAN (FORmula TRANsiator, ctiada por John Backus e sua equipe para a IBM, em 1954). Depois vieram 0 COBOL (COmmon Business Oriented Language, criada pela almirante Gracy Murray Hopper para o Departamento de Defesa Norte- ‘Americano, em 1959), ALGOL (ALGOrithmic Language, criada por um comité internacional formado pela Association for Computing Machinery e German Applied Mathematics and Mechanios, em 1958) e BASIC (Beginner's All Purpose Symbolic Instruction Code, criada por J. Kemeny eT. Kurtz, em 1964), para citar as mais conhecidas, j4 que existem mais de 2.500 linguagens de programagéo catalogadas. Essas linguagens passaram a defini a segunda geragao. ‘Além de essas linguagens serem mais proximas da escrta humana, possibiitaram maior portabilidade, pois ja fra possivel esorever um programa para um computador X e utiizé-fo (com algumas modificagdes) em um ‘computador Y. As linguagens de segunda geraggo, na sua maioria, so lineares (no sendo regra gera), as quai identiicam ‘seus comandos com linhas numeradas. Essa caracteristica dificulta a adogao de técnicas estruturadas de codificago de programa. N3o que essas linquagens no permitam 0 uso dessa técnica, apenas difcultam, © que leva programadores inexperientes a cometerem verdadeiros absurdos na codificagéio de programas. Devido a este e outros detalhes tecnicos, comega a se discutir uma maneira de tentar reaproveitar um cbdigo escrito e a necessidade de alteré-o de forma mais répida e dail. Esa ideia inicial da programagéo estruturada acaba por nortear @ programaco orientada a objelos, que surge a partir de 1960, do trabalho de dois pesquisadores noruegueses, Ole-Johan Dahl, e Kristen Nygaard, que apresentaram, em 1962, a primeira linguagem de programacdo para simulago em computadores, SIMULA |, para o computador UNIVAC utiizado 1no The Norwegian Computing Center, segundo aponta Hostetter (1998), usada até 1965 e posteriormente a linguagem SIMULA 67 de 1967 (CRUYSBERGHS, 2002). Em 1967, fol apresentada a linquagem SIMULA 67, que introduziu o conceito de classes como extenséo da linuagem ALGOL 60, do professor Niklaus Wirt, o mesmo criador da linguagem Pascal, sendo a classe um dos princiais pilares que sustentam a programagéo orientada a objetos. Durante a década de 1970, surge a linguagem de programagéo orientada a objetos SmallTalk, desenvolvida por Alan Kay da empresa XEROX. ‘A SmallTalk, de certa forma, popularizou e incentivou o uso da POO (LEITE & RAHAL JR., 2008). Durante a década de 1980, algumas linguagens impulsionaram o paradigma da POO, destacando-se C++, de Bjarme Stroustrup; Object PASCAL. de Niktaus Wirth; e Eifel. de Betrand Meyer. Depois durante a década de 1990 destacam:se as linguagens Java de James Gosiing e C#, de Anders Hejsberg para a Microsoft. ‘Surge a concepedo das primeiras inquagens de programagao pertencentes a terosira geragdo, com uma es- truturagao de dados maior do que as linguagens de segunda geragao, mas nao davam suporte programagéo orientada a objetos, que ainda estava no inicio. Entre 1968 e 1972, aparecem as linguagens de programagao PASCAL (exceto sua atualizago para Object Pascal) e C (que néo eram orientadas a objetos, mas estruturadas; logo, de terceira geracao). Depois vieram outras linguagens de programago, as quais j4 embutiam os conceitos de orientagao a objeto: ‘SMALLTALK, EIFFEL, ADA, CLOS, SELF, BETA, JAVA, OBJECT PASCAL (linguagem PASCAL orientada a objetos), C+ (linguagem C orientada a objetos), entre outros exemplos, Nota-se, pelo exposto, que 1 programagao orientada a objetos passou por um crescimento de 30 anos antes de comegar a ser aceita ‘com maior intensidade a partir de 1990, quando essa técnica passou a ser mais conhecida por uma pequena parcela de profissionais e muito requisitada a partir do inicio do século XX ‘A programagéo orientada a objetos baseia-se na aplicagéo de abstragao (apresentada no capitulo anterior), {que pode ser um pouco dificil de assimilarinicalmente. No entanto, a partir do momento em que se entende, & como apontar um refletor para um canto de quarto escuro. Tudo fica mais claro. Toma-se possivel ver 0 que ld existe, mas que estava oculto, ¢ entéo todo o conceito torna-se trivial. dtr Ea Algoimos Logica para Desenvolvimento de Programario de Computadores - José Augusto NG. Manzano ¢ Jay F. de Ova ~ 2" Eso Programagéo Orentada a Objlos Capitulo 11 265 ‘A programagéo orientada a objetos é uma filosofia de trabalho. Nao é a ferramenta em si, mas a forma de pensar, a forma de usar a ldgica de programago para a solugdo de um problema do mundo real em um computador. Assim sendo, & necessério ao desenvolvedor mudar a forma de pensar um problema computacional. E preciso utilizar a estrutura de dados de um programa baseada na estrutura do mundo real. s primeiros programadores pensavam de forma linear, depois aprenderam a pensar de forma estruturada; surgiram as linguagens de programago que deram suporte a essa flosofa de trabalho. A partir do inicio do séoulo XXItoma-se necessériolevar a estruturagdo de programas a um nivel mais abstrato do que era utlizado. 11.2 PE versus POO No mercado computacional ha acirradas discusses sobre o modelo PE (Programaco Estruturada, também denominado Programagéo Modular) e o modelo POO (Programago Orientada a Objetos). Afirma-se com fequéncia que o modelo da PE ¢ ultrapassado e o modelo POO é a vanguarda da programacao, no entanto ‘muitos no entendem que a técnica de POO originou-se a partir da técnica da PE, sendo, portanto, estas técnicas complementares. Segundo Leite & Rahal Jr. (2008), a POO pode ser considerada extenséo quase natural da Programagao Modular (ou Estruturada). O estilo POO 6, de fato, estruturado, como € a PE, Por esta razio, por mais estranho que possa parecer, so esses modelos complementares. Pode-se afirmar que a POO ¢ outra camada da PE, pois, para desenvolver a POO, o programador deve ter raciocinio légico preparado para entender e implementar a PE, ou seja, deve saber usar a abstrago numa camada légica e operacional mais alta do que se usa na PE. As esiruturas cléssicas de programagao apresentadas neste trabalho, como sequéncia (entrada, provessamento, saida), decisio, lagos, dados homogéneos ¢ heteragéneos © subprogramias sao premissas bésicas para o desenvolvimento da POO. De forma mais ampla, a POO é a PE a um nivel de abstrago mais alto, pois com essa técnica se usam abstragdio de dados (capitulo 9) e abstragéo de procedimentos (capitulo 10) em uma mesma estrutura de dados denominada objeto, Um objeto, para Sebesta (2003, p. 412), 6 o encapsulamento de uma representagao de dados de um tipo especitico (abstragao de dados) com os subprogramas (abstragdo de procedimentos) que fornecem as operagdes para esse tipo. APE opera basicamente com duas categorias de tipos de dados: primitivo (capitulo 3) e derivado, o registro (capitulo 9). J a POO opera com uma categoria denominada tipo de dado abstrato. O tipo de dado abstrato depende da representago de dados de um tipo especifico (tipo de dado derivado - capitulo 9) e de subprogramas (médulos de procedimento e médulos de fungao - capitulo 10). O tipo de dado abstrato de uma linuagem de POO chama-se classe. Na PE é necessério escolher um tipo de dado derivado antes de associé-o a uma variével. Da mesma forma, é necessério na POO especificar uma classe (tipo de dado abstrato) antes de associé-a a um objeto. Essa operagao de associagdo realizada tanto na PE como na POO chama-se insténcia. Grosso modo, cria-se um objeto de forma semelhante criagdo de uma variavel estatica e diz-se que o objeto é uma insténcia da classe definida (GOSLING, JOY, STEELE & BRACHA, 2005, p. 67) Insténcia entendida como a qualidade daquilo que esta para acontecer. Ao determinar a estrutura de um tipo de dado derivado ou de um tipo de dado abstrato, faz-se a preparacao inicial da estrutura de dados que serd utiizada pelo programa e que necessita ser previamente especificada. dtr Ea Algoimos Logica para Desenvolvimento de Programario de Computadores - José Augusto NG. Manzano ¢ Jay F. de Ova ~ 2" Eso 266 ‘Algoritmos - Légica para Desenvolvimento de Programagéo de Computadores 11.3 Fundamentagao ‘A partir da origem da técnica de programaco orientada a objetos e de sua proximidade com a programago estruturada, toria-se necessério fundamentar os pilares basicos que norteiam essa filosofia de trabalho. Os conceitos expostos devem ser entendidos antes de serem implementados, mesmo que paregam simples; ‘caso contrério, a implementagao dos objetos no desenvolvimento real de sistemas fica comprometida. Em ‘sua obra, Ambler (1995) adverte que os conceitos de orientacéo a objetos parecem muito simples, mas ninguém deve se deixar iludir por essa aparéncia. E necessério tomar muito cuidado para no fazer do seu ‘sistema uma "torre de Babel". ‘A orientagao a objetos é um trabalho muito bem realizado. E sabido que, para manter um teto erguido, s40 necessérios, em média, quatro pilares mestres. A orientagéo a objetos é fundamentada nessa estrutura, pois ossui quatro pilares mestres, que so classe, objeto, atributo e método, estudados em seguida 11.3.1 Classe O dicionério Aurélio apresenta varias definicdes para 0 termo classe, que pode ser cole¢do, grupo, conjunto de coisas afins. Da também a definigdo da area de ldgica de programagao como: classe é uma categoria descritiva geral, que abrange 0 conjunto de objetos que compartilham uma ou mais caracteristicas quanto a ‘seus itens de dados e procedimentos associados. Entende-se por procedimentos o mesmo que médulos de procedimentos e/ou de fungées. Em outras palavras, classe é um modelo usado para formatar a estrutura de um objeto, ou seja, uma estrutura usada para criar (instanciar) um objeto. Classe € 0 conjunto de objetos, que pode ser uma colegao de varios objetos ou mesmo um s6 objeto. O Cconcetto de classe estabelece 0 conjunto de objetos, seus atributos (semelnantes aos campos de um regis- tro) e os métados (semelhantes aos médulos de procedimento e fungzo) em comum de um determinado objeto. O conjunto de membros (atributos) e procedimentos efou fungSes membro (métodos, ou seja, suas funcionalidades) agregados a classe e que serao instanciados a certo objeto chama-se encapsulamentto, ¢ «esses atributos e/ou métodos podem ser publicos, privados ou protegidos. Em sua obra, Ambler (1997) utliza um exemplo muito pertinente a respeito de classe e faz um paralelo com © conceito de tabelas em um banco de dados. Explica que tabela 6 um conjunto de registros nela arma- Zenados, classe 6 0 conjunto dos objetos (dados e funcionalidade) que sergo criados utiizados a partir a classe definida. Amplia também essa referéncia, apontando que, 20 contrério de uma tabela, em que eexistem apenas os dados, a ciasse possui os dados (que so os atributos) e também a funcionalidade desses dados (que so 0s métodos). Assim sendo, classe & um conjunto de objetos que possuem os mesmos atributos (membros) e as mesmas funcionalidades (métodos), ou seja, & uma interface que recebe ‘nome de abstragao, a qual determina o processo de identificagao de um objeto e permite concentrar-se no que o objeto é, no que o objeto faz, sem se preocupar em como ele faz (BUENO, 2002). Para entender melhor, imagine @ classe bioldgica dos mamiferos, cujos objetos (elementos) alimentam-se de leite mateo na fase primaria de vida, ou seja, possuem, em particular, esse atributo; no entanto cada elemento possui um método (funcionaiidade) de comportamento diferente para obtero leite da mae. Na classe mamiferos existem varios objetos (elementos, ou melhor, animais) que podem ser referenciados ‘como cavalos, baleias, golfinhos, ser humano, entre outros. Todos eles possuem como atributo a caracte- ristica de mamar, no entanto um cavalo possui um comportamento diferente do de um ser humano ao alimentar-se na mae. O cavalo mama em pée 0 homem, normalmente, apoiado no colo da mae. Uma classe pode ser derivada de outra jé existente. Neste caso chama-se classe filho (ou subclasse), ‘enquanto a classe existente denomina-se classe pai (ou superclasse). Desta forma é possivel determinar familias de classes por meio de hierarquia. A classe flho automaticamente herda os atributos e as funciona- dtr Ea Algoimos Logica para Desenvolvimento de Programario de Computadores - José Augusto NG. Manzano ¢ Jay F. de Ova ~ 2" Eso Programagéo Orentada a Objlos Capitulo 11 267 lidades da classe pai. A este efeito dé-se o nome de heranca (ou derivagdo). E possivel também acres- centar atributos a uma classe filho, ou mesmo modificar os atributos herdados de uma classe pai. Quando isso ocorrer, utiiza-se especificagao. Como exposto anteriormente, classe € 0 conjunto de objetos com uma ou mais caracteristcas comuns. Eles podem ser divididas em classe abstrata e classe concreta. Uma classe abstrata possui um conjunto de objetos que no estio relacionados (instanciados) a ela, Jé uma classe concreta possui objetos instanciados a partir dela. Note que um objeto tem acesso aos membros e funcionalidades de uma classe, seja de forma direta ou indireta, por intermédio da heranga. Quando isso ocorre de forma deta, a classe concreta, mas quando corre de forma indireta, ou seja, determinado membro ou funcionalidade & passado a um objeto por meio de heranga, esse objeto estard associado a essa classe de forma abstrata. Assim sendo, uma classe é abstrala quando no é definida a partir dela nenhuma insténcia a um objeto, a ndo ser uma linha de heranga entre ela e sua classe fio que, se estiverinstanciada a um objeto, serd entéo uma classe concreta, ‘Numa aplicagéo computacional,utlizando programagao orientada a objetos, 6 comum a necessidade de trabalhar com mais de uma ciasse no sistema. Em alguns casos, as classes precisam interagir, sendo necesséro estabelecer colaboragao entre elas, de forma que as classes envolvidas possam trabalhar em conjunto, uma colaborando com a outra, a fim de tomar a funcionalidade mais expressva, ou seja,efetua-se agregacao. Com a colaborapio e a agregacio de classes surge um efeito denominado acoplamento, que 6 a capacidade de as classes estarem conectadas e assim executarem operagies comuns, ou seja, generalizagao. 11.3.2 Objeto dicionario Aurélio apresenta vérias definigdes para o termo objeto. Pode referir-se a tudo que é apreendido pelo conhecimento, que ndo é o sujeito do conhecimento, sendo manipulavel e perceptivel por qualquer dos sentidos. Dé também a definigéo da area de légica de programacéo, que diz: objeto é qualquer médulo que ‘contém rotinas @ esiruturas de dados capaz de interagir com outros médulos similares, trocando mensagens. Desta explicagéo deve-se entender por rotinas o mesmo que médulos de procedimentos elou fungSes e por toca de mensagens algo semelhante ao uso de passagem de parémetros por referéncia. Em sua obra, Ambler (1995) compara objeto com a ocorréncia de um registro, considerando o fato de ter definido anteriormente classe como se fosse uma tabela. Essas comparagdes sao apresentadas hipotetica- mente e server apenas para efeito didético, e no pratico. Do ponto de vista mais amplo, para a programago de computador, objeto pode ser uma pessoa, um local, um relatério, uma tela, um veiculo, um ser, entre outros elementos do mundo real que possam pertencer a uma classe de categorizaco, como, por exemplo, 0 objeto ser humano pertencer a classe mamiferos. Perceba como nao é facil definir objeto, que pode ser qualquer coisa instanciada a partir de uma classe a ser tratada por um programa de computador que adote POO. Observe o grau de abstrago desse conceito. ‘Objeto 6 um elemento que sofre a ago direta e indireta de um programa. Assim sendo, o objeto possui um estado de ocorréncia significativa imputado a ele em algum momento para refletir uma condigao do mundo ‘eal, ou seja, atribuir a ele um determinado evento, ‘Como definido anteriormente, todo objeto é a instancia de uma classe, ou seja, 6 um elemento pertencente a uma classe. € possivel instanciar objetos a partir de uma classe existente. Um objeto pode assumir dois papéis em um programa. Ele pode ser um objeto persistente, quando é mantido gravado como um registro de dados, ou pode ser um objeto transitério, quando é utlizado apenas na meméria de um computador para acomodar uma estrutura de dados virtual, valido somente naquele momento especifico. A agao de dtr Ea Algoimos Logica para Desenvolvimento de Programario de Computadores - José Augusto NG. Manzano ¢ Jay F. de Ova ~ 2" Eso

You might also like