了解 OOP 中的封装和抽象
本文关键字:抽象 封装 OOP 了解 | 更新日期: 2023-09-27 18:35:16
我正在阅读OOP的一些基本内容。我对封装和抽象感到困惑。根据我的理解,抽象是一种只暴露少数事物而隐藏很少事物的方式。封装帮助我们封装对象的状态,使其不被外界访问,并且可以通过内部方法访问。因此,它们都是相关的。但是我已经读过很多次,封装是通过使用getter和setter来实现的,而抽象是使用抽象类和接口实现的。现在考虑以下代码 (C#)
class A
{
private int a;
public void print()
{
Console.WriteLine("Value of a = {0}", a);
}
}
class B
{
static void Main(string[] args)
{
A a = new A();
a.print();
}
}
在上面的代码中,我没有使用接口或抽象类,但根据我的理解,我在这里通过不让 B 类直接访问变量 a 实现了抽象。通过实现封装,我确保它只能通过使用 A 的内部方法访问。那么,你能帮我消除困惑吗?
您在示例中实现了抽象。
"抽象"是一个过度的术语,它的确切含义也取决于上下文,这就是为什么有时它会让我们感到困惑。根据定义,"抽象仅捕获与当前视角相关的对象细节。
在您的情况下,(用户)类 B 要求对象"a"(类 A 的类型)打印某些内容,而不详细说明类"A"是如何实现它的。因此,只有方法名称与用户相关,而不是详细信息。
我对Abstration也有很多疑问,但是这个关于抽象的维基百科页面对我帮助很大。
抽象也用于许多硬件和软件概念,如HAL,Datbase,多种语言等。
作为OOPS四大支柱之一,它是"定义代表抽象"参与者"(意味着类)的对象的工具,这些对象可以执行工作(作为方法),报告和更改其状态(事件),并与系统中的其他对象"通信"。
另一方面,封装是(如维基百科上给出的):
术语封装是指隐藏状态详细信息,但扩展数据类型的概念并标准化不同数据类型交互的方式(是抽象的开始)。
但是,如果你把"Abstration"从更深的意义上理解并概括它(再次来自维基百科页面):
当抽象进入定义的操作,使不同类型的对象能够被替换时,它被称为多态性。当它在类型或类内部以相反的方向进行,构建它们以简化一组复杂的关系时,它称为委托或继承。
意味着隐藏复杂性,抽象意味着暴露本质的东西。
例:
汽车与发动机,化油器和其他东西一起工作,使其可移动,(这称为封装),但用户只知道需要知道的streeing,车轮,制动器,门和加速器来驾驶汽车(这称为抽象)