因此,当我一直在阅读/学习课程及其中的方法时,我发现将公开方法与私有方法之间的实际差异发现很少。
我知道不同之处在于私有类只能在类中访问,而公共方法可以从类外部的代码(其他类,函数)访问。但我真正想知道的是:
另外,我不知道它是否重要,但我在网络应用程序环境中主要学习VB.Net和C#,所以具体到那将有所帮助。
答案 0 :(得分:9)
封装意味着您应该将每个类视为提供服务的计算机。例如,椅子可以让你坐在上面,或者割草机可以让你剪草坪。
私有方法与机器的内部工作方式有关。相反,公共方法与您(其他类)与计算机的交互方式有关。
示例一: 主席......
当坐在椅子上时,你不需要知道馅料的数量或主食的数量,你基本上需要知道它是否被占用以及它是否稳定。
示例二: 割草机......
对于剪草机,你需要知道它是否有足够的燃料(或插入),如果刀片是锋利的,并且能够打开它。
<强>结论:强>
因此,当您正在开发所有内容时,您会看到...
示例一: Chair.Sit,Chair.IsStable和Chair.IsOccupied
或
实施例2: Lawnmower.GetFuelLevel,Lawnmower.IsBladesSharp,Lawnmower.TurnOn,LawnMower.TurnOff
作为开发人员,您不必考虑uphosltry中的线程数,燃料帽的颜色,刀片的RPM数或椅子是否粘合或装订在一起。这种区别使您可以更轻松地将应用程序放在一起而不会被详细淹没。此外,它允许程序员仅公开必要的信息,从而增加安全级别。正如约翰所提到的,这可以防止Person类在它们不应该的时候调用Lawnmower.Combust(燃料)。
答案 1 :(得分:4)
如果该方法是私有的,那么您不必考虑调用它的外部类。
这样做的一个好处是它允许在类的接口(它的公共部分)和它的实现之间分离。如果没有人知道你是如何实现你的类的(也就是说,如果没有代码依赖于你如何实现它),那么你可以自由地改变你实现它的方式而不会破坏任何其他代码。
答案 2 :(得分:2)
这是面向对象编程最重要的原则之一 - encapsulation。
一个类通常提供(公共)接口。例如。 (伪代码):
class Rectangle {
private length;
private width;
public getPerimeter() {
// return calculatePerimeterOld();
return calculatePerimeterNew();
}
private calculatePerimeterOld() {
// old variant
}
private calculatePerimeterNew() {
// Here the perimeter is caltulated.
// so: perimeter = 2 * (length + width)
// or so: perimeter = 2 * (length) + 2 * (width)
// or maybe so: perimeter = length + width + length + width - (0.5 * length) + 2 * 0.25 * length)
return perimeter;
}
}
我可以改变我想要的私人方法。我可以用其他方法重命名或替换它们。但是我的公共界面将保持不变 - 并且它必须保持不变,因为当我将mehod定义为public
时,它是我签署的合同。一切,签名为private
的是我的“黑盒子”,无论我想要什么,我都能在那里做。
这是主要原因。另一个原因是,我们不应该为我们类的用户(-s)提供方法/信息,他们不需要。很多(信息)都不好。
答案 3 :(得分:1)
如果您正在开发一个由您维护的一站式网站,您可能会发现公共和私人功能的概念是不必要的。
但是,如果您正在向其他人提供软件,并且他们正在构建软件之上,那么这绝对是一个至关重要的概念。
可以把它想象成一个有一千个旋钮和开关的物理机器,但它包含在一个漂亮的盒子里,外面只有几个清晰标记的旋钮。
但是,如果它是由一个开发者维护的一次性网站,那么这些差异就不那么重要了。