' 상태 ' 라는 용어 는 다양한 의미로 사용될 수 있으며, 심지어 모든 것이 정확한 정의에 영향을받지 않을 수도있다. 당신이 방법을 아주 명확하게하기 위해 종이의 정의를 포함하는 것이 중요했다 당신이 용어를 사용했다. 다음에서 나는 객체의 상태에 대한 고유 한 정의를 제공하지 않고 다른 맥락에서 적절할 수있는 여러 가지 사고 방식을 스케치하려고 시도합니다.
그러나 먼저 ' 객체 '가 의미하는 바를 생각해야합니다 . 개념적 객체, 즉 모델링하려는 일부 엔티티 또는 특정 프로그램의 클래스 인스턴스에 대해 생각하고 있습니까? 다른 시간에 다른 객체 또는 시스템을 참조 할 수있는 변수의 상태에 대해 생각하고 싶을 수도 있습니다. 어쩌면 특정 사용자 인터페이스를 통해 액세스 할 수 있습니다.
OOP에서 객체의 상태를 정의하는 데 어려움의 일부는 특정 언어로 엔티티를 모델링 할 때 해당 언어로 인해 동일한 엔티티의 일부인 오브젝트 속성을 다른 엔티티와 구별 할 수없는 경우가 종종 있습니다. 예를 들면, 링크 된리스트 Car
들로 구성한다 Link
포인터를 포함 -objects 다음 (아마도 이전) Link
개념적 비록 목록은 하나의 목적은; 링크도 포함 할 수 있습니다Car
-객체 또는 그들에 대한 포인터를 포함하지만이 경우 연결된 객체는 목록의 일부가 아닌 개념적으로 분리됩니다. 그러나 최근 변경 사항 목록에서 변경 사항은 목록에만 나타나고 그 일부로 간주 될 수 있습니다. 이러한 다양한 경우에 우리는 하나의 객체의 상태가 링크 된 객체의 상태를 포함하는지 고려할 것인지 결정해야합니다. 또한,에 Car
대한 링크가있을 수 있습니다. Registering_Authority
등록 기관이 웹 사이트의 URL을 변경할 때 자동차의 상태가 변경되는 것으로 간주하지 않을 수 있습니다. 구현 언어로 인해 서로 다른 유형의 링크를 구별 할 수 없으면 언어만으로 객체의 상태를 일반적으로 정의 할 수 없습니다.
' 외부 '또는 ' 기능적 ' 상태 는 '동작 방식'으로 정의 될 수 있습니다. 메소드 호출 또는 사용자 인터페이스에 대한 반응 클래스 인스턴스 인 객체의 경우이 정의는 객체가 속한 것으로 보이는 유형에 따라 다릅니다 Circle
.Coloured_Circle
표시되지 않으므로 상태와 관련이 없습니다. 이것의 어려움은 반환되는 값의 관점에서 '반응하는 방식'이 정의 될 필요가있을 수 있으며, 이러한 '값'은 다른 객체의 상태 일 수 있다는 것입니다. 이를 공식화하는 한 가지 방법은 오브젝트가 임베드 된 일부 시스템의 모든 향후 실행으로 인해 입력에서 해당 시스템으로의 출력과 동일한 맵핑이 발생하는 경우 오브젝트의 두 상태가 동일하다는 것입니다. 이 엔 클로징 시스템은 환경에 관계없이 실행 가능한 자체 포함 시스템이어야합니다. 반면에, 문제의 대상 자체만큼 작게 만들 수 있습니다. 어쨌든 수학적 접근법은 상태를 등가 클래스로 정의하는 것입니다.
' 내부 ' 상태 는 표현의 상태로 정의 될 수 있습니다. 첫 번째 시도는 분명히 순환 적이지만 아마도 도움이 될 것입니다. '객체의 내부 상태는 구성원의 상태입니다.' 여기서 우리는 표현의 중요한 측면을 중요하지 않은 것들과 구별하기 위해주의를 기울일 필요가 있습니다. 상태의 변화로. 반면, 성능 테스트를 고려할 때 쿼리 결과에 대한 캐시 상태의 변경은 기능 상태 (위에서 설명한대로)에 영향을 미치지 않지만 중요합니다.