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,我正在努力学习OOP,我读了很多关于OOP的话题,但我仍然没有完全掌握这些概念 我要求就此事作出澄清,特别是: 类中有公共成员可以吗?还是应该始终使用getter和setter?OOP或面向对象编程是编写程序的范例(方法)。基本上,它简化了程序的创建,因为它将所有内容都视为类表示的对象 OOP(适用于所有语言)的基本概念很清楚: 继承:对象A(或类)能够从另一个对象继承,比如说对象B。这意味着对象A(在本例中为子对象)将继承对象B(在本例中为父对象)的属性和方法。这个概念意味着您可以重用代码

我正在努力学习OOP,我读了很多关于OOP的话题,但我仍然没有完全掌握这些概念

我要求就此事作出澄清,特别是:
类中有公共成员可以吗?还是应该始终使用getter和setter?

OOP或面向对象编程是编写程序的范例(方法)。基本上,它简化了程序的创建,因为它将所有内容都视为类表示的对象

OOP(适用于所有语言)的基本概念很清楚:

  • 继承:对象A(或类)能够从另一个对象继承,比如说对象B。这意味着对象A(在本例中为子对象)将继承对象B(在本例中为父对象)的属性和方法。这个概念意味着您可以重用代码
  • 多态性:顾名思义,它意味着比对象更具体地说,方法可以有多种形式。怎么用?这个概念与继承有关。假设您有一个父类是
    Animal
    ,它有一个名为
    talk()
    的方法来打印一些文本,您有两个子类,分别名为
    dog
    cat
    。两个子类都将从父类
    Animal
    继承方法
    talk()
    。猫和狗都是动物,但它们说话的方式不同。为了解决这个问题,我们将使用多态性的概念在子类中重新定义方法
    talk()
    ,而无需更改方法的名称或签名
  • 封装:最后,理解这个概念应该回答问题2和3。基本上,这意味着每个对象或类将包含在自己的成员(提供数据)和方法(提供数据操作)中。这样,您所做的是将数据与作为对象的一个容器中的方法绑定。例如,让我们把空调简称为AC。空调有属性,比如:品牌、型号、温度。此外,它还封装了操作温度的方法:
    tempDown()
    tempUp()
    将温度降低和升高一度。 这里你需要了解的是,空调降低或升高温度的方法已经内置在里面了。不是我们这些人降低或升高温度,当然我们确实按下了按钮,但这只会触发这样做的方法。功能本身构建在AC内部而不是外部,也就是说,操纵AC的方法应该封装在AC内部。另一侧的属性根据概念应该是
    私有的
    。空调的属性,例如温度,属于空调本身,它不应该是公共的。将类的属性设置为
    public
    是不好的做法,因为它违背了封装概念。因此,只有用属性封装的方法才能访问它们。如果需要从类外部编辑对象的属性,可以创建一个方法来执行此操作。方法是
    public
最后,关于“功德”和“功德”的使用,有很多争论,有些人甚至把它们描述为“邪恶”。如果创建方法只是为了访问类属性,那么最好将它们设置为public,并节省额外的代码行。有些语言甚至有更好的方法来管理成员,比如在Python中使用属性。正如我前面所说,属性应该保持私有,并且只能由对象本身编辑/访问,而不能从外部编辑/访问。实现这一点的方法是通过操纵它们的方法。例如,假设您有一个属性为“余额”的银行帐户。如果您将属性设置为
public
或具有getter/setter,这意味着任何人都可以从类外访问您的余额,并将其更改为他们喜欢的任何值。另一方面,如果您具有属性
private
,则该类决定您可以通过这些方法进行何种类型的数据操作。一种只打印余额的方法,或者如果从另一个帐户提取,只会增加资金的方法,您甚至可以通过在每个方法中记录每个操作来添加额外的安全层

您可以在混合中添加抽象(基本上通过接口分离代码的声明和实现)和重载。您可以在此处阅读更多信息:


你的问题太宽泛了;看,好工作的人,这澄清了很多事情。我仍然对抽象概念有点困惑,但都是好人。读这篇文章,伙计:以后你的问题要尽量具体一些。@AhmedAboumalek,你应该在一个重要的误导点上改进你的答案,我的意思是,如果你允许我提建议,那会是什么@progmatico“以我的拙见,我认为如果一个人想要真正遵循OOP概念,就不应该使用它们。”然后,当getter和setter被限制为获取和设置时,你给出了很好的理由。