Форум: "Прочее";
Текущий архив: 2013.06.16;
Скачать: [xml.tar.bz2];
Внизкак сделать? Найти похожие ветки
← →
картман © (2013-02-08 00:14) [0]Всем привет.
Есть объект:
TMyObj = class
FText: string;
FMyFlag: Boolean;
...
end;
var
List: TOnjectList;
procedure ProcessTexts;
begin
Process1;
Process2;
..
ProcessN;
end;
procedure ProcessI;
var
i: Integer;
begin
for i := 0 to List.Count - 1 do
If c.FMyFlag then
Proicess(FMySign)
end;
вот что выделено жирным - как бы так сделать, что б во все места не вставлять проверку флага?
← →
картман © (2013-02-08 00:16) [1]
> If c.FMyFlag then
List[i].MyFlag, конечно
← →
Rouse_ © (2013-02-08 00:18) [2]
If c.FMyFlag then
for i := 0 to List.Count - 1 do
Proicess(FMySign)
или я не правильно понял? :)
← →
Rouse_ © (2013-02-08 00:19) [3]
> картман © (08.02.13 00:16) [1]
>
> > If c.FMyFlag then
>
> List[i].MyFlag, конечно
тогда никак, по крайней мере на текущем алгоритме.
← →
Ega23 © (2013-02-08 00:31) [4]
procedure Process(Value: TMyObj)
begin
if not Value.FMyFlag then Exit;
.....
end;
procedure ProcessI;
var
i: Integer;
begin
for i := 0 to List.Count - 1 do
Proicess(list[i]);
...
end;
Если я правильно понял, ессно...
← →
картман © (2013-02-08 00:34) [5]
> или я не правильно понял? :)
сюда сразу писал - ошибся.
"если у текста есть нужный флаг - обрабатываем"
> тогда никак, по крайней мере на текущем алгоритме.
угу... а как (и можно ли) сделать: есть массив текстов, их обрабатывает куча всяких алгоритмов и все по типу: Обработать(массив)... да, видимо, никак...
← →
Inovet © (2013-02-08 00:35) [6]Process в TMyObj нельзя поместить?
← →
картман © (2013-02-08 00:36) [7]
> Ega23 © (08.02.13 00:31) [4]
>
> procedure Process(Value: TMyObj)
> begin
> if not Value.FMyFlag then Exit;
> .....
> end;
Шикарно.
Я вот только с наследованием не дружу, увы - по-другому как это во все места вставить не представляю...
Лан, будет мне наука
← →
картман © (2013-02-08 00:36) [8]
> Inovet © (08.02.13 00:35) [6]
>
> Process в TMyObj нельзя поместить?
нет
← →
Inovet © (2013-02-08 00:41) [9]Ну, как бы флаг указывает обрабатывать или нет, следовательно должно внутри самого класса отслеживаться.
← →
картман © (2013-02-08 00:44) [10]
> Ega23 © (08.02.13 00:31) [4]
>
> procedure Process(Value: TMyObj)
> begin
> if not Value.FMyFlag then Exit;
> .....
> end;
>
> procedure ProcessI;
> var
> i: Integer;
> begin
> for i := 0 to List.Count - 1 do
> Proicess(list[i]);
> ...
> end;
>
> Если я правильно понял, ессно...
там так:
MyProcessorI.Process(List[i]);
главное, не забыть в будущем делать иерархию.
Кстати, насчет иерархии: не люблю. И все тут. Аргументы за?
← →
Ega23 © (2013-02-08 00:44) [11]
> нет
Уверен?
← →
Ega23 © (2013-02-08 00:45) [12]
> Кстати, насчет иерархии: не люблю. И все тут. Аргументы за?
полиморфизм.
← →
картман © (2013-02-08 00:46) [13]
> Inovet © (08.02.13 00:41) [9]
>
> Ну, как бы флаг указывает обрабатывать или нет, следовательно
> должно внутри самого класса отслеживаться.
да, блин, как?
есть несколько классов, обрабатывающих текст(объект). И что делать? Внутрь объекта добавлять обрабатывальщики, а потом по ним проходиться? Нафик - так мне больше переделывать.)))
← →
знайка (2013-02-08 00:49) [14]те что годны, складывать в отдельный список, и шуровать по нему
а ваще фикня какая-то у вас :)
при чем тут иерархия не понятно..
← →
картман © (2013-02-08 00:50) [15]
> Ega23 © (08.02.13 00:45) [12]
> полиморфизм.
по вашим критериям я пишу "hello world"... по крайней мере в той части, которая касается, собсна, взаимодействия объектов... Но, если не трудно, приведи, пожалуйста, удачный пример использования полиморфизма... я много где работал до этого и пока нигде не видел реальной нужды в этом... или не понял? Не знаю.
← →
Inovet © (2013-02-08 00:56) [16]> [15] картман © (08.02.13 00:50)
> не видел реальной нужды в этом... или не понял?
С VCL работал?
← →
картман © (2013-02-08 00:57) [17]
> знайка (08.02.13 00:49) [14]
> при чем тут иерархия не понятно..
как-нть так:
TAncestor = class
procedure Process(aObj: TMyObject); virtual;
processText(aObj: TMyObject); abstract;
end;
procedure TAncestor.Process;
begin
if not aObj.TMyFlag then
Exit;
ProcessText(aObj);
end;
← →
картман © (2013-02-08 00:58) [18]
> С VCL работал?
пример можно?
← →
знайка (2013-02-08 01:01) [19]
> > при чем тут иерархия не понятно..
> как-нть так:
и где она тут?
← →
Inovet © (2013-02-08 01:01) [20]> [18] картман © (08.02.13 00:58)
> пример можно?
Да вся она на этом построена. Для примера хоть ТДатасет возьми, хоть ТКонтрол.
← →
знайка (2013-02-08 01:02) [21]с TObject начинать надо
← →
Inovet © (2013-02-08 01:02) [22]В твоём случае понять бы, что надо сделать, прежде чем советовать.
← →
картман © (2013-02-08 01:02) [23]
> Inovet © (08.02.13 01:01) [20]
ты сюда можешь скопировать пару-тройку-сток, наглядно демонстрирующих это?
← →
Ega23 © (2013-02-08 01:05) [24]
TAncestor = class
protected
FValue: string;
function GetStringValue: string; virtual;
public
constructor Create(Value: string);
procedure Execute;
end;
TFirstChild = class (TAncestor)
protected
function GetStringValue: string; override;
end;
TSecondChild = class (TAncestor)
protected
function GetStringValue: string; override;
end;
TThirdChild = class (TFirstChild)
protected
function GetStringValue: string; override;
end;
constructor TAncestor.Create(Value: string);
begin
inherited Create;
FValue := Value;
end;
procedure TAncestor.Execute;
begin
ShowMessage(GetStringValue);
end;
function TAncestor.GetStringValue: string;
begin
Result := FValue;
end;
function TFirstChild.GetStringValue: string;
begin
Result := inherited + " а тут, типа, ещё и TFirstChild";
end;
function TSecondChild.GetStringValue: string;
begin
Result := "а тут просто TSecondChild, Value не нужно";
end;
function TThirdChild.GetStringValue: string;
begin
Result := inherited + #13#10 + "ещё и TThirdChild";
end;
procedure Foo;
var
list: TObjectList;
i: Integer;
begin
list := TObjectList.Create;
try
list.Add(TAncestor.Create("чё за.. ?!?!"));
list.Add(TFirstChild.Create("И ты, Брут??!?!"));
list.Add(TSecondChild.Create("При Сталине"));
list.Add(TFThirdChild.Create("тру-ля-ля"));
for i := 0 to list.Count - 1 do
TAncestor(list[i]).Execute;
finally
list.Free;
end;
end;
← →
картман © (2013-02-08 01:05) [25]
> знайка (08.02.13 01:02) [21]
>
> с TObject начинать надо
Вот! Вот, кто мне приведет пример обоснованного, полезного и бескомпромиссного применения полиморфизма.
Заранее благодарен.
← →
Ega23 © (2013-02-08 01:07) [26]
> Вот! Вот, кто мне приведет пример обоснованного, полезного
> и бескомпромиссного применения полиморфизма.
> Заранее благодарен.
TObject.Destroy
← →
картман © (2013-02-08 01:09) [27]
> Ega23 © (08.02.13 01:05) [24]
Спасибо. Но, все ж, я спрашивал не о синтаксисе(или как это назвать?). Мне интересен случай реального применения полиморфизма. Именно реальный! Где он моежт помочь - код сократить или понятность, ай еще какие плюсы.
← →
Inovet © (2013-02-08 01:09) [28]> [23] картман © (08.02.13 01:02)
> ты сюда можешь скопировать пару-тройку-сток
Парой-тройкой не продемонстрировать. Берём любимый всеми TButton и TButtonGlyph, и смотрим их иерархию и виртуальные методы.
А простые примеры в учебниках есть, но же из практики просил.
← →
картман © (2013-02-08 01:09) [29]
> TObject.Destroy
убедил. Еще?
← →
Inovet © (2013-02-08 01:11) [30]> [27] картман © (08.02.13 01:09)
> Именно реальный!
А это какой? Из книжки что ли?
← →
картман © (2013-02-08 01:15) [31]
> > Именно реальный!
>
> А это какой? Из книжки что ли?
ты забавен
← →
Ega23 © (2013-02-08 01:38) [32]
> убедил. Еще?
TList.Notify, TStrings вообще чуть менее, чем полностью виртуальный.
← →
Inovet © (2013-02-08 01:41) [33]> [31] картман © (08.02.13 01:15)
> ты забавен
Вопросы странные о практическом применении полиморфизма, и, вроде, очевидные ответы.
← →
Inovet © (2013-02-08 02:02) [34]> [28] Inovet © (08.02.13 01:09)
> и TButtonGlyph
TBitBtn т.е..
← →
Германн © (2013-02-08 02:30) [35]
> Вот! Вот, кто мне приведет пример обоснованного, полезного
> и бескомпромиссного применения полиморфизма.
Того я сразу бескомпромиссно назову дураком. И попробуй мне возразить! :)
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.06.16;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.005 c