具有函数作为值的语言必须使用前文描述的控制流分析来获取一个相当精确的控制流图(CFG)。对于常见的面向对象语言,如Java或C#,它也很有用,但类层次结构和类型系统提供的附加结构允许一些更简单的替代方案。在面向对象的设置中,问题是在给定的方法调用点上,哪些方法实现可能会被执行,例如
x.m(a, b, c)
最简单的解决方案是扫描类库并选择任何方法名为 m 并且其签名接受实际参数类型的方法。更好的选择是称为“类层次分析”(CHA),它仅考虑由 x 的声明类型所跨越的类层次结构的部分。进一步的改进,称为“快速类型分析”(RTA),是进一步限制为实际分配对象的类。还有一种名为“变量类型分析”(VTA)的技术,它在进行过程内控制流分析的同时对于剩余程序做出保守的假设。
当然,这些技术通常比完整的控制流分析快得多,对于实际程序来说,它们通常足够精确。在实际应用中,这些方法提供了一个有效的权衡,可以在快速性和精确性之间做出选择,以满足程序分析的需求。