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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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_Software Design - Fatal编程技术网

Oop 对象概念

Oop 对象概念,oop,software-design,Oop,Software Design,根据标准定义,对象是同时包含数据和行为的实体。 据我所知,数据是从外部发送的。例如,我们有一个计算数字平方的类。我们创建了一个实例,并将一条消息连同数字一起发送给要计算平方的对象,。 我们不是从外部发送数据吗? 为什么所有的定义都声明对象包含数据? 谢谢您的示例是一个私有案例,对象不需要保存数据(即状态)。在这种情况下,它可以替换为一个函数(只是行为)。大多数对象都需要存储数据。例如,一个对象人物应该包含描述人物的品质,而不仅仅是可能的行为。我认为问题在于你的例子不适合面向对象的设计。我的意思是

根据标准定义,对象是同时包含数据和行为的实体。 据我所知,数据是从外部发送的。例如,我们有一个计算数字平方的类。我们创建了一个实例,并将一条消息连同数字一起发送给要计算平方的对象,。 我们不是从外部发送数据吗? 为什么所有的定义都声明对象包含数据?
谢谢

您的示例是一个私有案例,对象不需要保存数据(即状态)。在这种情况下,它可以替换为一个函数(只是行为)。大多数对象都需要存储数据。例如,一个对象人物应该包含描述人物的品质,而不仅仅是可能的行为。

我认为问题在于你的例子不适合面向对象的设计。我的意思是,计算一个数的平方是一个无记忆函数,因此显然没有理由在对象属性中存储数据。然而,当您必须处理有状态实体的管理时,您将更容易了解类和面向对象的重要性

对象是类的实例


类(a,a*a)是正方形类,但(2,4)是它(对象)的实例。是的,数据被发送到类并创建新对象。

在此上下文中,数据是对象的状态。该定义表示对象的状态/数据应在内部存储。例如,考虑下面的类:

class Math {

  Double square(double x) {
      return x * x;
  }
  // other similar functions
}
作为一种语言结构,它是一个类。但是,在面向对象的意义上,它不是一个真正的类。因为它没有状态或数据。它只是一个封装在类构造中的函数。这不一定是错误的。因为在本例中,恰好有不需要状态的操作

定义试图强调的是:当一个真实的对象(或它的类)既有数据又有行为时,它就拥有了一个真实的对象。并不是每个类构造的用法都代表一个真正的对象

因此,如果表示对象的类满足以下三个条件,那么就有一个对象

  • 该类具有状态/日期。如果不是,那么它只是一堆函数。它不是面向对象的,而是过程性的
  • 这个班有学生的行为。如果不是,那么它只是一个容器,一堆变量(C中的结构)
  • 类不仅具有状态/数据和行为/方法,而且在数据和行为之间存在内在的关系。这意味着仅仅把一些变量和函数放在一起并不能构成一个真正的对象。例如,如果您在类中有状态/数据,并且您也有一些方法,但是如果该函数不需要对任何状态进行操作,那么存在一个问题,即该方法是否真的属于该类 下面是一个我认为合适的类(对象的表示)的简单示例


    在这里,我们看到类同时具有状态和行为。我们还看到状态和行为都属于这个类。它们是患者概念的属性。我们进一步看到,操作与数据有着内在的联系。如果不咨询/使用患者的状态,您就无法确定患者是否健康。

    是的,我们将其输入到对象中,但对象由这两个部分组成。对象可以同时包含这两个部分,但不要求它这样做。例如,假设我们有一个文件对象。我们可以使用文件名调用
    File::Open
    方法,如
    myfile->Open(“SomeFile.txt”)此时的文件对象可能试图打开文件,在内部跟踪某种文件指针,可能是文件名等。因此,现在它有数据,可能是文件大小为
    myfile->FileSize
    ,或者文件中的位置为
    myfile->FilePosition
    。然后,您可以调用更多函数“行为”,例如
    myfile->Close
    myfile->Read
    ,等等。对象可以由纯数据或纯行为组成,也可以由两者组成。这是你的选择。添加字段并保持状态。添加方法并实现您的行为。对象范式只表示它可以包含这两个变量
    Class Patient {
          // blood pressure
         double systolic;
         double diastolic;
         double weight;
          int age;
         public Patient(double systolic,   double diastolic,  double weight, int age){
    
        }
    
       Public boolean isHealthy(){
            // do some calculations and algorithms on age, weight and blood pressure indicators.
            // return result as true of false
      }
    
    }