문제

API가 rect :: 포함 (점) 또는 point :: is_inside (rect) 또는 둘 다를 제공해야합니까? 또는 math :: 포함 (포인트, rect)가 대칭입니까?

linesegment :: contains (point), rect :: full_contains (circle) 등에 대해 동일한 Q가 사용됩니다.

도움이 되었습니까?

해결책

Rect::contains(Point) 빌딩 블록이므로 가장 의미가 있습니다. 다른 하나는 모든 특정 모양이 작업을 구현할 것으로 예상하는 것처럼 실제로 필요한 것은 아닙니다. Point 가능한 모든 모양에 대해 알 필요는 없습니다. 같은 대답이 있습니다 LineSegment.

사이의 관계에 관해 Circle 그리고 Rect 대부분의 객체 지향 프레임 워크를 사용하는 것은 더 까다 롭고 확실한 대답이 없습니다. Clos와 같은 다른 스타일의 객체는 일반적인 기능과 방법을 사용하여 문제가되지 않습니다.

다른 팁

전적으로 프로그램 클리너의 표현을 만드는 것에 달려 있으며 해결하려는 문제에 더 잘 맞습니다. 따라서 어느 정도까지, 위의 모든 것은 다른 맥락에서 괜찮을 것입니다.

그러나 일반적으로 말하면, 나는 Rect::contains(Point) 보다는 Point::Is_inside(Rect). 내가 생각하기 때문입니다 Point 클래스는 모든 종류의 클래스 ( 'Circle', 'Hexagon 등)에서 사용되므로 매우 기본적이어야하며 최소 인터페이스 만 포함해야합니다.

Math::contains(Rect, Point) 나의 두 번째 선택이 될 것입니다. 사각형 클래스를 매우 원시적으로 유지하고 너무 많은 "편의"기능을 추가하지 않으려면이 접근법을 사용할 것입니다.

기억해야 할 중요한 것은, 수업의 디자인을 돌로 쓰여진대로 고려하지 않는다는 것입니다. 그냥 가서 가장 잘 보이는 디자인을 선택하십시오 지금. 당신의 요구가 바뀔 때마다 당신은 할 수 있습니다 ~해야 한다 변경하십시오. 이것이 불리는 것입니다 리팩토링.

나는 Math ::에 대한 Frederick과 함께 접근 방식을 포함하지만, 내 의견으로는 가장 큰 단점은 개발자가 방법을 찾는 데 Intellisense의 발견 가능성을 잃는다는 것입니다. 그것은 부스트와 STL이있는 내 쇠고기 중 하나입니다.

rect ::가 결국 포함되는 위치의 예는 iPhone SDK의 문자열을 그리는 방법입니다.

그것은 구현에 따라 다르지만 페더릭처럼 나는 또한 수학 :: 포함 (rect, point), 위에 rect :: 포함 (포인트). 그 이유는 후자가 포함 멤버는 가상으로 기능하며 수업에서 클래스마다 상환됩니다. 이것은 매우 많은 수의 직사각형과 유사한 프리미티브를 다루는 잠재적으로 중요한 오버 헤드를 가질 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top