Здравствуйте,
Вопрос в следующем: есть четыре следующих класса:
TBClass = class(TObject)
end;
TAClass = class(TObject)
private
fBs: array of TBClass;
protected
function getBs(Index: Integer): TBClass;
public
constructor Create(BCount: Integer);
property Bs[Index: Integer]: TBClass read getBs;
end;
TBClass1 = class(TBClass)
end;
TAClass1 = class(TAClass)
protected
function getBs(Index: Integer): TBClass1;
public
constructor Create(BCount: Integer);
property Bs[Index: Integer]: TBClass1 read getBs;
end;
...
constructor TAClass.Create(BCount: Integer);
var
i: Integer;
begin
for i := 0 to BCount-1 do
fBs[i] := TBClass.Create;
end;
function TAClass.getBs(Index: Integer): TBClass;
begin
Result := fBs[Index];
end;
constructor TAClass1.Create(BCount: Integer);
var
i: Integer;
begin
for i := 0 to BCount-1 do
fBs[i] := TBClass1.Create;
end;
function TAClass1.getBs(Index: Integer): TBClass1;
begin
Result := TBClass1(fBs[Index]);
end;
В ООП по идее никаких проблем с такими манипуляциями не возникает. Вот только некорректно на UML получается: между TAClass и TBClass имеется ассоциация по отношению агрегирования. Между классами TAClass1 и TBClass1 по идее тоже. Но по спецификации UML TAClass1 и TBClass1 должны наследовать отношения своих потомков. А здесь получается, что новая ассоциация перекрывает родительскую. И как с этим быть?
... << RSDN@Home 1.1.4 beta 5 rev. 395>>