了解OOP中的封装和抽象

时间:2014-12-26 12:05:27

标签: c# oop encapsulation abstraction

我正在阅读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的内部方法访问它。 那么请你帮我清除一下这个混乱?

2 个答案:

答案 0 :(得分:3)

您在示例中实现了抽象。

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

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

我对Abstration也有很多怀疑,但this wikipedia page on Abstraction给了我很多帮助。

抽象用于许多硬件和软件概念,如HALDatbasemultiple languages等。

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

另一方面,封装是(如维基百科上所示):

  

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

但是如果你更深入地理解“Abstration”并将其概括(再次来自维基百科页面):

  

当抽象进入定义的操作时,启用不同类型的对象,它被称为多态。当它在相反的方向上进行时,在类型或类中,构造它们以简化一组复杂的关系,它被称为委托或继承

答案 1 :(得分:2)

封装意味着隐藏复杂性,抽​​象意味着暴露基本的东西。

示例:

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