您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

示例代码详细说明了Ada和Java在键入方面的区别

示例代码详细说明了Ada和Java在键入方面的区别

从Ada的角度来看,这可能会有所帮助。

类型声明有两种基本形式:新类型和子类型。

即使新类型具有相同的值范围,它也被视为与任何以前的类型完全不同的类型。只能将新类型的对象分配给新类型的变量,依此类推。

子类型是从现有类型派生的,共享其值的子集,就分配而言,它被视为实质上是同一类型。

使用类型系统的技巧需要一些实践,而这是在类型和子类型之间进行选择的一个重要方面。它使沮丧地打击类型系统与使程序简单而轻松地组合在一起之间有所区别。

一个示例:设想使建筑物自动化,包括其电梯系统:

type Floor is new Integer range -3 ..135;

有几个地下车库,一个地下室,0层是一楼(对于欧洲建筑而不是美国建筑!),其上方135层,使其比高耸的地狱高1层。

可以安全地将其作为一种新类型,因为几乎没有将Floor变量与其他变量混淆的危险,并且几乎不需要数学上将Floor与任何其他数量组合。升降机需要去那里,仅此而已。在这种情况下,将Floor作为新类型可以捕获一些错误,但是值得增加的安全性而不会带来痛苦。

使用类型或子类型作为数组索引和循环边界是一种使跨界访问变得不太可能的好方法

Array(Floor) of ...
for f in Floor loop ...

如果确实需要将整数变量分配给Floor,则类型转换会向编译器和任何阅读此代码的人发出信号。

subtype Population is Natural range 0 .. 10000;

我们必须知道出于安全,防火,供暖或制冷要求以及其他目的而要占用建筑物的人数。它的范围在两端都有严格的限制:对于此建筑物,假定有超过10000名居住者被消防安全法规所禁止

基本类型是自然类型(本身是Integer的子类型),而不是Integer,因为总体永远不能小于零。

但是,将“人口”设置为新类型可能会导致无休止的类型转换问题。使其成为子类型,例如,可以更轻松地在“热负荷”计算,电梯调度策略,用水预测中使用“人口”。

它是子类型而不只是Integer的事实仍然提供了有用的保护形式。虽然可以将整数分配给种群变量并在表达式中与它们混合,但是任何试图超出范围的值都将被标记错误。如果在编译时无法检测到它们,则它们将在运行时引发异常。第10001位试图进入建筑物的人也将如此。

我将让Java专家解释在Java中实现这些策略的最佳方法

java 2022/1/1 18:29:24 有510人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶