vladk1973

Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору All C наступившим всех программеров и прочих рубордовцев! Erazer Если стало тяжко держать в голове всю структуру вызовов, значит необходимо изменить подход в программировании Конечно, можно написать сотни процедур и поместить их все в одном модуле, но это не программирование - это ремесленничество на любительском уровне, имхо. Даже если кажется, что "программка то простая, чего там мудрить", нужно помнить, что аппетит приходит во время еды, возможно, вам к ней еще не раз придется возвратиться, а скорее всего - еще и баги искать. В таком коде какому другому программеру разобраться - это ж сколько человекочасов потратить надо. А грамотный код и почитать приятно, и поддерживать не трудно, да и багов в нем - поверьте, гораздо меньше случается Ну к примеру. Есть условие, в зависимости от которого нам в главной процедуре надо четыре разных процедуры вызвать. И у каждой свои параметры, как оказалось. Сначала то думали, что одинаковые параметры, а потом выяснилось что... Ну и так далее. Вот и начинаем "ветвления" if условие1 then ПолучаемПараметры1 и вызываем процедуру 1; if условие2 then ПолучаемПараметры2 и вызываем процедуру 2; if условие3 или условие4 then begin ПолучаемПараметры3 if условие3 then вызываем процедуру 3 else ПолучаемДополнительныйПараметр4 и вызываем процедуру 4; Такой бардак в коде - сплошь и рядом. Страшно отлаживать что то подобное, особенно когда процедуры имеют невразумительные названия, типа "MyProc12" А что стоит сделать вот так: Реализуешь четыре объекта, и ссылку на базовый класс Код: TMyObject1 = class procedure Initialize; virtual; procedure Run; virtual; end; TMyObject2 = class(TMyObject1) public procedure Initialize; override; procedure Run; override; end; TMyObject3 = class(TMyObject1) procedure Initialize; override; procedure Run; override; end; TMyObject4 = class(TMyObject1) procedure Initialize; override; procedure Run; override; end; TMyClass = class of TMyObject1; | Оформляешь свои события в перечисляемый тип и создаешь массив с индексом этого типа. Код: TMyEvents = (event1,event2,event3,event4); TMyObjectsArray = array[TMyEvents] of TMyClass; | А экземпляры массива пусть будут как раз твои классы Код: initialization MyObjectsArray[event1] := TMyObject1; MyObjectsArray[event2] := TMyObject2; MyObjectsArray[event3] := TMyObject3; MyObjectsArray[event4] := TMyObject4; | По сути все. Все твое ветвление выливается вот в такую вот процедуру Код: procedure Vetvlenie(const MyEvent: TMyEvents); begin with MyObjectsArray[MyEvent].Create do try Initialize; Run; finally Free; end; end; | Плюс ко всему никаких сторонних программ не надо, вся иерархия будет показана в инспекторе объектов. Имхо, красивее и понятнее. |