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

Вниз

Создать класс или обойтись процедурками.   Найти похожие ветки 

 
ekto ©   (2008-07-11 12:49) [0]

Доброго времени суток.

 В программе необходимо производить некие действия. Алгоритм реализуется 7-9 процедурами/функциями(пока не делал, но, ориентировочно, столько). Повторно код не будет использоваться.

 Вопрос: стоит ли создавать класс или обойтись процедурами?


 
Dennis I. Komarov ©   (2008-07-11 12:50) [1]

А при чем тут класс?


 
Andy BitOff ©   (2008-07-11 12:51) [2]

> ekto ©   (11.07.08 12:49) [0]

Класс для тебя самоцель?


 
Дуб ©   (2008-07-11 12:52) [3]

Результат ничто - обсуждление все.


 
Skyle ©   (2008-07-11 12:53) [4]

Создай класс и реализуй всё класс-функциями.

Либо создай класс-синглтон и используй его.

Можно сделать типа API и слепить DLL. Можно в неё вонзить COM-объект.

А можно быстро написать 7 функций в отдельном юните и пойти пить пиво.


 
ekto ©   (2008-07-11 13:00) [5]


> Andy BitOff ©   (11.07.08 12:51) [2]


> Класс для тебя самоцель?


понял.

Всем спс.


 
oldman ©   (2008-07-11 13:00) [6]


> Алгоритм реализуется 7-9 процедурами/функциями(пока не делал,
>  но, ориентировочно, столько). Повторно код не будет использоваться.


Не использую функций вообше.
Вставляй код функций в код основной программы.


 
Поросенок Винни-Пух ©   (2008-07-11 13:01) [7]

ну вот, наступили на горло песне


 
Поросенок Винни-Пух ©   (2008-07-11 13:04) [8]

надо было по классу на каждую процедуру


 
Dennis I. Komarov ©   (2008-07-11 13:08) [9]

> [8] Поросенок Винни-Пух ©   (11.07.08 13:04)

И каждую в отдельном потоке...


 
han_malign ©   (2008-07-11 13:13) [10]

Процедурами, потому как обернуть их потом классом - 15-минут, а изначально заложенный функциональный интерфейс позволяет, в случае нужды, сплясать в любую сторону...

Только контекст должен быть не глобальным, а всегда передаваться в функцию...

TMyContext = record
    SmbField: TSmbField;
    ....
end;
procedure MySmb(var Context: TMyContext; param1: TParamType);
function MySmbCalc(SmbField: TSmbField; param2: TParam2Type): TMySmbResult;

мгновенно превращается в
TMyClass = class
private
    FContext: TMyContext;
public
    procedure MySmb(param1: TParamType);
    function MySmbCalc(param2: TParam2Type): TMySmbResult;
end;
........
procedure TMyClass.MySmb(param1: TParamType);
begin
    MySmb(FContext, param1);
end;

function TMyClass.MySmbCalc(param2: TParam2Type): TMySmbResult;
begin
    Result:= MySmbCalc(FContext.SmbField, param1);
end;


 
Dennis I. Komarov ©   (2008-07-11 13:17) [11]

> [10] han_malign ©   (11.07.08 13:13)

Лучше скажи на кой ляд он тут сдался?


 
Поросенок Винни-Пух ©   (2008-07-11 13:18) [12]

ну как. красива же.


 
jack128_   (2008-07-11 13:21) [13]


> а изначально заложенный функциональный интерфейс позволяет,
>  в случае нужды, сплясать в любую сторону...

а объектный интерфейс не позволяет ???


 
wl ©   (2008-07-11 13:26) [14]

в чем проблема класс написать не понимаю? давно пора писать эти ключевые слова на автомате


 
int64   (2008-07-11 13:46) [15]

han_malign ©   (11.07.08 13:13) [10]

А почему не запихнуть методы в рекорд?


 
TUser ©   (2008-07-11 16:34) [16]

Я делаю класс, когда мне нужно наследование или независимое обращение многих процедур к одним и тем же данным (полям) при существовании многих экземпляров сущностей одного типа. Собственно, для того эти классы и придуманы, имхо.


 
Украинец   (2008-07-11 16:59) [17]

Класс лучше, так как всегда можно клонировать его с агрегированным контекстом и даже настроив один синглетон не маяться с передачей дополнительных параметров в него.

Например если мне нужно сохранить Integer в хранилище, то мне не интересно где оно находится, что оно делает, зачем оно - я просто вызываю метод SaveInteger для агрегированного хранилища, а хранилище его уже сохраняет.

Так что использование класса выгодно даже в случае статических методов без единого динамического(ну разве что Destroy).

+ Класс проще расширять функционально не переписывая вызов процедуры в 1001 строчке с новым контекстом.

Так что синглетон со статическими методами в 95% случаях выгоднее, а в 5% случаев он просто не мешает.


 
ANB   (2008-07-11 18:22) [18]


> Так что синглетон со статическими методами в 95% случаях
> выгоднее, а в 5% случаев он просто не мешает.

Вот только читать потом такую программу . . .


 
b z   (2008-07-11 18:47) [19]


> ANB   (11.07.08 18:22) [18]
> Вот только читать потом такую программу . . .
Программу надо юзать, а не читать. :)

+1 за классы. :)


 
Игорь Шевченко ©   (2008-07-11 19:10) [20]


> Программу надо юзать, а не читать. :)


Это неверно. Программы уже давно пишутся с тем расчетом, что их читают


 
GrayFace ©   (2008-07-12 15:34) [21]

Зависит от разделяемых между ними данных. Если их нет, то класс не нужен, есть есть, то полезен.

oldman ©   (11.07.08 13:00) [6]
Не использую функций вообше.
Вставляй код функций в код основной программы.

И обязательно в одну строчку. Или не в одну, но главное - делать разрыв строки не на ";", а по какой-нибудь фиксированной границе, например, 80 символов.

han_malign ©   (11.07.08 13:13) [10]
Процедурами, потому как обернуть их потом классом - 15-минут, а изначально заложенный функциональный интерфейс позволяет, в случае нужды, сплясать в любую сторону...

Только контекст должен быть не глобальным, а всегда передаваться в функцию...

TMyContext = record
   SmbField: TSmbField;
   ....
end;
procedure MySmb(var Context: TMyContext; param1: TParamType);
function MySmbCalc(SmbField: TSmbField; param2: TParam2Type): TMySmbResult;

Какой-то уродливый "расчлененный" класс получается. Про то, что перейти легко - то это в обе стороны легко.

Украинец   (11.07.08 16:59) [17]
Так что использование класса выгодно даже в случае статических методов без единого динамического(ну разве что Destroy).

Нет, только своеобразная группировка методов и возможность при желании превратить в динамический. И возможность садить его методы на обработчики событий. А так то же самое, что процедуры с глобальными переменными.


 
Kostafey ©   (2008-07-12 16:23) [22]

> [0] ekto ©   (11.07.08 12:49)

По-моему критериями должны быть:
-Выполнение процедурами некой общей (связанной) функциональности
-Наличие общих данных для процедур
-Независимость от данных и функций вне проектирууемого класса
-Зависимость функций друг от друга

Уже повод объединить в класс.


 
oxffff ©   (2008-07-12 19:58) [23]


>
> Уже повод объединить в класс.


Такой же повод как в модуль.


 
Украинец   (2008-07-12 21:21) [24]


> oxffff ©   (12.07.08 19:58) [23]
>
>
> >
> > Уже повод объединить в класс.
>
>
> Такой же повод как в модуль.


В Delphi нет namespace как в C++ или Java. Так что класс удобнее для последующего разбора полетов.


 
oxffff ©   (2008-07-12 21:46) [25]


> Украинец   (12.07.08 21:21) [24]


В С++ нет виртуального конструктора, но на улице хорошая погода.



Страницы: 1 вся ветка

Текущий архив: 2008.08.31;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.017 c
3-1204629190
harisma
2008-03-04 14:13
2008.08.31
Работа с типом данных TABLE


4-1195513824
Alx2k
2007-11-20 02:10
2008.08.31
Окно выбора значка


3-1204739910
Tomkat
2008-03-05 20:58
2008.08.31
ошибка UDF


11-1192972730
Dodfr
2007-10-21 17:18
2008.08.31
Cant update correctly KOLAdd from 2.81 to 2.82


2-1216901204
webpauk
2008-07-24 16:06
2008.08.31
MdiChild