Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
ВнизВопрос к TUser и остальным знатокам ООП (навеяно соседней веткой) Найти похожие ветки
← →
Галинка © (2006-05-28 18:31) [0]Есть программа расчета ДВС. (Исходные данные буду получать из БД, но это не критично сейчас.) Ввод пока осуществляется из соотв компонентов типов TEdit, TComboBo. ПОка данные хранились в записи. Но все таки для присвоения полям записи и считывания затем из нее в контролы для вывода результатов, предусмотренны функции типа Set_param, Get_param, Get_param_as_String. Я так понимаю это уже факически и есть псевдокласс, так сказать? Просто надо его почеловечески оформить?
← →
Галинка © (2006-05-28 18:33) [1]По правилам "хорошего тона" и "хорошего стила программирования" есть ли ограничения на количество полей в классе?
И кого лучше взять за прородителя?
← →
Desdechado © (2006-05-28 18:43) [2][0] - где-то так, хотя предметная область лишь очерчена, а классы обычно требуют глубокой проработки перед проектированием
[1] - количество полей, имхо, может быть любым, лишь бы в них можно было разобраться. Важно проработать возможную иерархию классов и их разнообразие и взаимосвязь. Тогда свойства и методы не будут "толпиться" в одном классе.
Выбор предка зависит от того, что ты хочешь делать с классом, например:
1. что-то абстрактное - TObject
2. что-то, что умеет себя сохранять - TPersistent
3. что-то, что представляет собой орган управления на форме - TCustomControl
← →
TUser © (2006-05-28 18:44) [3]> Я так понимаю это уже факически и есть псевдокласс, так сказать?
От такого псевдокласса трудно создать псевдонасленика. Хотя в некотром смысоле есть инкапсулация, особенно если "внешний" пользователь не видит внутреннюю структуру записи (record).
Зы. Боюсь, что я не такой спец в ООП, как вам кажется. В частности, я не уверен до конца, что правильно понял вопрос.
← →
Галинка © (2006-05-28 19:52) [4]
> TUser © (28.05.06 18:44) [3]
Это все понятно. Вот я и говорю, что структуру надо жл ума довести, тем более есть уже все. Просто поля записи "плавно превращаются" в поля (свойства?) класса, а операции манипуляции ими - в методы класса. Или я чего-то не понимаю.
Пока есть вот это:Rezultaty_Rascheta = record
Tipe,Tay,Chis_Cyl:byte;
Chastota,NNe,Lamb_p,E,
MCO2,MCO,MH2O,MH2,MN2,MO2,M2,LLo,LMo,M1,muo,alfa,
Hu,dHu,Hrs,
pk,Tk,rok,
dT,Tr,pr,gammar,mu,fidoz,
Ta,dpa,pa,etav,
n1,pc,Tc,Mcv1,
Tz,pz,ksiz,delta_p,ro_p,
Tb,pb,n2,Tr1,
pit,pid,gi,etai,
pm,etam,
pe,etae,ge,
vl,vh,s,d,fp,vpsr:real;
end;
function Get_E():real; forward;
function Get_Ne():real; forward;
function Get_Nn():real; forward;
function Set_Rejimy(chastota_vrash:real):Rejimy; forward;
function Get_Ic():integer; forward;
function Get_Tipe():integer; forward;
function Get_tay():integer; forward;
function Get_SkD():real; forward;
function Get_RkL():real; forward;
function Get_Ugol_Razv():real; forward;
function Get_Compon_Tipe():integer; forward;
function Get_Poradok_Raboty():N_Cyl; forward;
function Get_Ugly_Vspysh(Poradok_Cyl:N_cyl):Ugol_Vspysh; forward;
function Get_Alfa(chastota_vrash:real):real; forward;
function Get_Teta():real; forward;
function Get_pk():real; forward;
function Get_p0():real; forward;
function Get_Tk():real; forward;
function Get_TrN():real; forward;
function Get_Fidoz(chastota_vrash:real):real; forward;
function Get_Nom_Ge(tekush_znach:real):real; forward;
function Get_As_String_Scor_Rejim():string; forward;
function Get_As_String_Alfa():string; forward;
function Get_As_String_M2(Index:integer):string; forward;
function Get_As_String_M1(Index:integer):string; forward;
function Get_As_String_Mco2(Index:integer):string; forward;
function Get_As_String_Mco(Index:integer):string; forward;
function Get_As_String_Mh2o(Index:integer):string; forward;
function Get_As_String_Mh2(Index:integer):string; forward;
function Get_As_String_Mn2(Index:integer):string; forward;
function Get_As_String_Mo2(Index:integer):string; forward;
function Get_As_String_mu(Index:integer):string; forward;
function Get_As_String_pk():string; forward;
function Get_As_String_Tk():string; forward;
function Get_As_String_rok():string; forward;
function Get_As_String_Hrc(Index:integer):string; forward;
function Get_As_String_dHu(Index:integer):string; forward;
function Get_As_String_Hu(Index:integer):string; forward;
function Get_As_String_pa(Index:integer):string; forward;
function Get_As_String_Ta(Index:integer):string; forward;
function Get_As_String_Tr(Index:integer):string; forward;
function Get_As_String_pr(Index:integer):string; forward;
function Get_As_String_gammar(Index:integer):string; forward;
function Get_As_String_etav(Index:integer):string; forward;
function Get_As_String_n1(Index:integer):string; forward;
function Get_As_String_pc(Index:integer):string; forward;
function Get_As_String_Tc(Index:integer):string; forward;
function Get_As_String_mcv1(Index:integer):string; forward;
function Get_As_String_ksiz(Index:integer):string; forward;
function Get_As_String_Tz(Index:integer):string; forward;
function Get_As_String_pz(Index:integer):string; forward;
function Get_As_String_delta_p(Index:integer):string; forward;
function Get_As_String_ro_p(Index:integer):string; forward;
function Get_As_String_pb(Index:integer):string; forward;
function Get_As_String_Tb(Index:integer):string; forward;
function Get_As_String_n2(Index:integer):string; forward;
function Get_As_String_pit(Index:integer):string; forward;
function Get_As_String_pid(Index:integer):string; forward;
function Get_As_String_gi(Index:integer):string; forward;
function Get_As_String_etai(Index:integer):string; forward;
function Get_As_String_pe(Index:integer):string; forward;
function Get_As_String_pm(Index:integer):string; forward;
function Get_As_String_etae(Index:integer):string; forward;
function Get_As_String_etam(Index:integer):string; forward;
function Get_As_String_ge(Index:integer):string; forward;
function Get_As_String_vh():string; forward;
function Get_As_String_vl():string; forward;
function Get_As_String_d():string; forward;
function Get_As_String_s():string; forward;
function Get_As_String_fp():string; forward;
Если больше по предметной области, то все это параметры двигателя. Некоторые вводятся с клавиатуры через соотв. контролы, некоторые сидят уже в программе, некоторые расчитываются. Некотрые из них, такие как pa, pc, n1, pz, pb, n2, s, d, ro_p, E надо передать в стороннее приложение для дальнейшей граф. обработки.
← →
Галинка © (2006-05-28 21:25) [5]А если сделать класс такой:
TParam = class
Name:string;
Value:double;
function Get_Value(Name:string):double;
function Get_Value_as_String(Name:string; Precission:byte):string;
procedure Set_Value(Name:string; Value:double);
end;
TArrayParam = class
Name:string;
Values:array of double;
function Get_Values(Name:string):array of double;
procedure Set_Values (Name:string; Values:array of double);
function SavetoFile(Name:string; FileName:string):boolean;
end;
а потом сделать список со всеми экземпоярами этих классов?
← →
ЮЮ © (2006-05-29 03:34) [6]Можно и так. Это упростит интерфейсную часть класса, немного усложнив доступ к нужным свойствам.
Вот, например, так выглядит базовый объект в нашей конторе:
TMObject = class
private
FAttrValues: ICVariableValues;
...
public
property AttrValue[AttrName: string]: variant
read GetAttrValue write SetAttrValue; default;
end;
ICVariableValues - собственный интерфейс обеспечивающий быстрый доступ к значению по имени
← →
Algol (2006-05-29 12:20) [7]
> Галинка © (28.05.06 21:25) [5]
> А если сделать класс такой:
Только лучше вместо Values:array of double; сделать хештаблицу.
← →
Галинка © (2006-05-29 16:16) [8]а что такое хештаблица?
← →
Dmitrij_K (2006-05-29 16:24) [9]http://ru.wikipedia.org/wiki/Хеш-таблица
← →
Галинка © (2006-05-30 21:55) [10]а как это сделать в Дельфи??? Все что я нашла относится к Си или Си шарп.
← →
Галинка © (2006-05-30 23:25) [11]Всем спасибо. Нашла про хэширование у Бакнелла. Пошла изучать )))
(с) "Ушла в себя. Вернусь не скоро."
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.011 c