2012-02-21 4 views
0

Ada에서 절차와 기능으로 간단한 패키지를 얻었습니다. 모든 기능과 절차를 보호 된 유형으로 갖고 싶습니다.Ada protected types

간단한 .adb이고에 대한

package body Pack is 

    procedure procedure1 (B : in out Integer) is 
    begin 
    B := new Integer; 
    end procedure1; 

    procedure procedure2 (B: in out Integer) is 
    begin 
    B.Cont(B.First-1) := 1; 
    end procedure2; 

    function procedure3 (B : Integer) return Boolean is 
    begin 
    return B.First = B.Last; 
    end procedure3; 

end pack; 

및 또는 간단한 .ads 나는 그것에 대해 어떻게 갈 것이라고

package body Pack is 

    procedure procedure1 (B : in out Integer); 

    procedure procedure2 (B: in out Integer); 

    function procedure3 (B : Integer) return Boolean; 

end pack; 

파일?

+1

코드가 컴파일하는 것이 먼 길입니다. 'procedure1'에서, B는'Integer'로 선언되지만 접근 값을 할당합니다 ('new Integer'). 그리고 다른 두 개의 서브 프로그램에서 B는 레코드 유형 인 것으로 보입니다. 그리고 예약어'body'는 패키지 스펙에 나타날 수 없습니다. –

+1

1> 유효한 Ada 코드가 아닙니다. 2> 동시성 에서처럼 보호 된 유형을 의미 했습니까? 그렇다면 여기에서 읽으십시오 : http://en.wikipedia.org/wiki/Ada_%28programming_language%29#Concurrency – NWS

답변

5

보호 된 유형에 대한 사항은 (동시 액세스에 대해) 무언가를 보호한다는 것입니다. 코드에서 보호하고자하는 것이 무엇인지보기가 어렵습니다.

말하자면, 당신이 스레드 안전 증가하고 싶었다, 경우에, 당신은 여기까지 완벽한으로부터 (

package Pack is 
    protected type T is 
     procedure Set (To : Integer); 
     procedure Increment (By : Integer); 
     function Get return Integer; 
    private 
     Value : Integer := 0; 
    end T; 
end Pack; 

같은 사양이있을 수 있습니다, 당신은 Value 초기를 지정할 수 있도록하고 싶습니다 T을 선언했지만 복잡해지기 시작했습니다.

이 경우 보호 할 대상은 Value입니다. 두 작업은 "동일한"한 번에 Increment, By => 3 하나와 By => 4 하나를 호출하면 Value이 몸은

package body Pack is 
    protected body T is 
     procedure Set (To : Integer) is 
     begin 
     Value := To; 
     end Set; 
     procedure Increment (By : Integer) is 
     begin 
     Value := Value + By; 
     end Increment; 
     function Get return Integer is 
     begin 
     return Value; 
     end Get; 
    end T; 
end Pack; 
처럼 보일 수 7

에 의해 증가되는 끝 있는지 확인하려면

추천 도서 : 보호 유형에 관한 Wikibooks section.

+0

+1 (내 것보다 더 좋은 링크) : – NWS

+0

패키지 몸체 안의 보호 된 객체를 숨길 수도 있습니다. 스펙 파일에있는 랩퍼 서브 프로그램의 스펙. – oenone