Ontem a noite estava voltando para casa eu e minha dignissíma ilustríssima exuberante linda devotada e maravilhosa esposa de carona com um casal de amigos e a irmã da nossa amiga (que é nossa amiga também) e iamos conversando sobre vários assuntos. De repente comentei que antes de vir para Curitiba (sim, eu moro aqui onde faz muito frio e até a gente mofa, sério!) eu estava cursando uma pós-graduação. A nossa amiga perguntou toda interessada:
- Sério? Fazia pós de que?
Eu todo solicito respondi:
- Programação Orientada a Objetos.
Nessa hora eu me senti o nerd dos nerds. Poxa vida, como eu fui idiota. Para mim programação orientada a objetos [momento advogado ON] daqui por diante referida como POO [momento advogado OFF] é comum como faca para açogueiro.
No meu contexto isso tão natural, mas tão natural que até minha mulher já está acostumada com alguns termos, técnicas e até piadas. Sério, sabe aquelas piadas de profissão, tipo “Existem 10 tipos de pessoas aquelas que sabem binário e as que não sabem”. Se você não entendeu essa piada tudo bem, você é normal e ainda goza de perfeita saúde, ok? Não precisa se preocupar, aqui tem uma explicação que você não precisa entender (para continuar a ler o post, pelo menos).
Então, como ia dizendo, isso para mim é tão natural que nem me toquei que ninguém mais no veículo, exceto minha esposa, fazia a menor idéia do que isso seria. Mas, como Deus é bom, a minha amiga perguntou:
- Mas o que é “Programação Orientada a Objetos”.
Neste momento foi que a situação ficou mais complicada. Veja bem caro amigo internauta, para fazer alguns universitários entenderem o que é POO ao longo de 2 ou 3 anos já é díficil. Agora imagina eu tendo que explicar da maneira mais simples possível para um público totalmente leigo no assunto o que é POO. É uma missão digna de Jack Bauer, Macgyver ou Chuck Norris.
Não sei se foi totalmente eficiente a explicação, sabe? O fato é que ou a explicação ficou realmente boa ou eles são camaradaços meus e ótimos atores porque o ar de “Nossa! Que Legal” e “Entendi! Isso é bom pra caramba” que eles fizeram dava para pintar um quadro, de tão nítido que foi.
A idéia deste post é justamente apresentar uma explicação nem um pouco técnica, mas sim didática e simples sobre o que é POO.
Vamos lá, apesar do nome ser bastante intuitivo ele não é muito claro, afinal alguém que ler isso pode pensar “Hummm, programação orientada a objetos deve ser para fazer programas para celular, TV, DVD player, afinal eles são objetos.”. Se você pensa não existem pessoas capaz disso então leia o post Estórias da Vida (1).
Vejamos como é simples. Exemplo: Neste presente momento você deve estar de frente com um monitor que está sobre uma mesa e você está sentado em uma cadeira. Monitor, mesa e cadeira são objetos. Mesa e cadeira são móveis certo? Então se fossemos fazer um sistema de loja de móveis teriamos que dizer ao computador que ele está trabalhando com móveis.
Bom neste ponto já temos o objeto de negócio e o contexto que é loja de móveis.
O que é interessante para uma loja de móveis saber sobre todo e qualquer móvel que ela tenha?
Respondo, são altura, largura, comprimento, peso, cor e marca.
Isso são atributos dos objetos, no caso os móveis, independente de quais sejam os móveis tem esses atributos. Podem ter outros, mas consideremos apenas esses que são relevantes ao nosso contexto.
Em uma pseudo linguagem de programação seria isso:
Movel
atributos: altura, largura, comprimento, peso, cor marca.
No caso da cadeira ela terá tudo o que um móvel tem e uma caracteristica a mais: rodinhas. Uma cadeira pode ou não ter rodinhas. Isso seria um atributo exclusivo da cadeira além de ter todos os outros de móveis.
Cadeira é Movel
atributos: temRodinhas.
Nota: O computador já saberia que sendo móvel Cadeira tem os atributos dele e mais o que foram específicados aqui.
Além de atributos um objeto pode ter comportamentos. Vamos usar um monte de imaginação agora. Muita imaginação mesmo.
Digamos que o nosso sistema de móveis faz testes em cadeiras de rodas motorizadas (Eu disse que era para usar a imaginação, não disse?).
A cadeira de rodas motorizada (neste contexto que é bem absurdo, mas já que estamos usando a imaginação vamos desligar um pouco o realismo) seria um tipo de cadeira que tem rodas (atributo da cadeira) e um motor (atributo exclusivo da cadeira de rodas motorizada).
No caso teriamos uma cadeira capaz de ir em várias direções, mas como ela faria isso?
Digamos que para ir para frente o motor faria força nas rodas, para trás ele mudaria o sentido de rotação das rodas e faria força nelas, para virar para direita ele faria mais força na roda esquerda que na direita e para esquerda o contrário (Meio confuso né?).
Então em pseudo linguagem ficaria:
CadeiraDeRodasMotorizada é Cadeira
atributos: motor.
comportamento fazerForcaNasRodas com: intensidadeParaRodaEsquerda, intensidadeParaRodaDireita é:
rodarRodaComIntensidade usando: ESQUERDA, intensidadeParaRodaEsquerda.
rodarRodaComIntensidade usando: DIREITA, intensidadeParaRodaDireita.
fimDoComportamento.
comportamento irRetoParaFrente é:
fazerForcaNasRodas usando: 10, 10.
fimDoComportamento.
comportamento irRetoParaTras é:
inverterSentidoDeRotacaoDasRodas.
fazerForcaNasRodas usando: 10, 10.
fimDoComportamento.
comportamento virarParaDireita é:
fazerForcaNasRodas usando: 10, 5.
fimDoComportamento.
comportamento virarParaEsquerda é:
fazerForcaNasRodas usando: 5, 10.
fimDoComportamento.
Neste caso temos as seções de comportamento que diz quais comportamentos a cadeira de rodas motorizada tem e o que eles fazem. Não listei aqui como que acontece o inverterSentidoDeRotacaoDasRodas e rodarRodaComIntensidade e nem da onde veio o ESQUERDA e DIREIRA porque é para ser simples não considero relevante, até porque isso é só um exemplo e tinha falado sobre usar a imaginação, lembra?
Se quiser saber pode me contactar ou procure o curso de tecnologia mais próximo.
Se por acaso tivessemos uma cadeira de rodas motorizada que tivesse acento ejetável (imaginação meu caro, use a imaginação não o realismo) ela seria:
CadeiraDeRodasMotorizadaComAssentoEjetavel é CadeiraDeRodasMotorizada
atributos: assentoEjetavel.
comportamento ejetar é:
ativarAssentoEjetavel.
fimDoComportamento.
Neste caso a cadeira de roadas motorizada com assento ejetável teria os atributos de cadeira, de cadeira de rodas motorizada e mais um atributo que seria o assento ejetável. Além disso ela faria tudo que uma cadeira de rodas motorizada faz (irRetoParaFrente, irRetoParaTras, etc.) e além disso ela seria capaz de ejetar o assento.
Não quer usar a imaginação? Acha que uma cadeira de rodas com assento ejetável é absurdo?
Então pense na seguinte situação: uma pessoa cadeirante usando a sua cadeira de rodas resolve descer uma ladeira, de repente quebram os controles de movimento, as engrenagem e freios de forma que a cadeira começa a acelerar rapidamente. No fim da ladeira está vindo um ônibus biarticulado (coisa comum em Curitiba, então a situação seria aqui, tá?). O motorista do ônibus está todo feliz e contente dirigindo o veículo e começa a andar porque o sinal abriu. Daí o cadeirante que está na cadeira desembestada ladeira abaixo vê que inevitávelmente irá colidir com o grande veículo de transporte coletivo. Antes da colisão garanto que ele pensaria: “Poxa, se minha cadeira fosse aquela com assento ejetável eu teria usado logo que ela começou acelerar”.
Pronto. Se tivesse sido uma cadeira motorizada com assento ejetável ele poderia ter se salvado.
Bem, justificativas a parte, depois dos comportamentos definidos basta usarmos eles atraves de uma tela, controle remoto ou seja lá como você imaginou que isto será feito.
É claro que na prática existe muito mais coisa do que isso, mas espero que com essa explicação e exemplo já dá para ter uma boa idéia do que é POO.
Ah, e principalmente, acho que já dá para explicar para quem não sabe nada de programação o que é POO ou passar esse post.