我正在尝试学习OOP,我确实阅读了很多有关OOP的主题,但是我仍然没有完全掌握这些概念。
我要求对此事做出一些澄清,特别是: 在班上设有公共成员可以吗?还是应该始终使用getter和setter?
答案 0 :(得分:0)
OOP或面向对象编程是编写程序的范例(方法)。基本上,它通过将所有内容都视为由类表示的对象来简化程序的创建。
OOP(适用于所有语言)的基本概念很明确:
Animal
,它有一个名为talk()
的方法可以打印一些文本,并且有两个子类,分别称为dog
和cat
。两个子类都将从其父类talk()
继承方法Animal
。狗和猫都是动物,但说话方式不同。为了解决这个问题,我们将使用多态性的概念在子类中重新定义方法talk()
,而无需更改方法的名称或签名。tempDown()
和tempUp()
可以将温度降低和升高1度。
您在这里需要了解的是,AC内部已经内置了降低或升高温度的方法。降低温度或升高温度的不是我们这些人,确定我们确实按下了按钮,但这只会触发执行此操作的方法。功能本身建立在AC内部而不是外部,也就是说,操纵AC的方法应封装在AC内部。从概念上讲,另一侧的属性应为private
。 AC的属性(例如温度)属于AC本身,不应为public
。不好的做法是将类的属性设置为public
,因为它违反了封装的概念。因此,只有使用属性封装的方法才可以访问它们。如果需要从类外部编辑对象的属性,则可以创建一个为您执行此操作的方法。方法是public
。最后,关于 getter和setters 的使用,关于该主题的争论很多,甚至有人将它们描述为“邪恶的”。如果创建仅用于访问类属性的方法,则最好将它们设置为public,并省去多余的代码行。某些语言甚至有更好的方法来管理成员,例如在Python中使用属性。就像我之前说过的那样,属性应该保留private
,并且只能由对象本身进行编辑/访问,而不是从外部进行。做到这一点的方法是通过操纵它们的方法。例如,假设您有一个银行帐户,其属性为:余额。如果将属性设置为public
或具有getter / setter方法,则意味着任何人都可以从类外部访问您的余额并将其更改为所需的任何值。另一方面,如果您具有属性private
,则该类决定通过这些方法可以进行哪种数据操作。一种仅打印余额的方法,或者如果从另一个帐户提取余额则仅会增加钱的方法,您甚至可以通过记录每种方法中的每个操作来添加额外的安全性层。
您可以添加Abstraction(基本上通过接口分离代码的声明和实现)并在混合中重载。您可以在此处阅读更多信息: