îÁÒÏÄ, ËÔÏ-ÔÏ ÒÁÚÂÉÒÁÌÓÑ Ó Ada2005 Interfaces?
íÅÎÑ ÉÎÔÅÒÅÓÕÀÔ ÏÄÉÎ ÍÏÍÅÎÔ:
íÏÖÎÏ ÌÉ ÎÁÓÌÅÄÏ×ÁÔØ ÉÎÔÅÒÆÅÊÓÙ Õ ËÏÔÏÒÙÈ ÅÓÔØ ÆÕÎËÃÉÉ Ó ÏÄÉÎÁËÏ×ÙÍÉ
ÓÉÇÎÁÔÕÒÁÍÉ. òÁÎØÛÅ ÎÅ ÂÙÌÏ ÍÎÏÖÅÓÔ×ÅÎÎÏÇÏ ÎÁÓÌÅÄÏ×ÁÎÉÑ, ×ÏÔ É ÐÒÏÂÌÅÍ
ÎÅ ×ÏÚÎÉËÁÌÏ.
á ÔÅÐÅÒÑÞÁ, ÅÓÌÉ ÓÉÇÎÁÔÕÒÙ ÆÕÎËÃÉÊ ÎÅ ÄÏÌÖÎÙ ÓÏ×ÐÁÄÁÔØ, ÐÒÉÄÅÔÓÑ × ÉÍÑ
ÆÕÎËÃÉÊ ×ÓÅÇÄÁ ÉÍÑ ÉÎÔÅÒÆÅÊÓÁ ×ÐÉÈÉ×ÁÔØ (ÞÔÏÂÙ, ÎÅ ÄÁÊ âÏÇ, ÓÉÇÎÁÔÕÒÙ ÎÅ
ÓÏ×ÐÁÌÉ! äÏ×ÏÌØÎÏ ËÏÒÑ×ÏÅ ÒÅÛÅÎÉÅ ÐÏÌÕÞÁÅÔÓÑ :(
÷ÒÏÄÅ, ÉÍÅÑ ÔÁËÏÊ ÍÏÝÎÙÊ ÍÅÈÁÎÉÚÍ, ËÁË ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ×ÓÅ ÜÔÏ ÓÄÌÅÁÔØ
ÌÅÇËÏ. îÏ ×ÏÚÍÏÖÎÏ ÌÉ?
package i2 is
type ii is interface;
type ii_ref is access all ii'class;
procedure Set(this : in out ii; n : in positive) is abstract;
function Get(this : in ii ) return positive is abstract;
end i2;
package i1 is
type ii is interface;
type ii_ref is access all ii'class;
procedure Set(this : in out ii; n : in positive) is abstract;
function Get(this : in ii ) return positive is abstract;
end i1;
×ÙÈÏÄÉÔ ÞÔÏ-ÔÏ ÔÉÐÁ ÔÁËÏÅ:
with i1,i2;
package real_type is
type p is new i1.ii and i2.ii with record
num1 : positive;
num2 : positive;
end record;
-- ÒÅÁÌØÎÙÅ ÆÕÎËÃÉÉ ÔÉÐÁ p
procedure Set_i1(...)
function Get_i1(...)
procedure Set_i2(...)
procedure Get_i2(...)
-- ÍÁÐÉÎÇ ÜÔÉÈ ÆÕÎËÃÉÊ ÎÁ ÁÂÓÔÒÁËÔÎÙÅ ÆÕÎËÃÉÉ ÉÎÔÅÒÆÅÊÓÏ×
procedure i1.Set(...) renames Set_i1;
procedure i1.Get(...) renames Set_i1;
...
Á ×ÙÚÏ×, ËÁË ÏÂÙÞÎÏ:
v : real_type.p;
...
i1.Set(v, 100); -- ×ÓÅ ÐÕÔÅÍ! ÉÚÍÅÎÑÅÍ num1
i2.Set(v, 200); -- ×ÓÅ ÐÕÔÅÍ! ÉÚÍÅÎÑÅÍ num2
ÐÒÁ×ÄÁ ÄÌÑ ÐÏÄÏÂÎÙÈ ËÌÁÓÓÏ× ÔÏÞÅÞÎÁÑ ÎÏÔÁÃÉÑ ÕÖÅ ÎÅÄÏÓÔÕÐÎÁ:
v.Set(100); -- ËÏÔÏÒÙÊ ÉÚ?
(ÎÏ ÍÏÖÎÏ ÂÙÌÏ ÂÙ ÓÄÅÌÁÔØ É ÔÁË (ÎÅ ÐÉÎÁÔØ, ÎÏÇÁÍÉ!:) :
v.i1.Set(100); -- É ËÒÁÓÉ×Ï É ÐÏÎÑÔÎÏ, ÎÏ ËÏÍÐÉÌÑÔÏÒ
-- ÒÁË ÍÏÚÇÏ× ÐÏÌÕÞÉÔ :(
÷ÌÁÄ
Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти