教学:字段,类和包之间的关系

时间:2020-03-06 14:50:03  来源:igfitidea点击:

总的来说,我认为我可以很好地传达大多数与编程相关的概念。
但是,我仍然很难总结字段,类和包之间的关系。

我们如何总结"字段","类","包"和"它们的关系"?

解决方案

自从我教C,C ++和Java以来​​,我遇到了类似的问题。
这是我的工作:

首先,我将包装分开存放,并在最后进行说明。

在我看来,理想情况下,学生应该首先学习ADT,最好是在C语言中学习。他们拥有该结构,并对其进行了单独的操作。然后,字段只是结构中的"插槽",我们甚至可以显示内存布局来演示它。函数是在这些结构上运行的单独实体。

然后,我们过渡到类,方法和字段,并说明从本质上(禁止继承和某些轶事)它们在许多方面都是ADT的语法糖。

如果需要,我们可以教对象布局,继承和虚拟表(以我的经验,这可以帮助学生更好地了解继承以查看内存布局)。

最后,我们将获得有关如何一起组织类的主题。如果我们教C ++,则实际上没有软件包,但是我们可以解释名称空间,并讨论组织和单独的编译。

如果我们使用的是Java,则只需说明它们是同一命名空间中的类的集合,它们具有特殊的访问规则并显示它们。 Java的软件包系统无论如何都是坏的,因此我通常会经历一些模式(例如,将UI软件包与C分开)。

因此,总而言之:类构成对象的基础,这些对象是几个字段的内存排列以及对其进行操作的关联方法。包是具有更多访问限制机制的类的集合。

我描述的方式是:

  • 对象是插槽的集合,存储数据的插槽是字段,存储代码的插槽是方法。公用插槽位于对象的外部,专用插槽位于内部。方法应该主要是公共的,因为对象为客户提供服务,字段应该是私有的,因此客户不知道服务的工作方式。因此,字段是对象的实现细节。
  • 类名必须唯一,以便我们可以将代码与第三方库结合使用。简单/简短的类名称是不够的,因为可能有成千上万个名为"列表","客户"等的类。因此,将类放置在包中以创建更长,更难复制的名称。包中的类的子集只需要对客户端可见,因此有两种访问级别,即public和default。这允许包充当库。

因此,字段是对象的实现细节,其类位于软件包中,以保证唯一的名称并提供类似库的模块化。

根据我们要向其解释的人的年龄,可以使用一个简单的类比:税收表格。税收表格(例如1040EZ)就像一个类,并且表格上要填写的每个空格都是表格的一个字段。税表甚至包含有关如何使用字段中的信息的说明,就像一个类包含要对字段中的数据执行的成员函数一样。正如一整套税表不仅包括主要税表,还包括其他可能需要填写的税表(例如,添加时间表),因此,一个包不仅包含主要类,还包含可能需要交互的其他类和。

字段是属于该类或者属于该类的对象实例的变量。局部变量和字段之间的区别在于字段的范围更广。

类是用户定义的数据类型的模板。类比原始数据类型更高级,因为它们既具有状态又具有行为。

包用于对类进行分组并解决潜在的命名冲突。在拥有多个开发人员和公开可用的代码库的情况下,我们中的某些人很可能会为我们的类命名相同的名称(Math,LinkedList,FileUtils等)。在类名的前面加上一个唯一的包名,可使编译器(和其他开发人员)确定要使用的类。

有趣的是,我们在不提及对象的情况下解决了OO编程问题。我认为这可能是问题。

这是我用的。

对象就是事物。它们具有属性(度量,存在状态等)。这些属性可以称为字段。 [我经常使用课堂上发现的东西-杯子,马克笔,帽子,大衣等来说明这一点。]

对象也参与行为,称为方法,方法功能或者操作。

对象的功能(属性和操作,字段和方法,无论如何)提供了一种对对象进行分类的方法。

一类对象共有的功能可以很好地收集到一个类定义中。类定义描述了作为类成员的对象的属性和方法。

包是类定义的集合。理想情况下,包中的类具有一些共同点,但这不是必需条件,也不是有用的区别。