Oop 为什么不';文件和目录是否有单独的名称空间?

Oop 为什么不';文件和目录是否有单独的名称空间?,oop,namespaces,theory,naming,filenames,Oop,Namespaces,Theory,Naming,Filenames,文件和目录可以有不同的名称空间,并且仍然可以用来标识特定的文件,因为具有相同名称的文件和目录可以通过是不同类型的东西来区分 原语字段和引用字段也可以有不同的名称空间(在Java中),因为如果原语字段和引用字段具有相同的名称,那么它们可以通过不同类型的事物来识别 像这样的其他地方使用单独的名称空间。例如,在Java中,您可以有一个方法exampleName()和一个字段exampleName,尽管它们有相同的名称,但它们的区别在于它们是不同类型的东西。首先,这个问题是特定于语言的。在纯OOP语言中

文件和目录可以有不同的名称空间,并且仍然可以用来标识特定的文件,因为具有相同名称的文件和目录可以通过是不同类型的东西来区分

原语字段和引用字段也可以有不同的名称空间(在Java中),因为如果原语字段和引用字段具有相同的名称,那么它们可以通过不同类型的事物来识别


像这样的其他地方使用单独的名称空间。例如,在Java中,您可以有一个方法
exampleName()
和一个字段
exampleName
,尽管它们有相同的名称,但它们的区别在于它们是不同类型的东西。

首先,这个问题是特定于语言的。在纯OOP语言中,原子元素和复合元素之间没有区别。一切都是对象。出于类似的原因,在纯函数式语言中,函数和变量的名称不能相同

第二,如果您有多态操作,则无法判断您引用了哪个变量。例如,由于多态操作,文件和目录不能有不同的名称空间,例如

cp foo bar

cp适用于文件和目录,如果您有不同的名称空间,则无法确定您的意思。

我认为这不是一个好主意。我想原因包括文件系统代码的性能和简单性。如果目录列表必须根据您认为应该有多少不同的名称空间沿着2、3或更多不同的路径,这可能会使代码复杂化


另外,考虑可能出现的最终用户混淆。目前,我们通过使用文件扩展名在文件系统中提供了一种名称空间。您可以将file.txt、file.dll和file.exe全部存在于同一目录中。当这些文件同时出现时会发生什么是一个值得关注的问题——这是病毒作者使用社会工程的一种方法,让你点击错误的文件。想象一下,如果你把一个目录和一个同名的文件混淆起来,目录和文件就不一定如此不同了。它们都是父目录中的条目,只是带有一个标志来指示条目是否为目录。您可以打开一个目录并像读取文件一样读取它,只是可以对其执行某些其他操作—符号链接的工作方式相同。(此描述偏向于Unix文件系统视图,但我认为DOS/Windows视图的工作方式大致相同)。在任何目录中,都有一组成员的名称,文件系统强制执行唯一性约束,即一个目录只能有一个具有给定名称的成员


考虑Java方法名称与字段名称的比较——回到C语言中,您不可能有一个同名的全局函数和全局变量,因为对象文件中的所有符号都在一个名称空间中。但是你可以使用C++,因为函数“空洞FoE()”被映射到被损坏的符号名(“FooSyVV”或其他东西)。因此,与其说它们有一个单独的名称空间,不如说进入名称空间的键对于字段“foo”和方法“foo()”是不同的。考虑到您无法获得键冲突,它们看起来像是单独的名称空间,但这真的是它的实现方式吗?

方法文本和字段测试没有相同的名称空间name@1800谢谢我经常打字和测试。我把它们改成了一个更好的名字(“exampleName”),顺便说一句:我把它标记为一个维基,所以我想这意味着你可以直接编辑它(?IIUC)@1800。嗯,wiki开关似乎没有保持打开状态-现在打开了。wiki标志与我是否可以编辑它没有任何关系。任何有足够代表性的人都可以编辑任何问题或答案,无论它是否是社区维基。wiki标志表示您没有从投票中获得任何进一步的代表。是的,这是一个因素:如果有不同的名称空间,您需要指出您所指的名称空间。在我的字段与方法的示例中,“()”区分了这个角色。对于您的“cp”示例,可以通过为目录添加“/”来完成,例如:cp foo/bar/这是否值得麻烦成为一个问题。对于性能,我认为这不会是一个问题:系统必须在查找它之前知道您要查找哪种类型(考虑两个目录是否同名)。因此,在进行查找之前,它会知道要查找哪个名称空间。为避免混淆,我认为这可能是原因。我使用名称空间是指效果,而不是特定的实现。如果不同名称空间中的名称相互不影响,则它们位于不同的名称空间中。您可以通过名称munging(如“foo_w”),或者使用单独的哈希表,或者可能以其他方式。我同意目录和文件没有太大的不同-它们可以放在同一个名称空间中。但是它们也可以放在不同的名称空间中(这给了你更多的自由-文件和目录可以有相同的名称)我的问题是,做前者的原因是什么?