Vous êtes sur la page 1sur 14

Os 4 pilares da Programao Orientada a Objetos (POO)

Conhea nesse artigo os principais pilares, bem como as diferenas para programao estruturada e
as principais vantagens da POO.

O desenvolvimento de software extremamente amplo. Nesse mercado,

existem diversas linguagens de programao, que seguem diferentes paradigmas.

Um desses paradigmas a Orientao a Objetos, que atualmente o mais

difundido entre todos. Isso acontece porque se trata de um padro que tem evoludo

muito, principalmente em questes voltadas para segurana e reaproveitamento de

cdigo, o que muito importante no desenvolvimento de qualquer aplicao

moderna.

A Programao Orientada a Objetos (POO) diz respeito a um padro de

desenvolvimento que seguido por muitas linguagens, como C# e Java. A seguir,

iremos entender as diferenas entre a POO e a Programao Estruturada, que era

muito utilizada h alguns anos, principalmente com a linguagem C. Esse padro se

baseia em quatro pilares que veremos ao longo desse artigo. Alm disso, a POO

diversas vantagens em sua utilizao, que tambm sero vistas e explicadas.

Programao Estruturada versus Programao Orientada a Objetos

A seguir, na Figura 1, vemos uma comparao muito clara entre a programao

estruturada e a programao orientada a objetos no que diz respeito aos dados.

Repare que, no paradigma estruturado, temos procedimentos (ou funes) que so

aplicados globalmente em nossa aplicao. No caso da orientao a objetos, temos

mtodos que so aplicados aos dados de cada objeto. Essencialmente, os

procedimentos e mtodos so iguais, sendo diferenciados apenas pelo seu escopo.


Figura 1. Estruturada x Orientao a Objetos

A linguagem C a principal representante da programao estruturada. Se trata de

uma linguagem considerada de baixo nvel, que atualmente no utilizada para

projetos muito grandes. A sua principal utilizao, devido ao baixo nvel, em

programao para sistemas embarcados ou outros em que o conhecimento do

hardware se faz necessrio para um bom programa.

Essa colocao nos traz a um detalhe importante: a programao estruturada,

quando bem feita, possui um desempenho superior ao que vemos na programao

orientada a objetos. Isso ocorre pelo fato de ser um paradigma sequencial, em que

cada linha de cdigo executada aps a outra, sem muitos desvios, como vemos

na POO. Alm disso, o paradigma estruturado costuma permitir mais liberdades com

o hardware, o que acaba auxiliando na questo desempenho.

Entretanto, a programao orientada a objetos traz outros pontos que acabam sendo

mais interessantes no contexto de aplicaes modernas. Como o desempenho das

aplicaes no uma das grandes preocupaes na maioria das aplicaes (devido

ao poder de processamento dos computadores atuais), a programao orientada a

objetos se tornou muito difundida. Essa difuso se d muito pela questo da

reutilizao de cdigo e pela capacidade de representao do sistema muito mais

perto do que veramos no mundo real.


Veremos em detalhes esses e outros pontos que dizem respeito programao

orientada a objetos. Como desenvolvedores, nossa misso entender quais so

as vantagens e desvantagens de cada um dos paradigmas de programao e

escolhermos o melhor para nossa aplicao. A escolha da linguagem tambm deve

estar presente nessa escolha.

Os 4 pilares da Programao Orientada a Objetos

Para entendermos exatamente do que se trata a orientao a objetos, vamos

entender quais so os requerimentos de uma linguagem para ser considerada nesse

paradigma. Para isso, a linguagem precisa atender a quatro tpicos bastante

importantes:

I. Abstrao

A abstrao consiste em um dos pontos mais importantes dentro de qualquer

linguagem Orientada a Objetos. Como estamos lidando com uma representao de

um objeto real (o que d nome ao paradigma), temos que imaginar o que esse

objeto ir realizar dentro de nosso sistema. So trs pontos que devem ser levados

em considerao nessa abstrao.

O primeiro ponto darmos uma identidade ao objeto que iremos criar. Essa

identidade deve ser nica dentro do sistema para que no haja conflito. Na maior

parte das linguagens, h o conceito de pacotes (ou namespaces). Nessas

linguagens, a identidade do objeto no pode ser repetida dentro do pacote, e no

necessariamente no sistema inteiro. Nesses casos, a identidade real de cada objeto

se d por ..
A segunda parte diz respeito a caractersticas do objeto. Como sabemos, no mundo

real qualquer objeto possui elementos que o definem. Dentro da programao

orientada a objetos, essas caractersticas so nomeadas propriedades. Por

exemplo, as propriedades de um objeto Cachorro poderiam ser Tamanho, Raa

e Idade.

Por fim, a terceira parte definirmos as aes que o objeto ir executar. Essas

aes, ou eventos, so chamados mtodos. Esses mtodos podem ser

extremamente variveis, desde Acender() em um objeto lmpada at Latir() em

um objeto cachorro.

II. Encapsulamento

O encapsulamento uma das principais tcnicas que define a programao

orientada a objetos. Se trata de um dos elementos que adicionam segurana

aplicao em uma programao orientada a objetos pelo fato de esconder as

propriedades, criando uma espcie de caixa preta.

A maior parte das linguagens orientadas a objetos implementam o encapsulamento

baseado em propriedades privadas, ligadas a mtodos especiais

chamados getters e setters, que iro retornar e setar o valor da propriedade,

respectivamente. Essa atitude evita o acesso direto a propriedade do objeto,

adicionando uma outra camada de segurana aplicao.

Para fazermos um paralelo com o que vemos no mundo real, temos o

encapsulamento em outros elementos. Por exemplo, quando clicamos no boto ligar

da televiso, no sabemos o que est acontecendo internamente. Podemos ento

dizer que os mtodos que ligam a televiso esto encapsulados.


III. Herana

O reutilizao de cdigo uma das grandes vantagens da programao orientada a

objetos. Muito disso se d por uma questo que conhecida como herana. Essa

caracterstica otimiza a produo da aplicao em tempo e linhas de cdigo.

Para entendermos essa caracterstica, vamos imaginar uma famlia: a criana, por

exemplo, est herdando caractersticas de seus pais. Os pais, por sua vez, herdam

algo dos avs, o que faz com que a criana tambm o faa, e assim

sucessivamente. Na orientao a objetos, a questo exatamente assim, como

mostra a Figura 2. O objeto abaixo na hierarquia ir herdar caractersticas de todos

os objetos acima dele, seus ancestrais. A herana a partir das caractersticas do

objeto mais acima considerada herana direta, enquanto as demais so

consideradas heranas indiretas. Por exemplo, na famlia, a criana herda

diretamente do pai e indiretamente do av e do bisav.

Figura 2. Herana na orientao a objetos


A questo da herana varia bastante de linguagem para linguagem. Em
algumas delas, como C++, h a questo da herana mltipla. Isso,
essencialmente, significa que o objeto pode herdar caractersticas de
vrios ancestrais ao mesmo tempo diretamente. Em outras palavras,
cada objeto pode possuir quantos pais for necessrio. Devido a problemas,
essa prtica no foi difundida em linguagens mais modernas, que utilizam
outras artimanhas para criar uma espcie de herana mltipla.

Outras linguagens orientadas a objetos, como C#, trazem um objeto base


para todos os demais. A classe object fornece caractersticas para todos os
objetos em C#, sejam criados pelo usurio ou no.

IV. Polimorfismo

Outro ponto essencial na programao orientada a objetos o chamado

polimorfismo. Na natureza, vemos animais que so capazes de alterar sua forma

conforme a necessidade, e dessa ideia que vem o polimorfismo na orientao a

objetos. Como sabemos, os objetos filhos herdam as caractersticas e aes de seus

ancestrais. Entretanto, em alguns casos, necessrio que as aes para um

mesmo mtodo seja diferente. Em outras palavras, o polimorfismo consiste na

alterao do funcionamento interno de um mtodo herdado de um objeto pai.

Como um exemplo, temos um objeto genrico Eletrodomstico. Esse objeto possui

um mtodo, ou ao, Ligar(). Temos dois objetos, Televiso e Geladeira, que

no iro ser ligados da mesma forma. Assim, precisamos, para cada uma das

classes filhas, reescrever o mtodo Ligar().

Com relao ao polimorfismo, valem algumas observaes. Como se trata de um

assunto que est intimamente conectado herana, entender os dois juntamente


uma boa ideia. Outro ponto o fato de que as linguagens de programao

implementam o polimorfismo de maneiras diferentes. O C#, por exemplo, faz uso de

mtodo virtuais (com a palavra-chave virtual) que podem ser reimplementados (com

a palavra-chave override) nas classes filhas. J em Java, apenas o atributo

@Override necessrio.

Esses quatro pilares so essenciais no entendimento de qualquer linguagem

orientada a objetos e da orientao a objetos como um todo. Cada linguagem ir

implementar esses pilares de uma forma, mas essencialmente a mesma coisa.

Apenas a questo da herana, como comentado, que pode trazer variaes mais

bruscas, como a presena de herana mltipla. Alm disso, o encapsulamento

tambm feito de maneiras distintas nas diversas linguagens, embora

os getters e setters sejam praticamente onipresentes.

Principais vantagens da POO

A programao orientada a objetos traz uma ideia muito interessante: a

representao de cada elemento em termos de um objeto, ou classe. Esse tipo de

representao procura aproximar o sistema que est sendo criado ao que

observado no mundo real, e um objeto contm caractersticas e aes, assim como

vemos na realidade. Esse tipo de representao traz algumas vantagens muito

interessantes para os desenvolvedores e tambm para o usurio da aplicao.

Veremos algumas delas a seguir.

A reutilizao de cdigo um dos principais requisitos no desenvolvimento de

software atual. Com a complexidade dos sistemas cada vez maior, o tempo de

desenvolvimento iria aumentar exponencialmente caso no fosse possvel a

reutilizao. A orientao a objetos permite que haja uma reutilizao do cdigo

criado, diminuindo o tempo de desenvolvimento, bem como o nmero de linhas de


cdigo. Isso possvel devido ao fato de que as linguagens de programao

orientada a objetos trazem representaes muito claras de cada um dos elementos,

e esses elementos normalmente no so interdependentes. Essa independncia

entre as partes do software o que permite que esse cdigo seja reutilizado em

outros sistemas no futuro.

Outra grande vantagem que o desenvolvimento orientado a objetos traz diz respeito

a leitura e manuteno de cdigo. Como a representao do sistema se aproxima

muito do que vemos na vida real, o entendimento do sistema como um todo e de

cada parte individualmente fica muito mais simples. Isso permite que a equipe de

desenvolvimento no fique dependente de uma pessoa apenas, como acontecia

com frequncia em linguagens estruturadas como o C, por exemplo.

A criao de bibliotecas outro ponto que muito mais simples com a orientao a

objetos. No caso das linguagens estruturadas, como o C, temos que as bibliotecas

so colees de procedimentos (ou funes) que podem ser reutilizadas. No caso da

POO, entretanto, as bibliotecas trazem representaes de classes, que so muito

mais claras para permitirem a reutilizao.

Entretanto, nem tudo perfeio na programao orientada a objetos. A execuo

de uma aplicao orientada a objetos mais lenta do que o que vemos na

programao estruturada, por exemplo. Isso acontece devido complexidade do

modelo, que traz representaes na forma de classes. Essas representaes iro

fazer com que a execuo do programa tenha muitos desvios, diferente da execuo

sequencial da programao estruturada. Esse o grande motivo por trs da

preferncia pela linguagem C em hardware limitado, como sistemas embarcados.

Tambm o motivo pelo qual a programao para sistemas mveis como o Google

Android, embora em Java (linguagem orientada a objetos), seja feita o menos

orientada a objetos possvel.


No momento atual em que estamos, tecnologicamente essa execuo mais lenta

no sentida. Isso significa que, em termos de desenvolvimento de sistemas

modernos, a programao orientada a objetos a mais recomendada devido as

vantagens que foram apresentadas. Essas vantagens so derivadas do modelo de

programao, que busca uma representao baseada no que vemos no mundo real.

Exemplos de Linguagens Orientadas a Objetos

H uma grande quantidade de linguagens de programao orientada a objetos no

mercado atualmente. Nesse artigo, iremos apresentar 3 das mais utilizadas no

momento: Java, C# e C++. Cada uma delas possui uma abordagem diferente do

problema que as torna muito boas para alguns tipos de aplicaes e no to boas

para outros.

1. Java

O Java , muito provavelmente, a linguagem de programao mais utilizada no

mercado atual. Auxiliado pela presena do JRE (Java Runtime Environment), ou

variaes dele, em quase todos os dispositivos eletrnicos 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 aplicaes.

O Java implementa os quatro pilares de forma bastante intuitiva, o que facilita o

entendimento por parte do desenvolvedor. A abstrao, o primeiro pilar,

implementado atravs de classes, que contm propriedades e mtodos, de forma

bastante simples. J o encapsulamento realizado atravs de propriedades

privadas, auxiliadas por mtodos especiais getters e setters, como mostra


a Listagem 1. Vale ressaltar a palavra-chave this mostrada no mtodo SetId().

Essa palavra-chave funciona como um representante da classe atual, uma auto-

referncia ao prprio objeto.

Listagem 1. Encapsulamento em Java

private int id;

public int GetId()


{
return id;
{

public void SetId(int id)


{
this.id = id;
}

As questes de herana e polimorfismo no Java so um pouco mais complexas. O

Java possui herana simples, o que significa que cada classe pode herdar de

apenas uma outra. Entretanto, o Java possui as chamadas Interfaces, que possuem

propriedades e assinaturas de mtodos. Essas interfaces precisam ser

implementadas para funcionar, o que significa que uma classe pode implementar

vrias interfaces e herdar de apenas uma classe. Na questo de polimorfismo, o

atributo @Override responsvel por informar ao Java que o mtodo em questo

est sendo reescrito.

2. 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 utilizao com a orientao a objetos. Vale ressaltar

que, em C#, tudo um objeto (herda da classe object).

A abstrao muito simples, e segue o modelo do Java. A questo de

encapsulamento um pouco diferente devido a implementao dos

mtodos getter e setter. A nomenclatura tambm um pouco diferente. A varivel

que realmente guarda o valor do dado chamada atributo, enquanto a propriedade

o elemento que realmente acessa aquele dado do mundo externo. Isso est

mostrado na Listagem 2. Alm disso, o C# faz uso de duas palavras-chave

especiais: get e set.

Listagem 2. Encapsulamento em C#

// Atributo
private int id;

// Propriedade
public int Id
{
get;
set;
}

A questo da herana em C# tambm segue o modelo do Java: herana simples e a

possibilidade de utilizao de interfaces. A importncia das interfaces muito

grande, uma vez que elas podem dar o tipo dos dados, que somente posteriormente

sero associados a um tipo real, como mostra a Listagem 3. Isso tambm vlido

para o Java. Por padro, as identidades das interfaces comeam com a letra I. O

polimorfismo, por sua vez, baseado em mtodos virtuais (com a palavra-

chave virtual) na classe pai e reescritos com a palavra-chave override na classe

filha.

Listagem 3. Interfaces em C#

IExemploInterface exemplo;
exemplo = new ImplementacaoIExemploInterface();

3. C++

O C++, por sua vez, uma linguagem um pouco mais primitiva, e permite muito mais

liberdades com o hardware. Como ele foi derivado imediatamente do C, o C++

permite a utilizao de ponteiros, por exemplo, que iro trabalhar diretamente com a

memria. Alm disso, o C++ pode utilizar todas as bibliotecas C que existem

diretamente.

Em termos de abstrao, o C++ implementa classes, assim como qualquer

linguagem orientada a objetos. Ele tambm possui o sentido de privado e pblico,

que utilizado para encapsulamento. Esse encapsulamento realizado atravs de

mtodos getter e setter, muito similar ao visto em Java, como mostra aListagem 4.

Repare que a listagem mostra somente a assinatura dos mtodos especiais, sendo

que sua implementao a mesma que em Java. Esse tipo de adaptao muito

comum em C++, onde a classe guardada em um arquivo .h e sua implementao

em um arquivo .cpp.

Listagem 4. Encapsulamento em C++

private:
int id;
public:
int GetId() const;
void SetId(int const id);

A questo da herana no C++ um pouco diferente. A linguagem permite a herana

mltipla, o que significa que cada classe pode herdar de quantas classes desejar.

Isso pode causar problemas de mtodos que possuem o mesmo nome, portanto o

desenvolvedor precisa estar atento. O polimorfismo baseado em mtodos virtuais,


da mesma forma como o C#. A complexidade, entretanto, maior, uma vez que

temos que cuidar de detalhes de mais baixo nvel, como acesso a memria.

Alm dessas exemplificadas, existem outras linguagens que merecem ser citadas.

Entre elas, podemos elencar: Python, linguagem de script orientada a objetos que

muito utilizada em pesquisas cientficas devido a sua velocidade; Object

Pascal (tambm conhecida como Delphi, devido ao nome de sua IDE), que est

caindo em desuso, apesar do grande nmero de sistemas mais antigos que a

utilizam; Objective-C, que a linguagem de preferncia para desenvolvimento de

aplicaes 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

tambm caindo em desuso, principalmente devido ao avano do C# em

popularidade.

Ao longo desse artigo, procuramos elencar os elementos que fazem da programao

orientada a objetos um sucesso no momento. Vimos os quatro pilares desse

paradigma e entendemos como eles so implementados em algumas das

linguagens mais utilizadas no mercado de desenvolvimento. Alm disso,

entendemos algumas das vantagens que tornaram a programao orientada a

objetos um grande sucesso para o desenvolvimento de sistemas modernos.

Sobre o autor:
Henrique Machado Gasparotto

Estudante de Engenharia de Computao na Universidade Federal de Santa Maria UFSM e Tcnico em


Informtica pelo SENAC Santa Maria. Experincia em programao C# .NET e Java, alm de aplicaes
mobile (Android e Windows Phone) e [...]

Leia mais em: Os 4 pilares da Programao Orientada a


Objetos http://www.devmedia.com.br/os-4-pilares-da-programacao-orientada-a-
objetos/9264#ixzz3mm3OejGO