OOP,对象概念

时间:2013-02-26 20:08:28

标签: oop software-design

根据标准定义,对象是包含数据和行为的实体。   根据我的理解,数据是从外部发送的。例如,我们有一个类来计算数字的平方。我们创建一个实例,并将数据和数字一起发送给对象来计算正方形。   我们不是从外面发送数据吗?   为什么所有定义都表明对象包含数据? 感谢

4 个答案:

答案 0 :(得分:2)

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

class Math {

  Double square(double x) {
      return x * x;
  }
  // other similar functions
}

作为一种语言结构,它是一个类。但是,它不是面向对象意义上的真正阶级。因为它没有状态或数据。它只是一个包含在类构造中的函数。这不一定是错的。因为在这种情况下,您可能会遇到不需要状态的操作。

这个定义试图强调的是:你有一个真实的对象,当它(或它的类)同时拥有数据和行为时。并非每个类构造的用法都代表一个真实的对象。

因此,如果表示它的类满足以下三个条件,则会有一个对象。

  1. 班级有州/日。如果没有,那么它只是一堆功能。它不是面向对象的,而是程序性的。
  2. 班级有行为。如果没有,那么它只是一个容器,一堆变量(C中的结构)。
  3. 不仅类具有状态/数据和行为/方法,而且数据和行为之间存在内在关系。这意味着只是将一些变量和函数放在一起并不能成为一个真正的对象。例如,如果你有状态/数据,并且在类中也有一些方法,但是如果该函数不需要对任何状态进行操作,则存在一个问题,即该方法是否真的属于该类。
  4. 下面是一个简单的例子,我认为它是一个正确的类(对象的表示)。

    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
      }
    
    }
    

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

答案 1 :(得分:1)

我认为问题在于你的例子非常适合面向对象的设计。我只是意味着计算数字的平方是无记忆函数,因此显然没有理由在对象属性中存储数据。但是,当您必须处理有状态实体的管理时,您将更容易地获得类和对象定位的重要性。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

对象是类的实例。

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