Artigos .NET Os 4 pilares da Programa��o Orientada a Objetos
O desenvolvimento de software � extremamente amplo. Nesse mercado, existem diversas linguagens de programa��o, que seguem diferentes paradigmas. Um desses paradigmas � a Orienta��o a Objetos, que atualmente � o mais difundido entre todos. Isso acontece porque se trata de um padr�o que tem evolu�do muito, principalmente em quest�es voltadas para seguran�a e reaproveitamento de c�digo, o que � muito importante no desenvolvimento de qualquer aplica��o moderna.
A Programa��o Orientada a Objetos (POO) diz respeito a um padr�o de desenvolvimento que � seguido por muitas linguagens, como C# e Java. A seguir, iremos entender as diferen�as entre a POO e a Programa��o Estruturada, que era muito utilizada h� alguns anos, principalmente com a linguagem C. Esse padr�o se baseia em quatro pilares que veremos ao longo desse artigo. Al�m disso, a POO diversas vantagens em sua utiliza��o, que tamb�m ser�o vistas e explicadas.
Saiba mais sobre Orienta��o a Objetos
Programa��o Estruturada vs Programa��o Orientada a Objetos
Na Figura 1 vemos uma compara��o muito clara entre a programa��o estruturada e a programa��o orientada a objetos no que diz respeito aos dados. Repare que, no paradigma estruturado, temos procedimentos (ou fun��es) que s�o aplicados globalmente em nossa aplica��o. No caso da orienta��o a objetos, temos m�todos que s�o aplicados aos dados de cada objeto. Essencialmente, os procedimentos e m�todos s�o iguais, sendo diferenciados apenas pelo seu escopo.
Figura 1. Estruturada x Orienta��o a Objetos
A linguagem C � a principal representante da programa��o estruturada. Se trata de uma linguagem considerada de baixo n�vel, que atualmente n�o � utilizada para projetos muito grandes. A sua principal utiliza��o, devido ao baixo n�vel, � em programa��o para sistemas embarcados ou outros em que o conhecimento do hardware se faz necess�rio para um bom programa.
Essa coloca��o nos traz a um detalhe importante: 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. Al�m disso, o paradigma estruturado costuma permitir mais liberdades com o hardware, o que acaba auxiliando na quest�o desempenho.
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. Essa difus�o se d� muito pela quest�o da reutiliza��o de c�digo e pela capacidade de representa��o do sistema muito mais perto do que ver�amos no mundo real.
Veremos em detalhes esses e outros pontos que dizem respeito a programa��o orientada a objetos. Como desenvolvedores, � nossa miss�o entender quais s�o as vantagens e desvantagens de cada um dos paradigmas de programa��o e escolhermos o melhor para nossa aplica��o. A escolha da linguagem tamb�m deve estar presente nessa escolha.
DevCast: Por que adotamos Orienta��o a Objetos?
Os 4 pilares da Programa��o Orientada a Objetos
Para entendermos exatamente do que se trata a orienta��o a objetos, vamos entender quais s�o os requerimentos de uma linguagem para ser considerada nesse paradigma. Para isso, a linguagem precisa atender a quatro t�picos bastante importantes:
Abstra��o
A abstra��o consiste em um dos pontos mais importantes dentro de qualquer linguagem Orientada a Objetos. Como estamos lidando com uma representa��o de um objeto real (o que d� nome ao paradigma), temos que imaginar o que esse objeto ir� realizar dentro de nosso sistema. S�o tr�s pontos que devem ser levados em considera��o nessa abstra��o.
O primeiro ponto � darmos uma identidade ao objeto que iremos criar. Essa identidade deve ser �nica dentro do sistema para que n�o haja conflito. Na maior parte das linguagens, h� o conceito de pacotes (ou namespaces). Nessas linguagens, a identidade do objeto n�o pode ser repetida dentro do pacote, e n�o necessariamente no sistema inteiro. Nesses casos, a identidade real de cada objeto se d� por <nome_do_pacote>.<nome_do_objeto>.</nome_do_objeto></nome_do_pacote>
A segunda parte diz respeito a caracter�sticas do objeto. Como sabemos, no mundo real qualquer objeto possui elementos que o definem. Dentro da programa��o orientada a objetos, essas caracter�sticas s�o nomeadas propriedades. Por exemplo, as propriedades de um objeto �Cachorro� poderiam ser �Tamanho�, �Ra�a� e �Idade�.
Por fim, a terceira parte � definirmos as a��es que o objeto ir� executar. Essas a��es, ou eventos, s�o chamados m�todos. Esses m�todos podem ser extremamente vari�veis, desde �Acender()� em um objeto l�mpada at� �Latir()� em um objeto cachorro.
Saiba mais sobre Abstra��o e Polimorfismo
Encapsulamento
O encapsulamento � uma das principais t�cnicas que define a programa��o orientada a objetos. Se trata de um dos elementos que adicionam seguran�a � aplica��o em uma programa��o orientada a objetos pelo fato de esconder as propriedades, criando uma esp�cie de caixa preta.
A maior parte das linguagens orientadas a objetos implementam o encapsulamento baseado em propriedades privadas, ligadas a m�todos especiais chamados getters e setters, que ir�o retornar e setar o valor da propriedade, respectivamente. Essa atitude evita o acesso direto a propriedade do objeto, adicionando uma outra camada de seguran�a � aplica��o.
Para fazermos um paralelo com o que vemos no mundo real, temos o encapsulamento em outros elementos. Por exemplo, quando clicamos no bot�o ligar da televis�o, n�o sabemos o que est� acontecendo internamente. Podemos ent�o dizer que os m�todos que ligam a televis�o est�o encapsulados.
Saiba mais sobre Encapsulamento em Java
Heran�a
O reuso de c�digo � uma das grandes vantagens da programa��o orientada a objetos. Muito disso se d� por uma quest�o que � conhecida como heran�a. Essa caracter�stica otimiza a produ��o da aplica��o em tempo e linhas de c�digo.
Para entendermos essa caracter�stica, vamos imaginar uma fam�lia: a crian�a, por exemplo, est� herdando caracter�sticas de seus pais. Os pais, por sua vez, herdam algo dos av�s, o que faz com que a crian�a tamb�m o fa�a, e assim sucessivamente. Na orienta��o a objetos, a quest�o � exatamente assim, como mostra a Figura 2. O objeto abaixo na hierarquia ir� herdar caracter�sticas de todos os objetos acima dele, seus �ancestrais�. A heran�a a partir das caracter�sticas do objeto mais acima � considerada heran�a direta, enquanto as demais s�o consideradas heran�as indiretas. Por exemplo, na fam�lia, a crian�a herda diretamente do pai e indiretamente do av� e do bisav�.
Figura 2. Heran�a na orienta��o a objetos
A quest�o da heran�a varia bastante de linguagem para linguagem. Em algumas delas, como C++, h� a quest�o da heran�a m�ltipla. Isso, essencialmente, significa que o objeto pode herdar caracter�sticas de v�rios �ancestrais� ao mesmo tempo diretamente. Em outras palavras, cada objeto pode possuir quantos pais for necess�rio. Devido a problemas, essa pr�tica n�o foi difundida em linguagens mais modernas, que utilizam outras artimanhas para criar uma esp�cie de heran�a m�ltipla.
Outras linguagens orientadas a objetos, como C#, trazem um objeto base para todos os demais. A classe object fornece caracter�sticas para todos os objetos em C#, sejam criados pelo usu�rio ou n�o.
Polimorfismo
Outro ponto essencial na programa��o orientada a objetos � o chamado polimorfismo. Na natureza, vemos animais que s�o capazes de alterar sua forma conforme a necessidade, e � dessa ideia que vem o polimorfismo na orienta��o a objetos. Como sabemos, os objetos filhos herdam as caracter�sticas e a��es de seus �ancestrais�. Entretanto, em alguns casos, � necess�rio que as a��es para um mesmo m�todo seja diferente. Em outras palavras, o polimorfismo consiste na altera��o do funcionamento interno de um m�todo herdado de um objeto pai.
Como um exemplo, temos um objeto gen�rico �Eletrodom�stico�. Esse objeto possui um m�todo, ou a��o, �Ligar()�. Temos dois objetos, �Televis�o� e �Geladeira�, que n�o ir�o ser ligados da mesma forma. Assim, precisamos, para cada uma das classes filhas, reescrever o m�todo �Ligar()�.
Com rela��o ao polimorfismo, valem algumas observa��es. Como se trata de um assunto que est� intimamente conectado � heran�a, entender os dois juntamente � uma boa ideia. Outro ponto � o fato de que as linguagens de programa��o implementam o polimorfismo de maneiras diferentes. O C#, por exemplo, faz uso de m�todo 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� � necess�rio.
Esses quatro pilares s�o essenciais no entendimento de qualquer linguagem orientada a objetos e da orienta��o a objetos como um todo. Cada linguagem ir� implementar esses pilares de uma forma, mas essencialmente � a mesma coisa. Apenas a quest�o da heran�a, como comentado, que pode trazer varia��es mais bruscas, como a presen�a de heran�a m�ltipla. Al�m disso, o encapsulamento tamb�m � feito de maneiras distintas nas diversas linguagens, embora os getters e setters sejam praticamente onipresentes.
Saiba mais sobre Polimorfismo em Java
Principais vantagens da POO
A programa��o orientada a objetos traz uma ideia muito interessante: a representa��o de cada elemento em termos de um objeto, ou classe. Esse tipo de representa��o procura aproximar o sistema que est� sendo criado ao que � observado no mundo real, e um objeto cont�m caracter�sticas e a��es, assim como vemos na realidade. Esse tipo de representa��o traz algumas vantagens muito interessantes para os desenvolvedores e tamb�m para o usu�rio da aplica��o. Veremos algumas delas a seguir.
A reutiliza��o de c�digo � 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 n�o fosse poss�vel a reutiliza��o. A orienta��o a objetos permite que haja uma reutiliza��o do c�digo criado, diminuindo o tempo de desenvolvimento, bem como o n�mero de linhas de c�digo. Isso � poss�vel devido ao fato de que as linguagens de programa��o orientada a objetos trazem representa��es muito claras de cada um dos elementos, e esses elementos normalmente n�o s�o interdependentes. Essa independ�ncia entre as partes do software � o que permite que esse c�digo seja reutilizado em outros sistemas no futuro.
Outra grande vantagem que o desenvolvimento orientado a objetos traz diz respeito a leitura e manuten��o de c�digo. Como a representa��o 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 n�o fique dependente de uma pessoa apenas, como acontecia com frequ�ncia em linguagens estruturadas como o C, por exemplo.
A cria��o de bibliotecas � outro ponto que � muito mais simples com a orienta��o a objetos. No caso das linguagens estruturadas, como o C, temos que as bibliotecas s�o cole��es de procedimentos (ou fun��es) que podem ser reutilizadas. No caso da POO, entretanto, as bibliotecas trazem representa��es de classes, que s�o muito mais claras para permitirem a reutiliza��o.
Entretanto, nem tudo � perfei��o na programa��o orientada a objetos. 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. Essas representa��es ir�o fazer com que a execu��o do programa tenha muitos desvios, diferente da execu��o sequencial da programa��o estruturada. Esse � o grande motivo por tr�s da prefer�ncia pela linguagem C em hardware limitado, como sistemas embarcados. Tamb�m � o motivo pelo qual a programa��o para sistemas m�veis como o Google Android, embora em Java (linguagem orientada a objetos), seja feita o menos orientada a objetos poss�vel.
No momento atual em que estamos, tecnologicamente essa execu��o mais lenta n�o � sentida. Isso significa que, em termos de desenvolvimento de sistemas modernos, a programa��o orientada a objetos � a mais recomendada devido as vantagens que foram apresentadas. Essas vantagens s�o derivadas do modelo de programa��o, que busca uma representa��o baseada no que vemos no mundo real.
Saiba mais sobre vantagens e desvantagens da Orienta��o a Objetos
Exemplos de Linguagens Orientadas a Objetos
H� uma grande quantidade de linguagens de programa��o 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 aplica��es e n�o t�o boas para outros.
Java
O 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.
O Java implementa os quatro pilares de forma bastante intuitiva, o que facilita o entendimento por parte do desenvolvedor. A abstra��o, o primeiro pilar, � implementado atrav�s de classes, que cont�m propriedades e m�todos, de forma bastante simples. J� o encapsulamento � realizado atrav�s de propriedades privadas, auxiliadas por m�todos especiais getters e setters, como mostra a Listagem 1. Vale ressaltar a palavra-chave �this� mostrada no m�todo SetId(). Essa palavra-chave funciona como um representante da classe atual, uma auto-refer�ncia ao pr�prio objeto.
private int id; public int GetId() { return id; { public void SetId(int id) { this.id = id; }
Listagem 1. Encapsulamento em Java
As quest�es de heran�a e polimorfismo no Java s�o um pouco mais complexas. O Java possui heran�a 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 m�todos. Essas interfaces precisam ser implementadas para funcionar, o que significa que uma classe pode implementar v�rias interfaces e herdar de apenas uma classe. Na quest�o de polimorfismo, o atributo @Override � respons�vel por informar ao Java que o m�todo em quest�o est� sendo reescrito.
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).
A abstra��o � muito simples, e segue o modelo do Java. A quest�o de encapsulamento � um pouco diferente devido a implementa��o dos m�todos getter e setter. A nomenclatura tamb�m � um pouco diferente. A vari�vel 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. Al�m disso, o C# faz uso de duas palavras-chave especiais: get e set.
// Atributo private int id; // Propriedade public int Id { get; set; }
Listagem 2. Encapsulamento em C#
A quest�o da heran�a em C# tamb�m segue o modelo do Java: heran�a simples e a possibilidade de utiliza��o de interfaces. A import�ncia das interfaces � muito grande, uma vez que elas podem dar o tipo dos dados, que somente posteriormente ser�o associados a um tipo real, como mostra a Listagem 3. Isso tamb�m � v�lido para o Java. Por padr�o, as identidades das interfaces come�am com a letra �I�. O polimorfismo, por sua vez, � baseado em m�todos virtuais (com a palavra-chave virtual) na classe pai e reescritos com a palavra-chave override na classe filha.
IExemploInterface exemplo; exemplo = new ImplementacaoIExemploInterface();
Listagem 3. Interfaces em C#
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 utiliza��o de ponteiros, por exemplo, que ir�o trabalhar diretamente com a mem�ria. Al�m disso, o C++ pode utilizar todas as bibliotecas C que existem diretamente.
Em termos de abstra��o, o C++ implementa classes, assim como qualquer linguagem orientada a objetos. Ele tamb�m possui o sentido de privado e p�blico, que � utilizado para encapsulamento. Esse encapsulamento � realizado atrav�s de m�todos getter e setter, muito similar ao visto em Java, como mostra a Listagem 4. Repare que a listagem mostra somente a assinatura dos m�todos especiais, sendo que sua implementa��o � a mesma que em Java. Esse tipo de adapta��o � muito comum em C++, onde a classe � guardada em um arquivo .h e sua implementa��o em um arquivo .cpp.
private: int id; public: int GetId() const; void SetId(int const id);
Listagem 4. Encapsulamento em C++
A quest�o da heran�a no C++ � um pouco diferente. A linguagem permite a heran�a m�ltipla, o que significa que cada classe pode herdar de quantas classes desejar. Isso pode causar problemas de m�todos que possuem o mesmo nome, portanto o desenvolvedor precisa estar atento. O polimorfismo � baseado em m�todos virtuais, da mesma forma como o C#. A complexidade, entretanto, � maior, uma vez que temos que cuidar de detalhes de mais baixo n�vel, como acesso a mem�ria.
Al�m 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 cient�ficas devido a sua velocidade; Object Pascal (tamb�m conhecida como Delphi, devido ao nome de sua IDE), apesar do grande n�mero de sistemas mais antigos que a utilizam; 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.
Ao longo desse artigo, procuramos elencar os elementos que fazem da programa��o orientada a objetos um sucesso no momento. Vimos os quatro pilares desse paradigma e entendemos como eles s�o implementados em algumas das linguagens mais utilizadas no mercado de desenvolvimento. Al�m disso, entendemos algumas das vantagens que tornaram a programa��o orientada a objetos um grande sucesso para o desenvolvimento de sistemas modernos.
Confira tamb�m
Plano PRO
- Acesso completo
- Projetos reais
- Professores online
- Exerc�cios gamificados
- Certificado de autoridade
Por Henrique Em 2014
Receba nossas novidades