我使用Delphi,但我认为这个问题对于任何面向对象的编程语言都是有效的。
我什么时候应该对对象使用记录。我曾经认为,当您对一组相关数据有一些简单的定义时,您就使用了记录,这些数据希望存储在一起,而这些数据不需要自己操作。然而,每次我决定将一段数据和其他数据一起放入一个记录中时,我就想出了为什么它应该是一个完全成熟的对象的理由。
数据需要一些属性或methods.
事实上,我最近得出的结论是,在现代应用程序中,对对象使用记录的唯一时间可能是从磁盘读取二进制文件,该文件可以直接读取到记录数组中。
我继承了一个有10年历史的项目,该项目广泛地将记录用于对象上的小数据段,我想知道是只有我,还是应该将这些概念交给经验回收站。
讨论。
发布于 2009-02-25 10:28:05
当没有方法对您的数据进行操作时,
要做出选择,您需要考虑如何使用这些对象或记录。如果要读取大型二进制文件,则需要使用记录(将整个缓冲区读入记录数组可能会将它们转换为要处理的对象)。如果您正在处理结构化数据,那么我们的运行时生成的数据对象似乎要容易得多。
发布于 2009-02-25 18:45:00
如果您所处的情况只是处理数据,那么我认为使用记录是很好的。
一些典型的情景:
执行操作
但是,正如您所指出的,这些场景在典型的OO应用程序中占少数。
发布于 2020-05-22 14:11:09
您可以在所谓的记录对象中一起使用记录&对象,具有高效处理数据的优点,例如,一个巨大的整数加密盒,通过将这些对象封装在记录中,我们获得了更快的速度和更多的事务:
TKeyObjAB= record
ID:string;
n:TInteger; {the modulus}
phi:TInteger; {Totient phi=(p-1)*(q-1)}
e:TInteger;
d:TInteger; {private key if e relative to phi,
which means that d*e mod phi = 1}
blocksize:integer;
keysize:Integer; {bits in modulus}
benchmark: string; //double;
end;然后用两个或两个以上的recobj实例化它:
var
tAlice:TKeyObjAB;
tBob: TKeyObjAB;构造函数是一个简单的函数,可以插入您的成员:
function Obj_createAB(newid:string;
newkeysize:integer; actor:TKEYObjAB):TKeyObjAB;
begin
with actor do begin
id:=newid;
keysize:=newkeysize;
n:=TInteger.Create(0);
phi:=TInteger.Create(0);
e:=TInteger.create(0);
d:=Tinteger.create(0);
benchmark:= '';
end;
result:= actor;
end;
// invoke instances
talice:= Obj_createAB('Alice', 256, talice)
tbob:= Obj_createAB('Bob', 512, tbob)https://stackoverflow.com/questions/585321
复制相似问题