据我所知,尽管花费了数百万或数十亿美元用于OOP教育,语言和工具,但OOP并未提高开发人员的工作效率或软件可靠性,也没有降低开发成本.很少有人在任何严格的意义上使用OOP(很少有人坚持或理解LSP等原则); 人们对问题域建模所采用的方法几乎没有统一性或一致性.这个课程常常仅用于语法糖; 它将记录类型的函数放入它们自己的小命名空间中.
我为各种各样的应用程序编写了大量代码.虽然有些地方真正的可替代子类型在应用程序中发挥了重要作用,但这些都非常特殊.总的来说,虽然谈到"重复使用"的口号很多,但实际情况是,除非一段代码完全符合您的要求,否则几乎没有成本效益的"重复使用".设计类以正确的方式扩展是非常困难的,因此扩展的成本通常很高,以至于"重用"根本就不值得.
在许多方面,这并不让我感到惊讶.现实世界是不是"OO",这种想法在OO隐含的 - 我们可以用一些类分类模型的事情 - 在我看来非常根本性的缺陷(我可以坐在桌子上,一个树桩,一个车盖某人的膝盖 - 但不是其中一个 - 一把椅子).即使我们转向更抽象的领域,OO建模通常也很困难,违反直觉,最终无益(考虑圆/椭圆或正方形/矩形的经典例子).
那我在这里错过了什么?哪里是OOP的价值,为什么所有的时间和金钱,没有作出任何软件好?
我正在与一位同事谈论C和C++,他声称C是面向对象的,但我声称它不是.我知道你可以在C中做类似面向对象的事情,但C++是一种真正的面向对象语言.
你的想法是什么?
此外,它引发了关于谁决定面向对象意味着什么的讨论,并且很难说出面向对象的真正意义.你对此有何看法?
我现在是开发人员,过去几年我使用原型框架和OOP的实现,用于Javascript.我也使用过jquery和其他一些框架.
我一直在研究js如何工作以及与OOP有何不同,因为它是一种面向原型的语言.在我看来,实际上是一个伟大的概念,原型导向的语言.
给予正确的关注:
- 语言是如何使用的,因此更快,更高效,理论上更简单,更顺畅.
- 每个浏览器都有自己的javascript应该如何工作的实现,有时不可能在所有浏览器中使用简洁的代码,或者至少是大多数浏览器.
- 通常那些OOP框架(dojo.declare(),Js.Class,MooTools等)不仅适合做出好的工作,而且它们是跨浏览器.
我不禁想知道,是否值得开始使用面向javascript原型的RIA?或者我应该去Dojo.declare(),js.class或类似的?
我知道静态方法对于接口来说是不正确的(请参阅:为什么 C# 不允许静态方法实现接口?)但遇到了这样的情况:我有一个对象实现了接口的所有方法,其中所有方法都可以静态的,所以我想我的设计一定是错误的。
问题是,我看不到任何替代方案
我的接口IDataSerializer是由几个类实现的。一种对 XML 进行反序列化,一种对 JSON 进行序列化,等等。所有这些类都实现相同的功能,并且没有任何类具有任何“状态数据”(成员等),但最终都会输出相同类型的对象。
例如,XML 类:
public class MyXmlSerializer : IDataSerializer
{
public string SerializeFoo(object foo)
{
// uses .Net XML serialzer to serialize foo
}
public object DeserializeFoo(string foo)
{
// uses .NET XML serializer to deserialize foo
}
// Object type returned by above methods is only ever
// used by following method which returns a type available
// to all IDataSerializer implementations as this is
// the data …Run Code Online (Sandbox Code Playgroud)