2008-11-18 30 views
2

对于那些不熟悉这个概念的人,抽象倒置是在高层次结构的基础上实现低层次的构造,并且通常被认为是一件坏事,因为它增加了不必要的复杂性和不必要的开销。当然,这是一个不太精确的主观定义。单范式OOP是否会导致抽象反转?

在你看来,在单一范式的OOP语言中进行编程时,所有东西都必须是类的一部分,而诸如Java或C#之类的指针没有公开的东西不可避免地会导致抽象反转?如果是这样,在什么情况下?

回答

4

Single-paradigm 任何东西违反了抽象的第一条戒律,几乎没有人知道,甚至更少关心。

如果有必要的话,不要让任何抽象不可能被忽略,以至于你的代码没有丑陋的抽象颠倒。

无论你的范例如何,一旦你开始编写非平凡的代码来解决现实世界的问题,你最终会遇到一些不适合范例的东西。如果你声明这是一个范例,那就是当事情变得丑陋时。

混合一对夫妇的比喻,当你所有的都是槌子时,所有东西看起来都像一个钉子,如果你的洞都是圆的,而你突然结束了一些正方形的钉子,并且你没有任何锯子,(只是马勒),你有自己的问题。

没有免费的午餐。一切都是取舍。越容易编写代码,其他人阅读和维护代码就越困难,或者当您正在工作的抽象级别以下出现问题时,您或您或其他任何人都可以进行调试。 (他们最终会因为no abstraction is perfect

这是“有用的”技术和范例(如托管代码,垃圾回收,JIT编译和“一切都是对象”)的基本缺陷,它们强加基准级别的抽象,你不允许触及底层,当某个层次出现错误时,你无法对此做任何事情,因为你无法修复它,所以你被困在一个糟糕的抽象中。

1

Java和C#都有静态方法,它们与函数等价,因此语言不会强制任何东西。

这就是说,一旦我真的得到面向对象,我没有任何想要去另一种编程风格。

如果你的简单的OO层覆盖了一些复杂的东西,我建议这可能是你的代码,这是一个问题。如果OO正确完成,它应该一直简单到金属。

+3

我同意但是我担心OO几乎已经成为了一个终点,我看到了太多精美的内容,但是却是复杂的OO应用 – 2008-11-19 21:04:52

4

真正的程序员可以用任何语言

换句话说

写FORTRAN,它不是语言,它的程序员

0

我不认为一个语言如Java或C#从这个遭受以任何有形的方式,仅仅因为伴随框架的图书馆非常丰富,以至于打破另一个范例的需求对于一般编程来说并不是真正需要的。但是,由于内部实现通常是隐藏的,或者密钥类是封闭的,试图扩展这些库的开发人员通常被迫重新实现/复制功能成功地使用由基类库提供的扩展点 - 这不是语言问题,而是基类库的开发者做出的有意识的选择,以避免暴露可能易碎或经常改变的新功能.Net框架/ JDK的发布。另外,因为.Net Framework/Java Runtime允许与其他语言坐在公共运行时间之上进行互操作,所以针对其他范例(例如函数式编程,动态语言等)的能力也可以提供另一种打破远离单一范式约束。