Orientação a Objetos
Orientação a Objetos é um paradigma de programação, que a grosso modo simula a estrutura de um determinado programa, nos moldes que temos hoje do mundo real, sejam eles reais ou abstratos.
Criado na década de 70, o modelo de Orientação a Objetos (O.O.) teve na linguagem SIMULA-67 a sua primeira implementação, a qual apenas suportava os conceitos de classes e herença.
Porém a sua grande popularização, se deu com o Smaltalk, criada pela Xerox. E pode se dizer tranquilamente que hoje este é um dos pricipais modelos de programação que existem.
Fato este que faz com que as principais linguagens criadas nos últimos anos, suportem o modelo de O.O., seria um exemplo destas: C++, Delphi, Java, C# entre outras…
Técnicas Tradicionais x Orientação a Objeto
Técnicas Tradicionais
Dizem as más linguas que as técnicas de programação tradicionais também podem ser chamadas de progrmação espaguete.
Isto se deve a uma de suas característcas que buscam por exemplo implementar uma “decomposição funcional”, o que leva consequentemente o desenvolvedor a decompor o sistema em partes menores (funções), resultando em um emaranhado de funções que chamam umas às outras.
Além disso, estas não apresentam uma separação de conceitos e responsabilidades, causando assim, dependências enormes no sistema e tornando a manutenção de software um verdadeiro desafio.
Isso sem contar no reaproveitamento de código que praticamente é nulo, o que faz com que o sistema possua códigos duplicados.
Orientação a Objeto
Agora, em uma linguagem orientada a objetos, esse programa seria dividido em objetos autônomos, quase como ter vários mini-programas.
Cada objeto representa uma parte diferente da aplicação e cada objeto contém seus próprios dados e sua própria lógica e eles se comunicam entre si.
Neste modelo, se faz necessário que você planeje bem o seu programa. Os objetos não representam idéias abstratas misteriosas. Eles primeiro representam coisas como funcionários, imagens, contas bancárias, objetos de carro, entre outros objetos que realmente existe no seu projeto.
Linguagens Orientadas a Objetos
Assim como já mencionado, a Orientação a Objetos tem sido uma idéia bem sucedida e diante disso muitas linguagens suportam tal modelo de programação.
Para ser mais claro, durane estes últimos 30 anos, a maioria das linguagens desenvolvidas em neste período suportam este paradigma de programação.
Também vale ressaltar que mesmo suportanto este modelo, as linguagens possuem diferentes níveis de recursos no que diz respeito a Orientação a Objetos.
Abaixo apresentamos uma lista resumida de linguagens que suportam este paradigma. Uma lista completa e atualizada pode ser encontrada na wikipedia.
- C++
- C#
- COBOL
- Go
- Java
- LISP
- Objective-C
- Perl
- PHP
- Python
- Ruby
- Visual Basic
Vantagens ao usar Orientação a Objetos
A Orientação a Objetos é mais de aprender, sendo mais intuitiva as técnicas tradicionais, já que está focada em problemas e conceitos do mundo real.
Esta abordagem traz ganhos significativos no que diz respeito a qualidade do seu projeto de software. Claro que isto apenas vale quando as técnicas da Orientação ao Objetos são colocadas em prática.
Já que vale ressaltar que de nada adiante trabalhar com uma linguagem que suporte tal modelo se você continua a programar como se estivesse em uma linguagem procedural, pois assim você perderia todos os beneficios da Orientação a Objetos.
Uma vez bem implementada pode se dizer que a linguagem Orienada a Objetos possibilitam:
• Aumento de produtividade
• Componentização
• Escalabilidade
• Facilidade na manutenção
• Maior flexibilidade do sistema
• Redução das linhas de código programadas
• Reuso de código
• Separação de responsabilidades
• Componentização
• Escalabilidade
• Facilidade na manutenção
• Maior flexibilidade do sistema
• Redução das linhas de código programadas
• Reuso de código
• Separação de responsabilidades
Elementos da Orientação a Objetos
Os pilares deste paradigma são: Abstração, Encapsulamento, Herança e Polimorfismo.
E embora algumas linguagens de progrmação apresentem algumas variações no que diz a orientação a objetos, ainda assim, praticamente todas suportam os seguintes conceitos:
- Atributo
- Abstração
- Classe
- Encapsulamento
- Herança
- Instância de Classe
- Objeto
- Polimorfismo