一点个人意见:期待Delphi所应具有的以下几个基本特征(欢迎讨论,都有分啊) (100分)

  • 主题发起人 主题发起人 韧峰
  • 开始时间 开始时间
我不知道别人怎么做程序,所以我不妄下结论,看来你对我非常了解了。说,是不是
在我写代码的时候你在后面偷看来着? :)

‘ 我的一个构想是:Optional区所有的方法和字段都是可“访问”的,但是,当访问
时如果其中的某个方法其可选特征量为私有的,则出现统一处理的异常:“该可选特征量为私有的,目前不
能访问。” ’

在下愚笨,不理解这句话的含义。
 
你用过FORTRAN90编程么?那是纯粹的模块化的设计的。

而且你也没遇到过需要重载运算符而不得的痛苦,所以,你们只会从什么“优雅”等等
角度去争论。

我是个实用主义者,觉得需要什么方便,就要什么。

首先你得承认,你还能不能为所欲为??

我再给你解释得详细一点:

Ta=Class(Tb)
Private
...
Protected
...
Public
...
Published
...
Optional
function Gety:Double
Target OpGety
//GetY默认的属性是私有的,
//Target 是我设想的一个关键字,
//而OpGetY为保存Gety可选特征的枚举常量
//这只是我的一种设想,这个具体问题可以有各种办法实现
End;

然后在Implementation区中实现

现在外部一个程序调用:

a:=Ta.Create;

y:=a.gety
//编译时这里并不出错
//运行时如果OpGetY的值为E_Private,则出现统一异常:“函数Gety为私有的,目前不
//能访问。”
而如果这样

a:=Ta.Create
………
a.OpGetY:=E_Public;
y:=a.Gety
//这样就不会出现异常。

…………

当然我设想的具体实现可选特征的方案可能不一定好,但这只是各具体方案问题。
 
我还是老意见.设计期间的组件最好可选私有受保护或公有,不要都是Published.
否则只要使设计期间的组件,所有地方都可以访问不太好.
大家看看.Net在这方面的设计就知道了。
 
//编译时这里并不出错
-----
//运行时如果OpGetY的值为E_Private,则出现统一异常:“函数Gety为私有的,目前不
------ //能访问。”


........
a.OpGetY:=E_Public;
y:=a.Gety ;
........

无语中.....我只能说:老大,我十分佩服你!
可我还是不明白,你怎么保护你的Gety??
难道你不容许别人执行a.OpGetY:=E_Public;这段代码?
是不是要把OpGety设置为private或protected变量,让它只能由你来改变?
但是a.OpGetY就不能访问了啊!

我觉得你有两个角色。一个是设计类的时候,并编写类的实现代码的时候,你在那时是
上帝,想做什么都无所谓;一个是使用类的时候,这个时候你和别的使用者应该是一样
的,你能做什么,别人也能做什么。
这两个角色应该区分开来,是不是呢?
 
我不知到该怎么说你,真想发脾气。
如果你不想让别人改变GetY,,你可以直接设为Private,这不就行了吗??

Optional区中本来都是外界可以访问的,[red]但是[/red],必须在一定的条件
下才能访问。
就拿我的原来的问题:我写了个拟合数据的类,显然,拟和必须是在给数组赋值以
后进行,如果有另外一个对这个类的结构不是很熟悉的用户,不小心在数组赋值以前
就调用了拟合方法,那程序不就很可能崩溃吗?但是如果在数组赋值以前这个拟合方法
都是私有的,只有在拟何数据赋值以后才被赋为公有的,这样是不是不会出现崩溃的错误?
至于这个OpGetY本身的属性,这是个问题,到底是怎么样,可以再讨论。
假设他是公有的。你说我在数组尚未赋值以前,我先改变OpGetY的量,然后来调用拟合方法,
这已经是种恶作剧式的了。这种恶作剧可以用把OpGetY全部认为是私有的来解决,
但是这样到底好不好,那时另外非常具体的事情了。

 
我想
try

except

finally
 

这样吧::

Type
TArray1D:Array of Double;

TFitCurve=Class;

....

Public

Procedure SetFitData(Vx,Vy:TArray1D);
Optional
Function FitData:TArray1D
Target OpFitData;
End;

Procedure TFitCurve.SetFitData(Vx,Vy:TArray1D);
Var
i,n:Integer;
Begin
n:=Length(Vx);
If n<>Length(Vy) Then Exit;
For i:=0 to n-1 Do
Begin
fX:=Vx;
fY:=Vy;
End;
OpFitData:=E_Public
//只有这以后才能进行FitData的操作
End


这样,可以认为OpFitdata总是私有的。
 
“是不是要把OpGety设置为private或protected变量,让它只能由你来改变?
但是a.OpGetY就不能访问了啊!”
这段话说得非常幼稚,你是怎么控制你的类中的私有变量的呢?是不是私有变量、
方法等外界就没有办法进行操作了?
 
脾气还是不要发了,呵呵

是我的头脑不清楚,概念不清楚。
“OpGetY本身的属性”很重要,你为了控制GetY而引入OpGetY,那么你拿什么来控制OpGetY?
依靠使用这个类的用户的自觉?既然你假定有用户不熟悉你的类而在数组赋值前调用了拟合函数,
因此有引入OpGetY这种丑陋的东西的必要,那么同样也应该假定用户有可能错误的对OpGetY赋值。
你在对待问题的处理上采用了双重的标准。

对于编程语言来说,语法的限定使语言的各种运用成为一个闭包的集合。

如果你设计一个编程语言,应该可以成为经典案例。

通过和你的讨论,让我明白了一个道理,对牛弹琴是没有用的,可能您也有同感吧:)我不在参加
讨论,累了。
 
我上面已经有了例子,可以看看谁到底是牛。

所以说,年轻人,不要轻易否定一个自己思考不成熟的东西。
 
我承认我牛,呵呵。

我从来不轻易否定一个东西,即使那不是个东西。呵呵。
 
你不牛,只是有些盲目无知,叫盲牛。当然也就不是个东西。
 
“也就不是个东西”
--

请不要用‘也’字,因为你侮辱了好多好多兄弟....呵呵。
当然,你只侮辱我是另一回事。我可以不计较。
 
真的不是个东西:连话都看不懂,怎么会编程?
 
多人接受答案了。
 

Similar threads

回复
0
查看
863
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部