객체 지향 프로그래밍으로 데이터 지향 디자인을 적용하는 방법? [닫은]


17

DOD (Data Oriented Design)에 대한 많은 기사를 읽었으며 이해하지만 DOD를 염두에 둔 OOP (Object Oriented Programming) 시스템을 설계 할 수 없습니다. OOP 교육이 저를 방해하고 있다고 생각합니다. 두 가지를 어떻게 혼합해야합니까? 뒤에서 DOD를 사용하면서 멋진 OOP 인터페이스를 만드는 것이 목표입니다.

나는 이것을 너무 보았지만별로 도움이되지 않았다 : https : //.com/questions/3872354/how-to-apply-dop-and-keep-a-nice-user-interface


3
당신은 특정 (게임 관련)이,이 질문은 더 많은 것을 게시 할 필요 까지 너무 일반적입니다.
DeadMG

당신 말이 맞지만 게임 프로그래밍 이외의 다른 분야에서 논의되는 것을 보지 못했습니다.
Pombal

4
@DeadMG : 게임 개발에서 시작된 관행을 언급 할 때를 제외하고는 게임 개발 외부에서 사용되는 데이터 지향 디자인이라는 용어를 본 적이 없습니다 . 데이터 중심 디자인을 생각하고 있다면 같은 것이 아닙니다.

답변:


16

나는 말할 것 노엘 Llopis의 블로그는 아마도 객체 지향 프로그래밍 및 데이터 지향 설계의 조합에 가장 적합한 명령어입니다. 그는 DOD 용어의 창시자 중 하나이며 강력한 C ++ 프로그래머이며 자신의 스타일과 C ++의 OO 기능을 활용하는 방법에 대해 많은 것을 썼습니다.

Noel에 따르면, 그것들을 결합하는 핵심 요소를 불러야한다고 생각합니다.

  • POD 및 비회원, 비 친구 기능을 가능한 많이 사용하십시오. 비회원, 비 친구 기능캡슐화를 향상시키고 데이터, 데이터를 유지하기 때문에 데이터 지향의 핵심 부분입니다.
  • 객체에 "임시"상태를 저장하지 마십시오. 임시 상태가 데이터를 막습니다. 성능을 위해 무언가를 캐시 해야하는 경우 비회원 비 친구 기능이 두 유형을 연결하는 is-a 또는 has-a 관계가 아닌 새로운 클래스에 속합니다.
  • 상태 A 또는 상태 B에있을 수있는 개체는 피하십시오. 두 개체 중 하나는 A이고 다른 하나는 B입니다.
  • 다형성 피하기, 가상 기능 피하기, 템플릿 피하기, 데이터가 구문 상으로 보이는 것을 피하십시오. 실제 동일성이 아니라 동일하게 .

국방부 선전에서 또 다른 큰 이름은 현재 Insomniac의 Mike Acton이지만, 그가 쓴 것을 읽는 것은 실제로 pro-OO (또는 데이터 지향적 인 경우 OO)가 아니라고 말할 것입니다.


답변에 감사드립니다.하지만 당신이 말하는 것은 OO를 어떻게 사용할 수 있는지가 아니라 DOD를 사용하기 위해해야 ​​할 일입니다. 나는 Noel의 블로그, Mike Acton의 rants (: D), DICE의 다른 간행물을 읽었으며 OO가 섞여 있지 않고 DOD를 사용하는 방법을 이해합니다.
Pombal

2
OO가 무엇이라고 생각하십니까? 예를 들어, 클래스와 인스턴스가 여전히 있고 유형 기반 디스패치가 있으며 상속이 여전히있을 수 있습니다 (C ++ 0x의 POD 정의가이를 허용하도록 변경됨). 여전히 운영보다는 데이터로 시작하는 문제를 모델링합니다.

예를 들어 다형성은 객체의 상태와 같이 OOP의 중요한 부분입니다. 데이터 지향 디자인은 게임 엔티티에 애니메이션 가능, 상호 작용 가능, 이동 가능 등 상속 속성을 제공해야합니다. 그것은 모두 물리 나 애니메이션과 같은 각 요소에 필요한 요소만을 제공하는 영리한 데이터 관리자에 달려 있습니다.
danijar

@sharethis : 당신의 반대 의견을 이해한다면 그것은 하위 유형 다형성이 OO의 핵심 기능이라는 것입니다. 나는 그것을 지원하지 않고 OO라고 주장하는 언어가 이상 할 것이라는 데 동의하지만, 그것이 게임이 OO 스타일로 프로그래밍되어 있어도 프로그래밍 게임에서 발생하는 문제에 대한 첫 번째 수단이라는 것을 의미하지는 않습니다 . 또한 국방부는 실제로 특정 종류의 다형성 (명목 하위 유형 지정)을 피하는 것이지만 다른 C ++에서는 ADL을 사용한 임시 다형성 또는 가치 표현에 대한 보장을 통한 구조적 다형성을 장려한다고 주장합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.