2009-02-12 47 views
2

当使用诸如Python,C++,D或Ruby等多范式语言时,您在单个应用程序中混合了范例多少?在单个模块内?你认为以细粒度混合功能性,过程性和面向对象的范例会产生更清晰,更简洁的代码,因为你对每个子问题使用正确的工具,或者因为你在做类似的事情有3种不同的方式?范式混合的粒度

回答

2

不同的范例以不同的方式混合。例如,使用OOP不会消除来自外部库的子例程和过程代码的使用。它只是将程序移到不同的地方。

单纯以一种范式编程是不可能的。当你编程时,你可能会认为你有一个单一的想法,但那是你的幻想。您的结果代码将沿着边界落地并在许多范例的范围内。

2

我不确定我是否曾经这样想过。

一旦你开始“在Ruby中思考”,多范式就会融入...... Ruby。

Ruby是面向对象的,但我发现,其他的东西,如功能方面往往意味着目前存在的一些面向对象语言的“传统”设计patters都只是单纯的不相关的。迭代器是一个经典的例子...迭代是在Ruby中优雅地处理的东西,重量级的OO迭代模式不再适用。这在整个语言中似乎都是真实的。

1

混合模式的优势在于让您以最自然和最自然的方式表达解决方案。当它帮助保持你的程序逻辑更小时,这是非常好的事情。例如,与传统循环相比,按照某些标准筛选列表比用功能性解决方案表达要简单几倍。另一方面,为了从混合两个或多个范例中获益,程序员应该对所有这些范例合理流利。所以这是应该小心使用的强大工具。

0

不同的问题需要不同的解决方案,但如果您在同一图层中以相同的方式解决问题,则会有所帮助。疯狂地变化会混淆你和项目中的其他人。对于C++,我发现静态类型的OOP(在Python中使用zope.interface)适用于更高级别的部分(连接,更新,信号等)和功能性的东西,可以解决许多较低级别的问题(解析,坚果'螺栓数据处理等)更好地。

通常,动态类型的脚本系统对于选择和配置特定的应用程序,游戏级别以及其他类型都是很好的选择。这可能是语言本身(即Python)或其他东西(xml脚本引擎+ C++中的动态链接所必需的系统)。