2011-01-31 4 views
1

시뮬레이션 모델에 표면에 에이전트가 포함되어 있습니다. 상담원은 class Agent, 위치는 class Point, 표면은 class Surface으로 표시됩니다. 각각의 점은 실제로 숫자의 쌍입니다. 에이전트의 움직임을 모델에표면의 모델링 포인트

, 나는 그가에서의 어떤면 알 필요 (토러스에, 그는이 땅의 끝을 공격하지 않을 것, 예를 들어,하지만, 실린더, 그는 않습니다.)

내 질문 여부 개체에 대한 참조 인 인스턴스 특성으로 class Point을 추가해야합니다.

내가 할 경우 class Point이 복잡해지고 효율이 떨어집니다 (숫자 쌍을 처리하는 대신 숫자 쌍과 참조를 처리 할 것입니다). 단일 프로그램 실행시 의 인스턴스가 하나만 인스턴스화되기 때문에 특히 성가신 일입니다.

내가하지 않으면 class Agentmove 방법으로 제공 할 수 없습니다. 대신 표면과 개별 에이전트를 모두 알고있는 외부 클래스에서 에이전트의 움직임을 모델링해야합니다. 이 접근법은 논리적으로 덜 매력적입니다.

+0

표면에 대한 정보를'에이전트'에 저장할 수 있습니까? 그것은 나에게 가장 자연스러운 접근법처럼 보입니다 ... – senderle

+0

실제로 나는 게시물을 오독하고 그가 의미하는 바를 생각했습니다. 포인트에 추가하는 것이 이상하게 보입니다. – Spacedman

+0

예, 에이전트에 추가하는 것은 완벽합니다. 선택의 여지는 실제로 중복 된 정보를 유지하는 것이 괜찮은지 여부입니다. – max

답변

1

왜 나는 여분의 속성을 추가하는 것이 효율성 문제인지 잘 모르겠다. 속도에 영향을 미치지 않을 것이고 객체 크기를 10 바이트 정도 증가시킬 뿐이다. 따라서 수백만 명의 에이전트 (Missterrr Annnderssssonnn)를 다루지 않는다면 걱정하지 않을 것입니다.

하나의 모듈은 하나의 모듈에서 로컬로 생성되고 모듈 메소드 (전역보다 조금 더 깔끔함)를 통해 액세스 할 수 있습니다. 그래서 같은 :

import TheSurface 
class Agent: 
    ... 
    def Move(self,x,y): 
    surface = TheSurface.getSurface() 
    surface.canIMoveTo(x,y) 
    .... 

는 TheSurface.py 프로그램 시작시 호출 할 필요가 표면을 생성, 초기화 방법의 일종있을 것입니다. @DesignPattern 사람들 : 이것은 '싱글 톤'패턴입니까?

표면으로 에이전트를 생성하여 속성으로 저장하는 것이 더 좋습니다. 나는 왜 당신이 포인트에 그것을 추가 할 것인지 모르겠다.

  • 상담원이 포인트
  • 당신이 포인트가 표면에 있다고 추론 할 수 따라서

    , 그리고에 있습니다

    • 요원은 표면에 :

      구조는 같은 것입니다 에이전트에게 어떤 방식 으로든 관련이없는 Points를 다루지 않는 한 별도로 모델링 할 필요는 없지만 어쨌든 Surface의 컨텍스트를 갖게됩니다. 그것은 항상 "맞습니다. 이제이 표면에 나무를 만들어야합니다 - createTree (표면, 점)"등. 표면의 모든 것은 표면과 점을 가지고 있습니다.

    +0

    그래, 그게 싱글 톤이야 -하지만 여기서 싱글 톤을 만들지는 모르겠다. – senderle

    +0

    참. Surface 객체로 에이전트를 생성하기 만하면됩니다. OP는 Surface 속성을 Point에 추가하려고하지 않았으므로 Agent에 Surface 속성을 추가하지 않았습니다. 더 좋은 방법이 될 것입니다. 나는 ... – Spacedman

    +0

    해답을 가져 주셔서 감사합니다. 관련된 질문이 있지만 댓글을 달기에는 너무 큽니다. 여기에 있습니다. http://stackoverflow.com/questions/4860686/where-in-class-hierarchy-should-instance-methods-be-written. – max