Se você está dando os primeiros passos para se tornar um programador já deve ter se deparado com a sigla POO, certo?! POO é a Programação Orientada a Objetos. Em inglês OOP –  Object Oriented Programming.

Pois bem! O principal objetivo da POO é aproximar o mundo digital com o mundo real.

Como? Simulando o esse mundo real dentro do computador!

Através da POO, o programador trabalha com Dados de Objetos ao invés dos Dados Globais, tradicionalmente utilizados na Programação Estruturada (fique tranquilo, mais abaixo veremos mais sobre os diferentes estilos de programação).

 

Conceitos da Programação Orientada a Objetos

Na POO os objetos conversam entre si através do envio de mensagens, e o papel do programador é especificar quais serão as mensagens que cada objeto deve receber, e também qual ação aquele objeto deverá realizar ao receber aquela mensagem específica.

Para que você possa compreender a fundo como funciona a POO, é importante que você conheça a definição do que é um objeto para a programação:

Segundo os livros de programação, um objeto é considerado algo material ou abstrato, que pode ser descrito por meio de suas caraterísticas, comportamentos e estado atual. Desta forma, em programação, um objeto pode ser uma caneta, um carro, uma pessoa, ou também um compromisso, uma venda, um horário no médico…

 

Como funciona a POO?

Na Programação Estruturada ou até mesmo na Modular, a massa de dados é tratada por procedimentos. Os procedimentos têm acesso à massa de dados, processam, e geram resultados.

Por exemplo, se eu tenho 4 procedimentos nem todos eles utilizam todos os dados. Utilizam apenas os dados que lhe convém, o que gera um pouco de bagunça.  Estes procedimentos, antes de começar a funcionar, precisam filtrar os dados para saber quais deles são úteis.

Na POO, trabalha-se com dados de objetos ao invés de massa de dados, e na POO os métodos fazem uso dos dados pertinentes àquele objeto, não precisam de filtro adicional. O que facilita, e muito, a programação. E na POO podemos ter vários objetos, vários métodos, fazendo uso destes dados. E se precisar comunicar esse objeto um com outro consigo fazer troca de dados entre eles.

Pode parecer um pouco confuso, mas não é. Para você entender melhor, vamos supor que temos que programar um controle remoto.

Em uma programação com linguagem não orientada a objeto o foco seria nos circuitos internos, em todos os detalhes, e como eles se inter-relacionam.

Já na Programação Orientada a Objetos, eu focaria no objeto controle remoto, nas funcionalidades que cada botão tem e nas ações que eles vão executar ao serem pressionados.

Um exemplo:

barth simpson aprendendo programação

Para você entender melhor, vamos pensar em um carro como um objeto.

Existe apenas um tipo de carro? Não, existem vários tipos de carro, e cada tipo de carro segue um modelo, uma mesma classificação (em programação orientada a objetos dizemos que todos os objetos estão baseados em uma mesma classificação).

Quando uma empresa vai criar um carro ela segue um molde previamente planejado, que vai classificar qual será o modelo daquele carro.

Na POO o carro em si é o objeto e o molde utilizado pela empresa é considerado uma classe.

Em POO uma classe precisa responder a 3 perguntas:

1 – Que coisas eu tenho?
2 – Que coisas eu faço?
3 – Como estou agora?

Ainda pensando em um carro…

Que coisas um carro tem? Ele tem um modelo, uma cor, uma marca…
Que coisas eu posso fazer com um carro? Posso andar, posso estacionar, posso dar a ré…
Como o carro está agora? Ele pode estar parado no semáforo, estacionado, andando…

Na teoria de POO estas 3 perguntas têm nomes específicos:

– O que eu tenho são os ATRIBUTOS de um objeto.
– O que eu faço são os MÉTODOS de um objeto.
– Como estou agora é o ESTADO de um objeto no momento em que eu o estou analisando.

Em POO todo objeto tem atributo, método e estado!
E todo objeto vem a partir de uma classe (molde utilizado para gerar este objeto).

Então, para você criar um objeto em programação, você precisa primeiro fazer uma classe. Igual a uma fábrica que faz um carro. Antes de fazer o carro, a empresa precisa ter o molde do carro que será fabricado.

 

História da Programação Orientada a Objetos

dinossauros programandoQuando começaram a surgir os primeiros programas de computador, nas décadas de 40 e 50, a Programação era em Baixo Nível. Não existia nenhum tipo de comando para se criar um programa. As instruções eram dadas aos computadores do modo que eles entendiam.

Se o computador era do tipo A, a programação era de um tipo; se o computador era do tipo B, a programação era de outro tipo, e por aí vai. Esta diferenciação dificultava muito a programação.

Depois disso surgiram de forma modesta as linguagens de alto nível e a Programação se tornou Linear, com comandos que eram compreensíveis pelos programadores, mas sem rotinas internas e sem uma programação estruturada.

O programador dava as instruções de cima para baixo, como se fosse uma lista de compras. O trabalho ainda era limitado, mas já estava muito melhor do que a programação de baixo nível.

A evolução da Programação Linear deu origem à Programação Estruturada. Pequenos pedaços da Programação Linear passaram a ser organizados de maneira que pudessem ser executados fora da ordem e a programação deixou de ser pequenos programas e deu origem aos sistemas.

Com o crescimento dos sistemas, a programação estruturada começou a falhar e surgiu a necessidade de se criar uma linguagem mais evoluída, assim surgiu a Programação Modular.

Este estilo de programação cria módulos estruturados, valorizando dados e funcionalidades, e os coloca em pequenas cápsulas, protegidas para compor sistemas maiores e maiores e maiores.

A programação modular teve vida reduzida, pois logo surgiu um paradigma que ampliava os conceitos da programação modular – a Programação Orientada a Objeto – POO.

Mas a POO não surgiu da noite para o dia, ele foi evoluindo, e quem criou a primeira ideia de POO foi Alan Curtis Kay.

Quem foi Alan Kay

Alan Kay não era programador. Ele é formado em matemática e biologia, suas grandes paixões. Ele afirmava que: “o computador ideal deve funcionar como um organismo vivo, cada célula se relaciona com outras a fim de alcançar um objetivo, mas cada uma funciona de forma autônoma. As células poderiam também reagrupar-se para resolver um outro problema ou desempenhar outras funções”.

Suas criações iniciaram em 1970, uma época em que ainda nem existia faculdade de informática!

Ele criou vários conceitos de interação utilizando computadores. Idealizou o Dynabook, um projeto que ficou só no protótipo, mas é considerado um dos precursores do notebook.

Uma das tecnologias que ele criou para poder rodar o Dynabook foi uma linguagem de programação chamada Smalltalk. Isso porque as linguagens da época não teriam compatilidade no Dynabook. A Smalltalk contava com conceitos como: classe, objeto, atributos, e métodos, e por isso é considerada a primeira linguagem de programação orientada a objeto.

 

Vantagens de Programação Orientada a Objetos

Várias bibliografias indicam seis principais vantagens da POO:

– Todo software orientado a objeto é confiável (ao alterar uma parte nenhuma outra é afetada)

– O software orientado a objeto é oportuno (ao dividir tudo em partes, várias delas podem ser desenvolvidas em paralelo)

– O software orientado a objeto é manutenível (atualizar um software é mais fácil, uma pequena modificação beneficia todas as partes que usarem o objeto)

– Ele também é extensível (o software não é estático, deve crescer para permanecer útil)

– O software orientado a objeto é reutilizável (podemos usar o objeto de um sistema que criamos em outro sistema que viermos a criar)

– Ele é natural (td software orientado a objeto tem que ser natural, pois é mais fácil de entender, se preocupa mais com a funcionalidade do que com os detalhes de implementação)

 

Existe desvantagens na POO?

A execução de uma aplicação orientada a objetos é mais lenta do que o que vemos na programação estruturada, por exemplo. Isso acontece devido à complexidade do modelo, que traz representações na forma de classes. Porém, no momento em que estamos, tecnologicamente essa execução mais lenta não nem percebida pelo desenvolvedor e nem pelo usuário do software.

Outra desvantagem seria que a programação estruturada, quando bem feita, possui um desempenho superior ao que vemos na programação orientada a objetos. Isso ocorre pelo fato de ser um paradigma sequencial, em que cada linha de código é executada após a outra, sem muitos desvios, como vemos na POO.

Entretanto, a programação orientada a objetos traz outros pontos que acabam sendo mais interessantes no contexto de aplicações modernas. Como o desempenho das aplicações não é uma das grandes preocupações na maioria das aplicações (devido ao poder de processamento dos computadores atuais), a programação orientada a objetos se tornou muito difundida.

 

Quais as linguagens que rodam com programação orientada a Objetos?

Java

Java é, muito provavelmente, a linguagem de programação mais utilizada no mercado atual. Auxiliado pela presença do JRE (Java Runtime Environment), ou variações dele, em quase todos os dispositivos eletrônicos do momento, a linguagem Java é um grande sucesso entre os desenvolvedores. O sucesso da linguagem aumentou ainda mais com o Google Android, que escolheu o Java como linguagem preferencial de desenvolvimento de aplicações.

C#

O C#, por sua vez, é outra das linguagens mais utilizadas no mercado. Como os computadores pessoais no mundo, em sua maioria, possuem o sistema operacional Windows, da Microsoft, o C# se popularizou. Isso porque o Windows implementa o Framework .NET, ao qual o C# está associado. O C# é uma linguagem de uso geral e especialmente criada para utilização com a orientação a objetos. Vale ressaltar que, em C#, tudo é um objeto (herda da classe object).

 

Outras linguagens

Além dessas exemplificadas, existem outras linguagens que podem ser utilizadas na POO. Dentre elas vale citar a  Python, linguagem de script orientada a objetos que é muito utilizada em pesquisas científicas devido a sua velocidade; Objective-C, que é a linguagem de preferência para desenvolvimento de aplicações para os sistemas da Apple, como iPhone e iPad; Ruby, voltada para o desenvolvimento web; e Visual Basic .NET, muito utilizada até pouco tempo, mas também caindo em desuso, principalmente devido ao avanço do C# em popularidade.

 

Saber POO não é um capricho, é uma necessidade!

Alguns programadores, apesar de utilizarem linguagens orientadas a objetos, não sabem utilizar alguns dos principais conceitos desse paradigma orientado a objetos e, por isso, desenvolvem sistemas com alguns erros conceituais e acabam escrevendo mais código que o necessário, não conseguindo reutilizar o código como seria possível.

Por isso é muito importante aprender, e aprender do jeito certo, como desenvolver da melhor forma com POO.

O que vemos na área de TI hoje em dia é existem dois tipos de desenvolvedores:

– aqueles que fazem
– aqueles que fazem e sabem o que estão fazendo

O primeiro é aquele que aprendeu a programar basicamente na prática, sem uma base teórica de qualidade, o que não está errado, mas o problema é que não alcançará suas plenas capacidades profissionais.

Já o segundo, além de programar, consegue abstrair os requisitos do mundo real para o software, utilizando os conceitos de Orientação a Objetos no desenvolvimento do produto. A consequência disso é a utilização das melhores práticas, um software mais duradouro e uma qualidade final de software superior.

Aí eu te pergunto, qual desenvolvedor será mais valorizado e possuirá mais chances de ter uma carreira de sucesso?