2013-02-26 2 views
3

표준 정의에 따르면 개체는 데이터와 동작을 모두 포함하는 개체입니다. 내 이해에 따르면 데이터는 외부에서 전송됩니다. 예를 들어 숫자의 제곱을 계산하는 클래스가 있습니다. 인스턴스를 만들고 숫자와 함께 메시지를 전송하여 사각형을 계산합니다. 외부에서 데이터를 보내지 않습니까? 모든 정의에 개체에 데이터가 들어 있다고 나와있는 이유는 무엇입니까? 감사합니다.OOP, 개체 개념

+0

예. 개체에 입력하지만 개체는 둘 모두로 구성됩니다. –

+1

개체는 둘 다 포함 할 수 있지만 그렇게해야 할 필요는 없습니다. 예를 들어 File 객체가 있다고 가정 해 보겠습니다. 'myfile-> Open ("SomeFile.txt"); ' 그 시점의 File 객체는 파일을 열어서 정렬을 유지하려고 시도 할 가능성이 높습니다 내부적으로는 파일 포인터의 이름 일 수도 있고 가능하면 파일 이름 등일 수도있다. 그래서 이제는 파일 크기가'myfile-> FileSize'이거나 파일의 위치가'myfile-> FilePosition'이다. 그런 다음,'myfile-> Close','myfile-> Read' 등과 같은 더 많은 함수를 호출 할 수 있습니다. –

+0

객체는 순수한 데이터 또는 순수한 동작으로 구성되거나, 둘 모두로 구성 될 수 있습니다. 그것은 당신의 선택입니다. 필드를 추가하고 상태를 유지합니다. 메소드를 추가하고 동작을 구현하십시오. 객체 패러다임은 둘 다 포함 할 수 있다고 말합니다. – Alex

답변

2

데이터는이 컨텍스트에서 개체의 상태입니다. 정의에 따르면 객체의 상태/데이터는 내부적으로 저장되어야합니다. 예를 들어, 다음 클래스를 고려하십시오.

class Math { 

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

언어 구조로서 클래스입니다. 그러나 객체 지향적 인 의미에서 진정한 클래스는 아닙니다. 상태 또는 데이터가 없기 때문입니다. 그것은 단지 클래스 구조로 싸여있는 함수입니다. 이것은 반드시 잘못된 것은 아닙니다. 이 경우에는 상태가 필요하지 않은 작업이 발생하기 때문입니다.

강조하려는 정의는 다음과 같습니다. 실제 객체 (클래스 (클래스))에 데이터와 동작이 모두있는 경우입니다. 클래스 구성의 모든 용도가 실제 개체를 나타내는 것은 아닙니다.

따라서 클래스를 나타내는 클래스가 다음 세 가지 조건을 충족하는 경우 개체가 있습니다.

  1. 클래스에는 주/날짜가 있습니다. 그렇지 않다면 그것은 단지 많은 기능입니다. 그것은 객체 지향적이지 않고 절차 적입니다.
  2. 클래스에 문제가 있습니다. 그렇지 않다면, 그것은 단지 컨테이너 일뿐입니다. (C의 구조체).
  3. 클래스에는 상태/데이터 및 동작/메서드가있을뿐만 아니라 데이터와 동작 사이에 본질적인 관계가 있습니다. 즉, 변수와 함수를 함께 던지면 참된 객체가 만들어지지 않습니다. 예를 들어, 상태/데이터가 있고 클래스에 몇 가지 메소드가 있지만 해당 함수가 상태를 조작 할 필요가없는 경우 해당 메소드가 실제로 해당 클래스에 속하는지 여부가 문제입니다.

다음은 올바른 클래스 (객체 표현)라고 생각되는 간단한 예입니다.

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 
    } 

} 

여기서 클래스는 상태와 동작을 모두 가지고 있습니다. 우리는 또한 국가와 행동이이 수업에 속한다는 것을 알 수 있습니다.그들은 환자의 개념의 속성입니다. 우리는 또한 작업이 데이터와 본질적인 관계가 있음을 확인합니다. 상태를 상담하거나 사용하지 않고 환자의 건강 여부를 결정할 수 없습니다.

0

이 예는 개체가 데이터를 보유 할 필요가없는 비공개 사례입니다 (예 : 상태). 이 경우 함수로 바꿀 수 있습니다 (동작 만). 대부분의 객체는 데이터를 저장해야합니다. 예를 들어, 객체 Person은 단지 가능한 행동이 아니라 그 사람을 묘사하는 자질을 포함해야합니다.

1

나는이 문제가 당신의 예제에서 Object Oriented 디자인과 잘 맞지 않는다고 생각합니다. 방금 숫자의 제곱을 계산하는 것이 memoryless 함수라는 것을 의미하므로 개체 속성 안에 데이터를 저장할 이유가 없습니다. 그러나 당신이 stateful 엔터티의 관리를 다루어야 할 때 일반적으로 클래스와 객체 지향의 중요성을보다 쉽게 ​​얻을 수 있습니다.

0

개체는 클래스의 인스턴스입니다.

클래스 (a, a * a)는 사각형 클래스이지만 (2, 4)는 그 인스턴스 (개체)입니다. 예, 데이터가 클래스로 보내지고 새 객체가 만들어집니다.