Como aplicar o Design Orientado a Dados com a Programação Orientada a Objetos? [fechadas]

17

Eu li muitos artigos sobre Design Orientado a Dados (DOD) e compreendo, mas não consigo projetar um sistema de Programação Orientada a Objetos (OOP) com o DOD em mente, acho que minha educação em OOP está me bloqueando. Como devo pensar para misturar os dois? O objetivo é ter uma boa interface OOP enquanto estiver usando o DOD nos bastidores.

Eu vi isso também, mas não ajudou muito: /programming/3872354/how-toply -apply - dop - and - keep-a - nice - user - interface

Pombal
fonte
3
Você precisa postar algo muito mais específico (e jogo-relacionado), esta questão é muito demasiado geral.
DeadMG 02/02
Você está certo, mas eu não vi isso sendo discutido em outros campos além da programação de jogos.
Pombal
4
@DeadMG: Eu nunca vi o termo design orientado a dados usado fora do desenvolvimento de jogos, exceto quando me referi a práticas originadas no desenvolvimento de jogos. Se você está pensando em design orientado a dados, isso não é a mesma coisa.

Respostas:

16

Eu diria que o blog de Noel Llopis é provavelmente a melhor instrução para uma combinação de programação orientada a objetos e design orientado a dados. Ele é um dos criadores do termo DOD, é um forte programador de C ++ e escreveu bastante sobre seu estilo e como ele tira proveito dos recursos de OO do C ++.

Eu acho que se eu chamar os elementos principais de combiná-los, de acordo com Noel:

  • Use as funções POD e não membro e não amigo, tanto quanto possível. As funções não membros e não amigas melhoram o encapsulamento e são uma parte essencial da orientação aos dados, pois mantêm os dados, dados.
  • Evite armazenar o estado "temporário" em seus objetos. O estado temporário obstrui seus dados. Se você precisar armazenar em cache algo (por exemplo, desempenho), que pertença a uma nova classe, com funções não pertencentes a não-amigos vinculando os dois tipos, não é um relacionamento nem é nem tem.
  • Evite objetos que possam estar no estado A ou no estado B. Prefira alternar entre dois objetos, um dos quais é A e um dos quais é B.
  • Evite polimorfismo, evite funções virtuais, evite modelos, evite qualquer coisa que faça com que seus dados tenham a aparência sintática da mesmice, e não da mesmice real .

O outro grande nome da propaganda do DOD agora é Mike Acton, do Insomniac, mas, lendo o que ele escreveu, eu diria que ele não é realmente pró-OO (ou anti-OO, desde que ainda seja orientado a dados).


fonte
Obrigado pela resposta, mas o que você está dizendo é o que devo fazer para usar o DOD, não como eu poderia usar o OO com ele. Eu li o blog de Noel, divertidos de Mike Acton (: D), as publicações da DICE entre outros e eu entendo como usar DOD, não apenas com OO misturado.
Pombal
2
O que você acha que é OO? Eu chamaria a maior parte do código OO de Noel, por exemplo - ainda existem classes e instâncias, ainda há despacho baseado em tipo, ainda pode haver herança (a definição de POD do C ++ 0x foi alterada para permitir isso). Ainda se modela problemas começando com dados, em vez de operações.
Por exemplo, o polimorfismo é uma parte significativa da OOP, assim como os estados do objeto. O design orientado a dados deve ser para fornecer às entidades do jogo propriedades como animar, interagir, mover, ... usando herança. Tudo depende de um gerenciador de dados inteligente, que fornece apenas as entidades necessárias para cada componente, por exemplo, física ou animação.
31512 danijar
@ Sharethis: Se eu entendo sua objeção, é que o polimorfismo de subtipo é uma característica essencial do OO. Eu concordo que uma linguagem que afirma ser OO sem suporte seria estranha, mas isso não significa que é uma ferramenta de primeiro recurso para o tipo de problemas encontrados nos jogos de programação, mesmo quando o jogo é programado no estilo OO . Eu também argumentaria que o DOD é realmente sobre evitar tipos particulares de polimorfismo (subtipagem nominal), mas encorajador de outros (em C ++, polimorfismo ad hoc com ADL ou polimorfismo estrutural por meio de garantias sobre representações de valor).