Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
11-1246026537
Nikfel
2009-06-26 18:28
2013.06.16
Как вставить строку в TkolMemo?


15-1359703096
DevilDevil
2013-02-01 11:18
2013.06.16
XML: Проект "ApolloSAX"


15-1359970962
Empleado
2013-02-04 13:42
2013.06.16
compressed http/https


15-1360232154
Interrupt Directive
2013-02-07 14:15
2013.06.16
Внешний диск - не работает.


2-1352499523
Tcount
2012-11-10 02:18
2013.06.16
ListView - текущее кол-во выделенных строк в режиме "Multiselect"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский