2012-04-05 2 views
1

매우 커지고 부풀려진 클래스가 있는데이를 별도의 파일로 나누고 싶지만 사용자에게 완전히 투명해야하며 클래스를 사용하는 기존 프로젝트와 호환되어야합니다.

특히 나는 내 자신의 ImageMatrix 클래스를 가지고 있으며 단항 함수 톤, 스칼라가있는 이진 함수 톤, 다른 이미지가있는 이진 함수 톤 등을 정의합니다. 클래스를 깨끗하고 유지 보수하기 위해 저는 각 연산자 클래스를 별도의 파일에 넣으려고합니다.

이러한 방법을 파일에 잘라내어 원본에 포함시키는 방법이 있습니까?

그래서 나는 여전히이 작업을 수행 할 수 좋겠지 만, 방법은 실제로 다른 파일에 상주 : 구현이 매우 성능을 위해 최적화되어 있기 때문에

ImageMatrix img = new ImageMatrix(800, 600, 3); 
    img.clear(0.5f, 0.0f, 0,0f); 
    img.addSelf(anotherImg); 
    img.normalize(); 
    img.abs(); 
    img.addSelf(0.5); 

각 방법은 코드의 약 15 ~ 30 선이다의 같은 Bufferedimage 또는 일반 int []로 달성하기가 불가능합니다. 비슷한 방법을 함께 묶는 주된 이유는 많은 코드 중복입니다. 함수를 추가하거나 오류 검사와 같은 전역 동작을 변경하면 쉽게 일관성있게 유지할 수 있습니다.

답변

1

대리자 메서드를 사용할 수도 있습니다. 즉, 메소드 정의가 여전히 ImageMatrix이지만 다른 클래스에서 구현됩니다. 메서드의 복잡성에 따라 ImageMatrix의 코드 양이 줄어들 수 있습니다.

class ImageMatrix { 

    MatrixHelperOne helperOne = new MatrixHelperOne(); 

    ... 

    public void complexMethod1(Arg arg) { 
     helperOne.complexMethod1(arg); 
    } 

    ... 
} 
+1

이것은 가장 좋은 방법 같아 보입니다. ImageMatrix에서 호출 된 정적 메서드를 사용하여 외부 클래스를 만듭니다. –

2

불행하게도 Java 클래스 정의를 여러 파일로 분할 할 수 없습니다.

코드를 재구성하여 거대한 클래스 정의가 필요하지 않도록하십시오. 종종 이는 getter 및 setter 메서드를 통해 일부 상태를 노출하고 이러한 메서드를 사용하여 기본 클래스에 기능을 추가하는 지원 클래스를 작성하는 것을 의미합니다.

매우 작은 클래스를 원할 경우 ImageFilters과 같은 보조 클래스 또는 ImageNormalizer과 같이 더 좁은 클래스를 추가하는 것이 좋습니다.

+2

"불행하게도"는이 문맥에서 적절한 단어라고 생각하지 않습니다. – bezmax

+0

컴파일 타임에 인라이닝 메서드 호출이 중요한 가상 컴퓨터 코드처럼 편리 할 수있는 경우가 있습니다. –

1

파일간에 Java 클래스를 분할 할 수 없습니다. 각각의 메소드가 자체적으로 포함되어 있다면 정적 메소드로 클래스를 생성 할 수 있다는 것입니다. 따라서 코드를 잘라내어 붙여 넣기 만하면됩니다.

+0

그것에 대해 생각했지만 사용자에게는 투명하지 않습니다. 그러나 phlogratos의 대답에 따라 어쨌든이 작업을 수행했지만 주 클래스에서 대리자 메서드도 만들었으므로 투명 해집니다. –

+0

@ Zom-B : 예, 그렇기 때문에 나는 '어느 정도까지'언급했다. 그런 다음 모든 것을 위해 하나의 큰 래퍼 클래스를 구현해야했습니다. – npinti

1

글쎄, 좀 더 일반적인 클래스를 만들고 더 일반적인 메서드를 넣은 다음 ImageMatrix을 확장하면됩니다. 또한 행렬 조작 함수가 많은 경우에는 코드 중복을 많이 야기 할 수 있습니다. 즉, 공통 코드를 aux 메서드로 이동하고 다른 곳에서 호출하는 대신 다른 메서드에서 동일한 코드를 반복합니다.

관련 문제