Oop 面向对象的主要概念

Oop 面向对象的主要概念,oop,language-agnostic,Oop,Language Agnostic,有一次我在采访中被问到“OOP的三个主要概念是什么?”。 我的回答是,我认为有4种情况如下: 继承权 封装 抽象 多态性 P>我是正确的吗? < P>大多数人都会认为这是正确的,我猜如果他们要求三,它将是继承、封装和多态性。 我个人发现这三个概念才是真正的“肉”,如果你愿意理解OOP的定义的话。大多数人认为抽象是理所当然的,并将其与其他人融为一体,因为它实际上可以被视为其他三者的一部分 当我谈到OOP时,我总是提到4。这就是我所知道的四个骑士。也许他们错误地将继承和多态性混为一谈。我想说,抽

有一次我在采访中被问到“OOP的三个主要概念是什么?”。 我的回答是,我认为有4种情况如下:

  • 继承权
  • 封装
  • 抽象
  • 多态性

P>我是正确的吗?

< P>大多数人都会认为这是正确的,我猜如果他们要求三,它将是继承、封装和多态性。 我个人发现这三个概念才是真正的“肉”,如果你愿意理解OOP的定义的话。大多数人认为抽象是理所当然的,并将其与其他人融为一体,因为它实际上可以被视为其他三者的一部分


当我谈到OOP时,我总是提到4。这就是我所知道的四个骑士。也许他们错误地将继承和多态性混为一谈。

我想说,抽象不仅仅是一个面向对象的概念,因为你可以在很多非面向对象语言中进行很大程度的抽象。

也许后三种是他们所寻找的——继承可以被认为是一种帮助实现其他概念的机制,这是更高层次的目标


无论如何,没有一个真正正确的答案,特别是如果仅限于“前三名”。

是的,这是标准的四名

有些人将抽象和封装结合起来。我不知道为什么。。。它们不是完全正交的,但可能有足够的重叠?遗传和多态性之间当然有重叠,但在我看来,很难将它们结合起来。

这是正确的


然而,如果你必须只提供一种抽象,那么它必须是,无论如何,其余三种只是实际的抽象。

面向对象编程的问题是,没有人愿意给出一个正确、简洁、一致的定义。特别是,我想指出,您提到的所有方面都可以在不使用面向对象的情况下付诸实施

这两种类型的系统是Haskell型系统,它通常不被视为面向对象,而C++模板则是模板子类。然而,可能有人认为模板子类化模拟OOP

由于模板子类化不是一种广为人知的机制,所以让我举一个它发明地的例子

String<Char> cstr = "This is a test";
String<Dna, Packed<> > dstr = "GATTACA";

cout << "length(" << cstr << ") = " << length(cstr) << endl;
cout << "length(" << dstr << ") = " << length(dstr) << endl;
String cstr=“这是一项测试”;
字符串dstr=“GATTACA”;
cout
本[条款][1]提到了良好准则的三大支柱。我发现这是一篇优秀的文章,它认为封装是面向对象设计的“第一原则”。

“第一”原则是基本的、基本的原则,所有其他原则都源自这些原则。作者以黄金法则为例。教育孩子们文明行为的所有细节是很困难的,但如果你能让他们理解(更重要的是,实践)以你所希望的方式对待他人的黄金法则,那么他们就更有可能“获得”我们每天都要遵守的所有法律和道德标准。

因此,如果开发人员将封装理解为面向对象开发的“第一原则”,那么所有其他原则都将在适当的时候遵循。

我不会公正地对待作者的内容,但我肯定会鼓励人们阅读。

由于某些原因,我没有显示通过的超链接,因此以下是URL:http://www.netobjectives.com/files/Encapsulation_First_Principle_Object_Oriented_Design.pdf
OOP中的3个主要概念:

  • 后期装订
  • 概念重用(无论如何,不确定这一点:重用概念;避免重新实现最简单的概念)
  • 抽象

语言要面向对象,有3个要求:

  • 只支持封装(对象)的语言不是面向对象的,而是模块化的
  • 只支持封装(对象)和消息传递(多态)的语言不是面向对象的,而是基于对象的
  • 支持封装(对象)、消息传递(多态性)和继承(抽象)的语言是面向对象的

注:抽象是一个更一般的概念;封装等是一种抽象,正如子程序是一种抽象一样。请看

这可能是采访中的一个技巧性问题,但最近在计算机科学课上,他们教授面向对象编程的四大支柱。

这个问题的正确答案是:“请澄清你所说的面向对象编程是什么意思。”,因为真正的问题是:“当我说OOP时,我是什么意思?”


没有正确的答案。

四大支柱与您的正确状态相同

  • 封装
  • 抽象
  • 继承权
  • 多态性
封装处理的是包含数据,不多不少

抽象处理数据抽象,即所有这些数据是否真的相关。试想一家银行,其中包含姓名、年龄、地址、眼睛颜色、喜爱的领带等信息。眼睛颜色和喜爱的领带真的与银行要求相关吗?不,这是抽象的

继承涉及泛化。可以应用于多个事物的信息。如果某事物继承自某事物,那么它可以说是该事物的一种更具体的类型。例如,动物。狗是动物的一种,所以狗是从动物遗传而来的。杰克·拉塞尔是狗的一种,所以杰克·拉塞尔继承了狗的血统

多态性处理具有多种形式的事物(poly-morph)。 编程有两种,

  • 后期装订
  • 您将某些内容称为通用类型,因此编译器不知道在编译时绑定什么。考虑方法重写

  • 早期装订