Entendendo orientação a objetos na prática (parte 1)

Originalmente este artigo compõe uma série em meu site pessoal chamada "aprender programando". Nesta parte são expostos os conceitos fundamentais da orientação a objetos. Ao fim desta, espera-se que o leitor compreenda especialmente o conceito de encapsulamento e faça a diferenciação entre classes e objetos. Boa leitura!

[ Hits: 29.942 ]

Por: Isaque Vieira de Sousa Alves em 10/01/2010


Orientação a objetos - definição e histórico



Orientação a objetos ou OO é um paradigma, ou seja, um padrão de análise, modelagem, projeto e programação, e não apenas uma técnica de programação. Seu uso afeta todo a compreensão do sistema por seus usuários de fato e torna mais simples a gestão de código e características dos sistemas computacionais.

Diferentemente da programação procedural ou estruturada, no paradigma OO todo o esquema de um sistema é baseado na troca de mensagens entre os objetos integrantes do próprio sistema. Essa troca de mensagens é fundamental e implementa o nosso conceito de estímulo-resposta recorrente no nosso mundo real. Além disso, o simples fato de a implementação dos sistemas ser menos acoplada, ou seja, há maior e verdadeira independência entre as partes que formam o todo, torna-se possível uma prática denominada reutilização. Economia é a palavra-chave.

O paradigma da orientação a objetos tem uma história um pouco recente. O primeiro esforço significativo no sentido de fazer uso de uma linguagem que se caracterizasse pelo uso de abstrações mais fieis aos objetos do mundo real envolvidos nos problemas a que os programas desenvolvidos fossem relativos.

No paradigma procedural, toda a arquitetura é orientada às ações que o sistema deve realizar, ou seja, tudo é voltado basicamente às funções do sistema, sendo na maioria das vezes, soluções únicas para problemas únicas com pouca ou nenhuma reutilização de funcionalidades.

A primeira linguagem de que se tem notícia a trabalhar explicitamente com orientação a objetos foi a Simula 67, desenvolvida na década de 1960 na Noruega, no Centro Norueguês de Computação (em inglês, Norwegian Computing Center, e em norueguês, Norsk Renesentral) por dois professores:
  • Ole-Johan Dahl
  • Kristen Nygaard

Simula 67 na verdade, se propunha a ser uma extensão para outra linguagem já existente (ALGOL 60) como o objetivo de realizar a simulação de eventos discretos.

Simula 67, no entanto não foi "a linguagem" orientada a objetos a aparecer definitivamente. Isso só aconteceria por volta das décadas de 1970/1980 com a linguagem SmallTalk, desenvolvida por uma equipe de trabalho da Xerox encabeçada pelo pesquisador Allan Kay. Os principais pontos em que SmallTalk 80 diferia da linguagens tradicionais:
  • O código era compilado para bytecode e executado através de máquina virtual;
  • Tudo em Smalltalk era necessariamente um objeto;
  • A troca de mensagens entre os objetos era a forma padrão de implementação das funções ou métodos;
  • Um esboço claro de polimorfismo;
  • Um esboço de Overload ou sobrecarga de métodos;
  • Todas as classe obedeciam uma hierarquia, descendendo de uma superclasse.
  • Todo objeto funcionava como instância de uma classe, a qual determinava-lhe os comportamentos e propriedades.
  • SmallTalk não possuía tipos primitivos, sendo assim, todo e qualquer objeto era implementado na forma de classes.

O importante é que isso moldou definitivamente todo o conceito de orientação a objetos. A partir de então, surgiram implementações de diferentes linguagens utilizando-se das facilidades do paradigma de orientação a objetos.

Linguagens que suportam orientação a objetos

Bem, a lista é grande, e se faz desnecessário nomear a todas aqui, uma vez que esse não é nosso objetivo, mas é interessante saber que a maioria das linguagens modernas implementa intrinsecamente o paradigma OO.

Entre elas temos C++, Object Pascal (Delphi, Lazarus IDE), Python, Java (a Linguagem e a plataforma), C# (C sharp), e diversas "scripting languages", como PHP, Ruby, Javascript, ActionScript.

Página anterior     Próxima página

Páginas do artigo
   1. Apresentação
   2. Orientação a objetos - definição e histórico
   3. Conceitos básicos
   4. Conclusão e referencias
Outros artigos deste autor

Linux, a pirataria de software e a desvalorização do desenvolvedor (parte 2)

Diagnosticando problemas variados em ambientes GNU/Linux (parte 1)

Linux, a pirataria de software e a desvalorização do desenvolvedor (parte 1)

GNU/Linux: Liberdade e Cosmovisão

Projetos de software livre descontinuados: um problema com solução

Leitura recomendada

As novidades do Java 1.5

Introdução ao framework Mentawai

JlGui - Java Media Player

Introdução ao Desenvolvimento Android

Gerando arquivos PDF com Java e iText

  
Comentários
[1] Comentário enviado por Feko em 10/01/2010 - 14:41h

Show de bola :D
Se for possível, na parte 2, aborde um pouco de operator overload. Isso tá bastante obscuro pra mim.

[2] Comentário enviado por mateusbarsotti em 11/01/2010 - 09:48h

Ótimo artigo, parabéns.
Um resumão muito bom. Vou salvar em arquivo e deixar como fonte de consulta. Estou estudando para certificação e isso vai me ajudar bastante.

Valeu

[3] Comentário enviado por isaque_alves em 11/01/2010 - 12:03h

Tá valendo moçada.

Olha, Feko, até onde sei e aprendi, Java, que é a linguagem que usarei nesta abordagem, não oferece a possibilidade de você implementar operator overloading.

C++ e C# sim.

Sobrecarregar operadores não é uma tarefa lá muito amiga. Muita gente sente muita dificuldade mesmo.
Basicamente o objetivo de sobrecarregar um operador é alterar seu comportamento para incluir outros possíveis operandos em sua esfera de ação. Por padrão, os operadores comuns (+, -, *, =, etc) só entendem argumentos baseados em tipos inteiros primitivos (int, char, byte, etc). Sobrecarregar pode oferecer uma nova funcionalidade, como por exemplo, 'somar' dois retângulos, ou duas circunferências (claro que isso é apenas uma situação hipotética... e meio pobre...).
Em suma, uma boa implementação usando operator overload requer antes de tudo, um ótimo entendimento de... Polimorfismo.

Alguns exemplos pra você ver melhor:
* http://bit.ly/4ZpbVl -> C# operator overload
* http://bit.ly/5dBMqS -> C++ operator overload

[4] Comentário enviado por everton_fuzz em 11/01/2010 - 15:27h

Acho que você só deve tomar cuidado com a definição de herança multipla.

"Ocorre quando uma classe herda suas características de mais de uma classe ou interface. Em Java, a herança múltipla é realizada pelo uso de implementações de interfaces."

Implementar uma interface nao é utilizar herança multipla, mas sim uma 'herança parcial', pois uma interface só possui métodos.

Java NAO incorpora herança multipla. Alguns dizem inclusive que Interfaces são 'gambiarras' inventadas para suprir a necessidade de utilizar caracteristicas de classes distintas.

No mais esta ótimo!, parabens pelo artigo!

Att.

Éverton

[5] Comentário enviado por isaque_alves em 11/01/2010 - 17:30h

Com certeza, Éverton...
Realmente Java não 'tem' herança múltipla de classes...
Talvez a infelicidade tenha sido usar a expressão "Em Java, a herança múltipla é realizada pelo uso de implementações de interfaces"...
Na verdade a herança múltipla é apenas simulada por meio de Interfaces.

[6] Comentário enviado por everton3x em 12/01/2010 - 09:34h

Parabéns pelo artigo. Muito esclarecedor, principalmente para quem tem dificuldade com OO.

[7] Comentário enviado por luizcarlos18rj em 15/04/2016 - 15:42h

Quando sai a parte 2? Eu aprendi programação estrutural orientada a eventos, nunca entendi OO


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts