Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.06.16;
Скачать: CL | DM;

Вниз

как сделать?   Найти похожие ветки 

 
картман ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.009 c
11-1246026537
Nikfel
2009-06-26 18:28
2013.06.16
Как вставить строку в TkolMemo?


2-1352492131
123456789igor
2012-11-10 00:15
2013.06.16
удалить строки содержащие определенные ячейки


15-1359237872
Rouse_
2013-01-27 02:04
2013.06.16
Перехват АПИ


15-1358964370
Mozart
2013-01-23 22:06
2013.06.16
Вырезать из множества jpg кусок


15-1359713619
asdasd
2013-02-01 14:13
2013.06.16
win8 убрать черный квадрат с раб стола