您如何描述新CS学生的新内容?

时间:2010-10-29 05:35:56

标签: language-agnostic programming-languages

在OOP中,有些实体(例如Person)具有属性(例如名称,地址等)并且具有方法。你如何形容new?将抽象实体带入真实实体是一种方法还是只是一种特殊的标记?

12 个答案:

答案 0 :(得分:6)

有时它是一种方法,有时只是语法糖调用分配器方法。语言很重要。

答案 1 :(得分:6)

给你的CS学生?不要给它涂糖衣,他们需要能够很快地使用与计算机领域无关的隐喻来理解这些概念,同时试图向你80岁的祖母解释它是好的,也无济于事很多CS学生。

简单地说,告诉他们一个类是某个东西的规范,而一个对象是那个东西的具体实例。所有new都会根据规范创建一个具体的实例。这包括创建(不一定是类特定的,这就是为什么我会毫不犹豫地称之为方法,为类绑定函数保留该术语)初始化(特定于类。)

答案 2 :(得分:5)

根据语言new是一个关键字,可用作运算符或修饰符。例如在C# new can be used中:

  • new运算符 - 用于在堆上创建对象并调用构造函数。
  • new modifier - 用于隐藏基类成员的继承成员

对于全新的学生,我只会将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中,

  • new为新的类实例(对象)分配内存
  • new运行一个类的构造函数来初始化该实例
  • new返回对该新实例的引用

至于对象/实例和类之间的关系,我有时会想:

实例,因为蓝图构建

答案 9 :(得分:1)

在Ruby中,我相信它是元类的实例方法。在CLOS中,它是一个名为make-instance的通用函数,但大致相同。

在某些语言中,如new具有特殊语法,并且隐藏了元类部分。在你必须用这种语言教某人OO的情况下,我不知道你能做多少事情。 (暂停教授OO和Java教授第二个对象系统几乎肯定会让他们进一步混淆!)只是解释它的作用,并且这是一个特例。

答案 10 :(得分:1)

你可以说一个类是一个对象的原型/蓝图。当你给它关键字new时,那个原型/蓝图变为现实。就像你给那些死去的人带来了生命的气息。

答案 11 :(得分:1)

大多数语言中的

new会对以下内容进行一些修改:

  1. 为类实例指定一些内存区域,如果需要,请通知垃圾收集器以后如何释放该内存。
  2. 以特定于该类的方式初始化该内存区域,将原始内存的字节转换为类的有效实例的字节
  3. 将对内存位置的引用返回给调用者。