代码之家  ›  专栏  ›  技术社区  ›  Phil.Wheeler

如何向非程序员解释反射?

  •  3
  • Phil.Wheeler  · 技术社区  · 16 年前

    我有一个朋友对编程很感兴趣,他问了很多不同的概念。类、接口和类似多态性/继承性的东西都很容易解释,但是我在用类比法进行思考时遇到了一些困难。

    你将如何解释它是什么以及它在实践中是如何工作的?

    7 回复  |  直到 14 年前
        1
  •  19
  •   ennuikiller    16 年前

    反射只是一个物体告诉你它自己的能力,它的方法,实例变量,类型等,使用它命名的隐喻,它就像在镜子里看着自己。这样你就可以向别人描述你自己了。同理,反射是对象(甚至程序)描述自身的能力。

        2
  •  3
  •   Sean    16 年前

    “在大多数编程中,数据和操作是两个独立的事物(操作处理数据)。有了反射,操作就变成了数据,允许程序了解甚至修改自己。”

    尽管这可能太简单了?

    编辑:另外,如果您想要一个类比,名称反射提供了一个很好的类比。反射就像程序可以在镜子中看到自己。因此,它可以在只知道方法名称为字符串的情况下调用方法,并以字符串等形式获取方法名称列表。

        3
  •  3
  •   Stack Overflow is garbage    16 年前

    我不会的。反射是一个编程概念,它只与程序员有关。如果你不是一个程序员,你不需要,也不想,比我需要知道建造核反应堆的技术实现细节更多的了解它。

    因为他对学习编程很感兴趣 无论如何 我看不出问题所在。帮助他学习编程,迟早他会有必要的词汇来讨论思考,然后你可以告诉他如果他需要什么。

        4
  •  1
  •   Robert Koritnik    16 年前

    想象一个班级是一辆汽车。它具有如下特性:

    • 方向盘
    • 轮胎
    • 发动机
    • 等。

    它还有一些方法:

    • 换档(档位)
    • 转弯(侧)
    • 等。

    想象一下,你买了一辆新车(最新的和最好的),你对它一无所知。没人告诉过你这件事。所以你转向 反射 . 技工。他会看看引擎盖下面,告诉你它有什么发动机。您还可以使用其他哪些属性和方法来调用…

    最终你可以开这辆新车,因为你知道它有什么特性/方法。

        5
  •  1
  •   Thorarin    16 年前

    在解释反射之前,最好解释静态类型语言和动态类型之间的区别。然而,向非程序员解释像反射这样的东西的必要性将是一个挑战。如果他们问的问题足够多,你就不可避免地要解释使用反射的缺点…

        6
  •  0
  •   Imagist    16 年前

    如果你的朋友知道类似于python的动态语言,那么解释反射是如何实现的可能会有所帮助;也就是说,对象只是字典,反射允许你以字典的形式查看对象,而不是像通常对待对象那样。

        7
  •  0
  •   outis    16 年前

    镜像类比是不完美的,因为它意味着反射是一个物体对自身所做的事情。任何对象或函数都可以反射到另一个对象上。此外,在某些实现中,有单独的类或函数用于反射;您不会调用Abject的方法或访问属性来反射它。

    一个相互竞争的类比是意识。有意识的实体可以检查现实世界中的一个对象并描述它的属性,这就是程序反射的全部内容。这个类比的问题在于,意识意味着对实体的认知意识,而反思则不是。只要你包括这个警告,它就不会误导你。

    与其说是(误导性的)类比,不如说是一些说明性的用法?反射是实现调试器的核心任务之一的一种简单方法:检查存储在变量中的对象。通过反射,存储和检索外部数据存储中的对象变得更容易,因为您不必为每个类编写序列化程序。通用序列化程序可以使用反射来检查对象的属性,并使用反射来创建数据库架构。