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

Вниз

Вопрос к 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.041 c
15-1148465605
Игорь Шевченко
2006-05-24 14:13
2006.06.18
Любителям изящной словесности


15-1148418317
Andy BitOff
2006-05-24 01:05
2006.06.18
Новый вирус, Уязвимость в Microsoft Word.


3-1145623187
AndreyAR
2006-04-21 16:39
2006.06.18
Программный запуск DTS Package


15-1148393861
vidiv
2006-05-23 18:17
2006.06.18
Сложно ли сделать простую TPanel с простыми "системными" скролами


15-1148657865
AlexanderMS
2006-05-26 19:37
2006.06.18
Интересное задание.