Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1149085977
Тимофеич
2006-05-31 18:32
2006.06.18
web


15-1148345628
FireFox
2006-05-23 04:53
2006.06.18
Никто случайно не писал расширения к FireFox у ?


1-1147437914
SergeNew
2006-05-12 16:45
2006.06.18
TStringGrid


2-1149086654
Pascal-men
2006-05-31 18:44
2006.06.18
Простите что не в тему!


15-1148298698
Gryegh
2006-05-22 15:51
2006.06.18
GPRS перестало работать! Что делать?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский