在OOP中,有些实体(例如Person)具有属性(例如名称,地址等)并且具有方法。你如何形容new
?将抽象实体带入真实实体是一种方法还是只是一种特殊的标记?
答案 0 :(得分:6)
有时它是一种方法,有时只是语法糖调用分配器方法。语言很重要。
答案 1 :(得分:6)
给你的CS学生?不要给它涂糖衣,他们需要能够很快地使用与计算机领域无关的隐喻来理解这些概念,同时试图向你80岁的祖母解释它是好的,也无济于事很多CS学生。
简单地说,告诉他们一个类是某个东西的规范,而一个对象是那个东西的具体实例。所有new
都会根据规范创建一个具体的实例。这包括创建(不一定是类特定的,这就是为什么我会毫不犹豫地称之为方法,为类绑定函数保留该术语)和初始化(是特定于类。)
答案 2 :(得分:5)
根据语言new
是一个关键字,可用作运算符或修饰符。例如在C# new can be used中:
对于全新的学生,我只会将new
描述为关键字,并将修饰符排除在讨论之外。我将类描述为蓝图,将new
描述为将这些蓝图变成有形物体的机制 - 对象。
您可以查看我的问题:How to teach object oriented programming to procedural programmers,了解向新开发人员提供OOP教学的其他好答案。
答案 3 :(得分:3)
在大多数面向对象语言中,new
只是命名工厂方法的约定。但这只是众多惯例中的一种。
例如,在Ruby中,通常为集合类命名工厂方法[]
。在Python中,类只是他们自己的工厂。在Io中,工厂方法通常称为clone
,在Ioke和Seph中称为mimic
。
在Smalltalk中,工厂方法通常具有比new:
更具描述性的名称。类似于fromList:
或with:
。
答案 4 :(得分:2)
这是一个过去对我有用的明喻。
对象定义是Jello Mold。 “新”是从这个模具中实际制作Jello零食的过程。你给新邻居的每一个Goopy Jello都可以是不同的,这个是绿色的,这里有一些水果,等等。它是它自己独特的“对象”。但模具是一样的。
或者您可以使用工厂类比或其他东西,(或蓝图与建筑物)。
就其在语法中的作用而言,它只是一个关键字,让编译器知道堆上的分配内存并运行构造函数。它没有更多。
答案 5 :(得分:2)
Smalltalk:它是元类的实例方法。所以“new是一个返回新分配实例的方法。”
答案 6 :(得分:1)
我告诉人们,课程就像是如何制作一个对象的计划。对象由new
类创建。如果他们需要更多,那么,我只是不知道该说些什么。 ; - )
答案 7 :(得分:1)
new
是一个关键字,它使用()中列出的参数调用其右侧类的类构造函数。
String str = new String("asdf");
str使用构造函数和参数“asdf”
定义为String类变量至少那是它呈现给我的方式。
答案 8 :(得分:1)
在Java中,
至于对象/实例和类之间的关系,我有时会想:
类是实例,因为蓝图是构建
答案 9 :(得分:1)
在Ruby中,我相信它是元类的实例方法。在CLOS中,它是一个名为make-instance
的通用函数,但大致相同。
在某些语言中,如new
具有特殊语法,并且隐藏了元类部分。在你必须用这种语言教某人OO的情况下,我不知道你能做多少事情。 (暂停教授OO和Java教授第二个对象系统几乎肯定会让他们进一步混淆!)只是解释它的作用,并且这是一个特例。
答案 10 :(得分:1)
你可以说一个类是一个对象的原型/蓝图。当你给它关键字new时,那个原型/蓝图变为现实。就像你给那些死去的人带来了生命的气息。
答案 11 :(得分:1)
new
会对以下内容进行一些修改: