Elemar DEV

Tecnologia e desenvolvimento

SNIPPET: O que “qualifica” um design como Orientado a Objetos

Olá. Tudo certo?

Como sabem, estou utilizando  Ask.fm como canal de comunicação com a comunidade. Tenho recebido algumas perguntas bem interessantes. Para algumas delas, desejo saber também a opinião de outras pessoas. Por isso, estou trazendo aqui para o blog como snippets (veja a lista).

Pergunta:

É muito comum vermos em livros, palestras, artigos e afins exemplos de código que não são orientado a objetos. Para você o que faz com que de fato um design seja considerado OO?

Minha resposta:

Se me permite, começo com uma resposta que não é minha. Parto de uma resposta do Uncle Bob no clássico “Clean Code”

Objetos, invariavelmente, ocultam detalhes de sua implementação (a forma como armazenam dados, por exemplo) através de abstrações. Ou seja, fornecem interfaces abstratas que permitem ao usuário manipular a essência dos dados, sem, entretanto, explicitar a implementação. Veja, uma classe que expõe todos os seus atributos através de propriedades (getters e setters) não define objetos – define estruturas de dados.

Objetos ocultam seus dados “atrás” de abstrações e fornecem funções que operam sobre esses dados. Estruturas de dados não ocultam seus dados e geralmente não têm funções significativas ao contexto.

O código procedural (que usa estruturas de dados) facilitam a adição de novas funções sem que sejam necessárias modificações nas estruturas de dados. Código OO, por outro lado, facilita a adição de novas classes sem que sejam necessárias modificações em funções existentes.

Código procedural dificulta a inclusão/modificação de novas estruturas de dados porque implicam na modificação de diversas funções. Código OO dificulta a adição de novas funções (comportamentos) porque implica na revisão de diversas classes.
Bom design orientado a objetos implica no respeito da “Law of Demeter” (Talk to friends, not to strangers). Aliás, respeita os princípios SOLID.

Acho que é isso.

O que você acha?

2 comentários em “SNIPPET: O que “qualifica” um design como Orientado a Objetos

  1. Daniel Zhe
    23/04/2013

    Embora eu não consiga colocar 100% em prática, pra mim design orientado a objetos simplesmente é um design em que você consegue fazer uma analogia simples entre as classes e o comportamento delas com o mundo real, não só suas definições.

    Acho que tão importante quanto definir classes bonitas, é a forma como essas classes interagem entre si.

    Exemplo:
    Classe Button e classe Window.

    Você não pede pro Button onde ele está dentro da Window, pois ele se quer sabe que está dentro de uma Window. Você pede pra Window onde ela enfiou a desgraça do Button.

    Porém uma classe Car e Road, pode ser interessante pedir pro Car onde ele está na Road. Parece-me mais natural, já que ele tem GPS. :D

  2. ericlemes
    23/04/2013

    Elemar,

    Gostei da sua resposta. Eu acredito nos 4 pilares da OOP. Herança, Abstração, Encapsulamento e Polimorfismo. Mas prefiro pensar “por que” design orientado a objetos.

    Baseado na linha de pensamento minha de hoje (ela anda mudando tanto ultimamente), iria nessa linha: http://ericlemes.com/2013/04/08/unclebob-dependencyinversion/

    Acho que essa resposta, tbém do tio Bob, define bem o problema que o design orientado a objetos veio resolver. Se vc consegue inverter as dependências, consegue quebrar a complexidade. Todo o resto pra mim gira em torno disso.

    Abraço,

    Eric

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Informação

Publicado às 23/04/2013 por em Post e marcado , .

Estatísticas

  • 626,083 hits
%d blogueiros gostam disto: