2014-03-05 5 views
0

저는 OOP 프로그래밍에 대해 궁금한 점이 있습니다. 전제는 꼭지점과 각도 및 벡터 객체와 같은 매우 간단한 기하학적 클래스 집합을 만드는 것이지만 클래스 중 하나 인 클래스 클래스는 약간 다릅니다. 그것은 기본적으로 한 번만 사용하는 메서드 모음입니다. 나중에 프로그램의 다른 곳에서 데이터를 사용하거나 다시 기억할 목적으로 선 개체를 저장하지 않습니다. 내 점을 보여주기 위해 사용 예이 될 것입니다 :OOP 프로그래밍 스타일 결정

class Line: 
    def __init__(self, vertex1, vertex2): 
     self.start = vertex1 
     self.end = vertex2 
    def to_the_left(self, vertex): 
     """Check to see if a vertex is to the left of the line segment.""" 
     #code stuff 

data = Line(Vertex(0, 0), Vertex(10, 0)).to_the_left(Vertex(5, 5)) 

내가 오직 한 번 Line(Vertex(0, 0), Vertex(10, 0))을 인스턴스화 data를 검색 할 수 있습니다. 그래서 저는 모든 것을 클래스에 담는 대신 사용할 수있는 많은 함수를 가지고 있을지도 모른다고 생각했지만, 함수로 변환해야하는 많은 메소드가 있기 때문에 그 일에 회의적이었습니다. 내가 뭘 생각하고 있었는데

또 한가지과 같이 정상적인 기능에 모든 그것의 방법을 변환 한 후 라인 클래스를 만들고 것이었다 :

#continuing from the code above 
def to_the_left(line_start, line_end, vertex): 
    return Line(line_start, line_end).to_the_left(vertex) 
data = to_the_left(Vertex(0, 0), Vertex(10, 0), Vertex(5, 5)) 

어떤 방법 당신은 내가 사용한다고 생각합니까?

+0

Sidenote : class class (object) :와 같은 클래스를 선언해야합니다. 이것은 [새로운 스타일의 클래스] (http://www.python.org/doc/newstyle/)라고 불리우며 링크를 클릭하면 많은 이점을 누릴 수 있습니다. – 2rs2ts

+2

'Line' 객체 *에 대한 직접적인 참조를 저장하지 않았기 때문에 지금 당장 * 당신이 미래에는 안된다는 것을 의미하지는 않습니다. 그렇다면 'Vertex'를'Line' 공장으로 만드는 것은 어떨까요? 'Vertex (0,0) .make_line_with (Vertex (10,0)) ' – roippi

+1

(또한'Line's은 실제로'Segment's입니다. 그냥'Segment'라고 부르면됩니다) – roippi

답변

1

Line에서 여러 작업을 수행해야 할 수도 있으므로 개체를 사용하도록 선택합니다.

예를 들어 길이가 왼쪽에있는 경우와 다른 연산을 계산할 수 있습니다. 알고있는 사람을 지나쳐야 할 수도 있습니다.

Line과 Vertex를 사용하는 대신 고려해야 할 것이 있다면, 둘 다로 작동하는 Vector를 사용하십시오. 정점에 x, y가 있으면 x, y, w가있는 Vector를 만들 수 있습니다. 이 스킴에서 정점은 w = 1이고 라인은 w = 0 - 많은 코드를 단순화합니다.

자세히 알아 보려면 동질적인 좌표를 참조하십시오.

관련 문제