2012-01-24 5 views
4

matlab 설명서에서 도움말을 찾거나 인터페이스를 만들기 위해 matlab 상속 및 클래스 생성자를 사용하는 것에 관한 이전 질문이 있습니다. 패키지 안에 깔끔하게 정리하십시오. 대신 다음과 같이 내 코드를 통해 드래그의슈퍼 및 하위 클래스 생성자와의 인터페이스

나는 그것을 축소 할 수 있습니다 :

슈퍼 클래스 Super 몇 서브 클래스 Sub1 Sub2있다 +MyPkg 패키지를 ... 내 프로퍼티와 메소드의 대부분은 슈퍼에서 정의되도록 Sub1Sub2은 정말로 단순한 루틴을 위해 생성자를 사용하거나 Super에서 오버로드 된 몇 가지 메소드를 사용합니다. 내가 따로 관련 인수에서 슈퍼와 관련된 인수를 유지하려는이 경우

a = MyPkg.Super(args).Sub1(args) 
b = MyPkg.Super(args).Sub1(args).Sub1Method 

을 :

는 어떻게 나는 다음과 같은 통화를 사용할 수있는 인터페이스를 지원하는 classdefs 및 생성자를 작성 가야합니까 가독성과 조직을위한 Sub1.

질문을 환영합니다.

편집 :

아래의 허용 대답 일부 브라우징을 고려한 후에 나는 위의 인터페이스가 내 데이터 분석 응용 프로그램에 더 적절한 방법에 대한, OO의 정신에 정말로하고 결론에 도달 접근법은 객체 또는 객체 속성의 셀 배열을 채우는 생성자가있는 핸들 클래스로 구성됩니다. 클래스는 핸들 클래스이므로 원하는 메서드를 생성하기 위해 메서드를 사용할 수 있습니다. 즉,

% in +MyPkg\ 

classdef Super < handle 
    properties 
     outputArray 
    end 
    methods 

    function self = Super(args) 
     self.outputArray=load_values(args); 
    end 

    function out = do_analysis(self,params) 
     % do some analysis 
    end 

    end 
end 

다음은 그런 다음이 사용하기 : 다른 사람이 이러한 문제, 당신이 할 수있는 귀하의 질문에 대하여

답변

2

을 처리하는 데 도움이

data1 = MyPkg.Super(args) 
% Populate the outputArray 
analysis1 = data1.do_analysis(params) 

희망 당신이 상속을 사용한다면. 직접 슈퍼 클래스 생성자 만 하위 클래스에서 호출 할 수 있으며 하위 클래스에서만 상위 클래스 생성자를 호출 할 수 있습니다. Ref.

그런 슈퍼 클래스를 공개하면 상속의 기본을 깨뜨릴 수 있습니다. 어쩌면 이런 종류의 액세스가 필요한 경우 ou는 다른 모델, 어쩌면 구성 ("a"대신 "a"가 있음)을 생각해야합니다.

+0

답변 해 주셔서 감사합니다. 마지막 문장에서 무슨 뜻인지 더 설명해 주시겠습니까? –

+2

예. 컴포지션은 하나의 객체가 다른 객체를 "포함"하도록합니다. Class1은 Class2의 속성에 있고 Class2는 Class1을 "블랙 박스"로 사용합니다. 이것은 종종 클래스를 "장식"하는 데 사용됩니다. 즉, 클래스 위에 다른 인터페이스를 배치하는 데 사용됩니다. 여기서 큰 토론이 있습니다 : http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance 여기 : http : //lostechies.com/chadmyers/2010/02/13/composition-versus-inheritance/ – Marc

+0

자주 사용하는 궁극적 인 결정자는 런타임에 한 클래스를 다른 클래스로 대체해야하는지 스스로에게 묻습니다. GUI의 좋은 예 : 간단한 GUI는'Window' 부모와'Modal'과'NonModal' 대화 상자의 두 가지 하위 유형을 가질 수 있습니다. 스크린 상에 그림을 그릴 때 윈도우의 목록을 유지해야하며 그것이 어떤 유형인지 상관하지 않을 것이라고 상상할 수 있습니다. 상속을 사용하여 코드 및 기능을 공유하는 경우 구성을 선호해야합니다. – Marc

관련 문제