【问题标题】:Abstraction = encapsulation + data hiding?抽象=封装+数据隐藏?
【发布时间】:2018-06-29 08:41:54
【问题描述】:

我浏览了很多帖子,但没有明白这一点。

我们可以说:抽象 = 封装 + 数据隐藏

或者不止于此!!

谢谢

【问题讨论】:

标签: oop encapsulation abstraction


【解决方案1】:

这个问题更像是一个面向对象的问题。 #oop 将是一个很好的标签。

回答您的问题: 不,抽象不等于封装和数据隐藏。顺便提一下,抽象和封装都有数据隐藏的概念。但是,它们并不相同。

封装是将变量或方法隐藏在一个类中,以防止来自外部世界的任何变化。 然后我们可以通过 getter/setter 方法控制正在操作的内容。简单的例子是当我们有一个 Person 类时。在这个 Person 类中,假设我们有一个变量来跟踪年龄。现在,我们有一个 GetAge() 方法来返回 Person 的年龄;另一方面,我们修改了 SetAge(int age) 方法,只在传入参数的年龄大于当前年龄时才设置新年龄(因为我们只会随着时间的推移而变老......)。

public class Person {

    private int age;

    public Person(int age) { 
        this.age = age; 
    }

    public int GetAge() { 
        return age 
    }

    public void SetAge(int age) {
        if (this.age < age) { 
            this.age = age; 
        }
    }
}

抽象用于提取和突出显示将共享给通用抽象类接口的主要功能。简单的例子是当我们有一个 IAnimal 的接口时。在这个界面中,我们只是为 Eat(int numOfBowls) 和 Sleep(double hours) 方法创建了一个模板。 我们已经为任何动物抽象出了必要的方法(这就是抽象)。下面的代码将清楚地向您展示我的意思,但我还举了一个使用 继承 的示例,这是面向对象编程的另一个主要概念(这里将不涉及,因为它超出了范围从手头的问题)。

public interface IAnimal {
    void Eat(int numOfBowls);
    void Sleep(double hours);
}

public class Dog : IAnimal {

    public void Eat(int numOfBowls) {
        // eat numOfBowls passed in
    }

    public void Sleep(double hours) {
        // sleep for number of hours passed in
    }

    public void Bark() { 
        Console.WriteLine("woof");
    }
}

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2013-09-29
    • 2017-03-20
    • 2017-11-29
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多