了解 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 的内部方法访问。那么,你能帮我消除困惑吗?

了解 OOP 中的封装和抽象

您在示例中实现了抽象。

"抽象"是一个过度的术语,它的确切含义也取决于上下文,这就是为什么有时它会让我们感到困惑。根据定义,"抽象仅捕获与当前视角相关的对象细节。

在您的情况下,(用户)类 B 要求对象"a"(类 A 的类型)打印某些内容,而不详细说明类"A"是如何实现它的。因此,只有方法名称与用户相关,而不是详细信息。

我对Abstration也有很多疑问,但是这个关于抽象的维基百科页面对我帮助很大。

抽象也用于许多硬件和软件概念,如HAL,Datbase,多种语言等。

作为

OOPS四大支柱之一,它是"定义代表抽象"参与者"(意味着类)的对象的工具,这些对象可以执行工作(作为方法),报告和更改其状态(事件),并与系统中的其他对象"通信"。

另一方面,封装是(如维基百科上给出的):

术语封装是指隐藏状态详细信息,但扩展数据类型的概念并标准化不同数据类型交互的方式(是抽象的开始)。

但是,如果你把"Abstration"从更深的意义上理解并概括它(再次来自维基百科页面):

当抽象进入定义的操作,使不同类型的对象能够被替换时,它被称为多态性。当它在类型或类内部以相反的方向进行,构建它们以简化一组复杂的关系时,它称为委托或继承

封装

意味着隐藏复杂性,抽象意味着暴露本质的东西。

例:

汽车

与发动机,化油器和其他东西一起工作,使其可移动,(这称为封装),但用户只知道需要知道的streeing,车轮,制动器,门和加速器来驾驶汽车(这称为抽象)