既然没有有意义的术语的辩论是无意义的,我想我会指出房间里的大象并问:到底什么使一种语言成为“面向对象的”?我这里不是在寻找教科书式的答案,而是基于您在您所处领域中使用良好的OO语言的经验。
一个相关的问题可能有助于首先回答:什么是面向对象语言的原型以及为什么?
既然没有有意义的术语的辩论是无意义的,我想我会指出房间里的大象并问:到底什么使一种语言成为“面向对象的”?我这里不是在寻找教科书式的答案,而是基于您在您所处领域中使用良好的OO语言的经验。
一个相关的问题可能有助于首先回答:什么是面向对象语言的原型以及为什么?
对我而言,面向对象编程就是通过发送消息来协作的对象。对我而言,这是面向对象语言中最重要的特征。
如果我必须列出一个面向对象语言必须具备的所有特征的有序列表,它将如下所示:
显然,这个列表非常有争议,因为它排除了许多被广泛认为是面向对象的语言,比如Java、C#和C++,它们都违反了1、2和3号点。然而,毫无疑问,这些语言允许面向对象编程(但C也可以),甚至更容易实现(而C不行)。因此,我称满足这些要求的语言为“纯面向对象”。 f(x)
在编译时,f的名称可能绑定到特定的代码块。(除非这是一种具有高阶函数或函数指针的过程性语言,但暂且忽略这种可能性。)因此,这行代码只能意味着一件明确的事情。
在面向对象的语言中,我向一个对象传递消息,可能像这样:
o.m(x)
根据Booch的说法,以下元素:
次要:
尽管Simula经常被认为是第一种面向对象的语言,但Smalltalk通常被视为原型面向对象语言。
当前的面向对象编程语言可以根据它们从哪些语言借用最多的概念进行松散分类:
当你可以创建类时,它就是面向对象的
例如:Java 是面向对象的,JavaScript 不是,而 C++ 看起来像某种“面向对象好奇”的语言
简单:(比较保险字符)
1-Polymorphism 2-Inheritance 3-Encapsulation 4-Re-use. :)
对象:对象是数据的存储库。例如,如果MyList是一个ShoppingList对象,那么MyList可能记录你的购物清单。
类:类是一种对象类型。许多相同类的对象可能存在;例如,MyList和YourList都可以是ShoppingList对象。
方法:在对象或类上操作的过程或函数。方法与特定类相关联。例如,addItem可能是将项目添加到任何ShoppingList对象的方法。有时,方法与一组类相关联。例如,addItem可能对任何List进行操作,其中ShoppingList只是一种类型。
继承:类可以从更一般的类中继承属性。例如,ShoppingList类从List类继承存储项目序列的属性。
多态性:能够使一个方法调用适用于几个不同类的对象,即使这些类需要不同的方法实现。例如,一行代码可能能够在每种类型的List上调用“addItem”方法,即使将项目添加到ShoppingList与将项目添加到ShoppingCart完全不同。
面向对象编程:每个对象都知道它自己的类以及哪些方法可以操作该类中的对象。每个购物清单和每个购物车都知道哪个addItem实现适用于它。
在这个列表中,真正区分面向对象语言(如Java、Python)和过程式语言(如C、Fortran、Basic、Pascal)的是多态性。
来源:https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd