我试图找出在程序中使用不同访问修饰符的确切优势。据我所知,通过面向对象编程可以实现的所有功能都可以通过过程编程方法来完成。
严肃地说,我找不到合适的解释,而不是与所谓的“现实生活”#34;对象。我现在真正想知道的是,访问修饰符如何在面向对象编程中发挥重要作用,超出正常程序编程中的函数和变量?
我真的很生气并且开始讨厌OOPS,对我来说,这只是一种方法,它需要更多的步骤才能完成任务,使用程序代码更容易实现。如果有人能提供我的参考资料,那也将不胜感激。
答案 0 :(得分:3)
存在不同访问修饰符的主要原因是确保考虑程序的哪些部分应该能够修改各种值。如果使用得当,它们将保护类不会在不使用适当通道的情况下修改值的不适当尝试。
但是,还有另外一个原因需要重构,我在对OO的欣赏中学到的很晚。在大型系统的上下文中考虑此代码:
class Spaceship
{
private function teleport()
{
}
}
想象一下,我们需要更改此方法以添加options参数:我们的第一个任务是扫描整个代码库以查看它的使用位置。但是,在这种情况下我们并不需要:private
是一个非常快速的指示,它只能在同一个类中被调用。这种快速的理解有助于我们认识到这种变化将是次要的。
如果该方法被声明为protected
,那么我们的工作量会更大,因为我们需要检查类和所有子类 - 但是我们立即知道它不是一个很大的重构工作,就像它是public
。
我想补充一点,OO是你需要练习的东西之一,直到你得到那个'啊哈!'时刻。即使是非常教科书的方法也会显示出有效的练习(希望鼓励读者使用OO语言来尝试它们)。我已经构建了许多系统,我无法想象这些系统是以程序的方式进行的,但是我无法证明 - 那就是经验进来了。
答案 1 :(得分:1)
可见性修饰符,更好地称为访问修饰符,用于确定类,类方法(函数)和类变量的访问级别。它规定了代码的其他部分,如果可以看到并使用那部分代码。
面向对象编程与过程编程不同。通过解释这一点,您将了解访问级别的概念。通过过程编程,您可以自上而下编程,并且可以通过使用函数重用代码。根据程序员的不同,代码将被分成较小的部分并存储在各种文件中。
使用面向对象的编程,逻辑会发生变化。一个类代表某种东西,在大多数例子中它们使用真实的东西,如汽车/房子。一个类有属性(类变量),一个类可以做某事/有一些行为(类方法)
现在考虑到这一点,这是一个关于为什么使用访问修饰符的示例:class Car
具有属性(类变量)和行为(类方法)。您可以想象汽车可以做什么:drive()
,stop()
和steer()
。我们认为代码的所有其他部分都应该能够使用这些代码,因此我们将这些行为的访问修饰符设置为public(这意味着:访问所有代码)。
同时我们的Car
有一些隐藏的行为,代码的其他部分可能不需要知道:shiftGear()
,显然drive()
和stop()
方法使用它。我们可以将shiftGear()
设为私有(这意味着:只有Car
类可以使用它),因此它对外界是隐藏的。