Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对OOP中抽象和封装的理解混乱_Oop - Fatal编程技术网

对OOP中抽象和封装的理解混乱

对OOP中抽象和封装的理解混乱,oop,Oop,我在学习JS时遇到了OOP这个术语。然后,当我学习OOP时,我发现了抽象和封装等概念。此外,当我研究它们之间的区别时,大多数文章都说抽象和封装都与数据隐藏有关,这让我非常困惑。然而,我推断,封装是当我们只在对象中放置对其进行操作的变量和函数时,而抽象是当我们使用访问修饰符来限制对对象中的属性或函数的访问时。同样,封装是当我们使用胶囊状对象并将变量和函数放入其中以实现组织和可重用性时。但抽象是当我们限制对对象内部变量和函数的访问时。这是真的吗?封装意味着您在类(或对象)内为外部世界保护数据,就像您

我在学习JS时遇到了OOP这个术语。然后,当我学习OOP时,我发现了抽象和封装等概念。此外,当我研究它们之间的区别时,大多数文章都说抽象和封装都与数据隐藏有关,这让我非常困惑。然而,我推断,封装是当我们只在对象中放置对其进行操作的变量和函数时,而抽象是当我们使用访问修饰符来限制对对象中的属性或函数的访问时。同样,封装是当我们使用胶囊状对象并将变量和函数放入其中以实现组织和可重用性时。但抽象是当我们限制对对象内部变量和函数的访问时。这是真的吗?

封装意味着您在类(或对象)内为外部世界保护数据,就像您所说的那样,您可以通过来自同一对象的方法(函数)访问私有或受保护的数据

抽象是完全不同的。让我们举个例子。 假设您希望对表单字段使用约束。例如,您有一个formfield“email”,它可能不是空的,并且必须包含有效的电子邮件

因此,您希望在应用程序中的大量表单字段中添加不同类型的约束

所有约束必须有两种方法:

1) 测试formfield数据是否有效的方法

2) 如果数据无效,则传递错误消息的方法

现在,在编写所有这些不同的约束对象之前,您可以编写一个抽象父类,其中包括这两个方法,但不需要任何代码:

(我使用PHP)

上面的类是抽象的,不能自己使用(实例化)。但您可以编写继承上述类的不同约束类:

class NotEmptyConstraint extends Constraint
{
    // Mandatory overwritten methods:
    protected function validate(string $data)
    {
        if(strlen($data) > 0 ) {
            return true;
        }

        return false;
    }

    protected function getErrorMessage();
    {
        return 'This is a mandatory field';
    }
} 
现在,您所有的约束类都有两个强制方法,您可以安全地使用它们,而无需知道您要处理的确切约束

希望能有帮助。

面向对象是一种教条

这个网站的作者写了一篇关于抽象以及为什么它不起作用的文章:

换句话说,手机和局域网电话并不是基于同一个电话的硬编码抽象。他们可以自由成为自己的班级。Barbara Liskov(固体)认为每一种都是亚型。我强烈反对通过创建这种任意的分层分类方案来束缚你的手脚。真正的机器不是这样设计的。参考机械设计的基本原则,该原则规定了设计的简单性,在可行时意味着更少的部件。一个单独的抽象类是浪费时间的,它将设计本身分为两个模块

封装是一种错误的想法,即对象拥有其操作的数据,因此必须控制对数据的访问。这一概念被制造业的协作工作模型所推翻,这正是我的体系结构所基于的。螺丝刀不会因为改变位置而拥有螺丝。它只是可以访问它

OOP和封装导致了分布式过程代码模型。对象彼此之间的电子邮件工作,就像无用的办公室员工不保留电子邮件跟踪一样。如果你曾经收到过一些人的电子邮件,他们请求帮助却不给你任何信息,那么你就理解我的模仿。在制造业中,步骤被记录在案,并且从不沟通,这创造了巨大的好处。OOP只是编写单片自动化流程的足够专业知识,而不是在一角硬币上停止、反向、可以动态插入或替换步骤并重试步骤的流程。OOP是分布式制造的一个模型,而制造是组织在同一空间中创造某种产品的每个人的模型

class NotEmptyConstraint extends Constraint
{
    // Mandatory overwritten methods:
    protected function validate(string $data)
    {
        if(strlen($data) > 0 ) {
            return true;
        }

        return false;
    }

    protected function getErrorMessage();
    {
        return 'This is a mandatory field';
    }
}