OOP에서 객체의 상태 정의 프로그래밍에 대한

객체 지향 프로그래밍 (용지의 경우)에서 “객체의 상태”에 대한 간결한 정의가 필요합니다.

반나절 동안이 주제에 관해 인용 할 수있는 논문을 검색했지만 찾지 못했습니다. 내가 찾은 모든 논문은 주로 객체 지향 프로그래밍에 대한 일반적인 논문이며 객체의 상태를 정의하지 않았습니다.

확실하지 않지만 최선의 추측은 다음과 같습니다
. 객체의 상태는 객체의 인스턴스 변수 상태에 의해 정의됩니다.

객체 상태의 정의 및 / 또는 주제에 대한 참조를 찾고 있습니다.

(btw, 개념을 “객체 상태”라고 할 수 있습니까? 아니면 드문 일입니까?)



답변

G. Booch의 “Object-Oriented Analysis and Design” 책을 살펴 보거나 인용 할 수 있습니다 .

… 객체는 상태, 동작 및 정체성을 가진 엔티티입니다. 유사한 객체의 구조와 동작은 공통 클래스로 정의됩니다. 인스턴스와 객체라는 용어는 서로 바꿔 사용할 수 있습니다.

다음 섹션에서 상태, 행동 및 정체성의 개념을 더 자세히 고려할 것입니다. …

그리고 상태 의 개념을 설명하는 전체 하위 섹션이 있습니다 .

…이 예에서 다음과 같은 저수준 정의를 구성 할 수 있습니다.

객체의 상태는 객체의 모든 (일반적으로 정적) 속성과 각 속성의 현재 (일반적으로 동적) 값을 포함합니다 …


답변

또한 객체의 상태는 메소드가 관찰 할 수있는 것에 의해 결정되는 “추상적 인”엔티티라는 점을 명심해야합니다. 예를 들어, 해시 테이블을 구현하는 객체는 모든 내부 표현 세부 정보가 아니라 해시 테이블에 저장된 값 모음을 상태로합니다 .


답변

상태 ‘ 라는 용어 는 다양한 의미로 사용될 수 있으며, 심지어 모든 것이 정확한 정의에 영향을받지 않을 수도있다. 당신이 방법을 아주 명확하게하기 위해 종이의 정의를 포함하는 것이 중요했다 당신이 용어를 사용했다. 다음에서 나는 객체의 상태에 대한 고유 한 정의를 제공하지 않고 다른 맥락에서 적절할 수있는 여러 가지 사고 방식을 스케치하려고 시도합니다.

그러나 먼저 ‘ 객체 ‘가 의미하는 바를 생각해야합니다 . 개념적 객체, 즉 모델링하려는 일부 엔티티 또는 특정 프로그램의 클래스 인스턴스에 대해 생각하고 있습니까? 다른 시간에 다른 객체 또는 시스템을 참조 할 수있는 변수의 상태에 대해 생각하고 싶을 수도 있습니다. 어쩌면 특정 사용자 인터페이스를 통해 액세스 할 수 있습니다.

OOP에서 객체의 상태를 정의하는 데 어려움의 일부는 특정 언어로 엔티티를 모델링 할 때 해당 언어로 인해 동일한 엔티티의 일부인 오브젝트 속성을 다른 엔티티와 구별 할 수없는 경우가 종종 있습니다. 예를 들면, 링크 된리스트 Car들로 구성한다 Link포인터를 포함 -objects 다음 (아마도 이전) Link개념적 비록 목록은 하나의 목적은; 링크도 포함 할 수 있습니다Car-객체 또는 그들에 대한 포인터를 포함하지만이 경우 연결된 객체는 목록의 일부가 아닌 개념적으로 분리됩니다. 그러나 최근 변경 사항 목록에서 변경 사항은 목록에만 나타나고 그 일부로 간주 될 수 있습니다. 이러한 다양한 경우에 우리는 하나의 객체의 상태가 링크 된 객체의 상태를 포함하는지 고려할 것인지 결정해야합니다. 또한,에 Car대한 링크가있을 수 있습니다. Registering_Authority등록 기관이 웹 사이트의 URL을 변경할 때 자동차의 상태가 변경되는 것으로 간주하지 않을 수 있습니다. 구현 언어로 인해 서로 다른 유형의 링크를 구별 할 수 없으면 언어만으로 객체의 상태를 일반적으로 정의 할 수 없습니다.

외부 ‘또는 ‘ 기능적상태 는 ‘동작 방식’으로 정의 될 수 있습니다. 메소드 호출 또는 사용자 인터페이스에 대한 반응 클래스 인스턴스 인 객체의 경우이 정의는 객체가 속한 것으로 보이는 유형에 따라 다릅니다 Circle.Coloured_Circle표시되지 않으므로 상태와 관련이 없습니다. 이것의 어려움은 반환되는 값의 관점에서 ‘반응하는 방식’이 정의 될 필요가있을 수 있으며, 이러한 ‘값’은 다른 객체의 상태 일 수 있다는 것입니다. 이를 공식화하는 한 가지 방법은 오브젝트가 임베드 된 일부 시스템의 모든 향후 실행으로 인해 입력에서 해당 시스템으로의 출력과 동일한 맵핑이 발생하는 경우 오브젝트의 두 상태가 동일하다는 것입니다. 이 엔 클로징 시스템은 환경에 관계없이 실행 가능한 자체 포함 시스템이어야합니다. 반면에, 문제의 대상 자체만큼 작게 만들 수 있습니다. 어쨌든 수학적 접근법은 상태를 등가 클래스로 정의하는 것입니다.

내부상태 는 표현의 상태로 정의 될 수 있습니다. 첫 번째 시도는 분명히 순환 적이지만 아마도 도움이 될 것입니다. ‘객체의 내부 상태는 구성원의 상태입니다.’ 여기서 우리는 표현의 중요한 측면을 중요하지 않은 것들과 구별하기 위해주의를 기울일 필요가 있습니다. 상태의 변화로. 반면, 성능 테스트를 고려할 때 쿼리 결과에 대한 캐시 상태의 변경은 기능 상태 (위에서 설명한대로)에 영향을 미치지 않지만 중요합니다.


답변

IBM에는 서로 매우 유사한 여러 가지 다른 정의에서 “상태”라는 단어를 정의 하는 용어집 이 있습니다. 구체적으로 객체 지향 프로그래밍과 관련이 있다고 말하지는 않지만 해당 컨텍스트에서 외삽하고 사용할 수 있습니다.

정의 3 : 객체의 수명주기에서 해당 객체의 상태를 식별하는 단계.

정의 5 : 물체의 수명 동안 어떤 조건을 만족 시키거나, 어떤 활동을 수행하거나, 어떤 사건을 기다리는 조건 또는 상황.

정의 8 : 공개 및 비공개 데이터 멤버에 표시되는 객체의 특성으로, 필수 상태 및 비 필수 상태의 두 가지 범주로 나눌 수 있습니다.

정의 9 : 비즈니스 상태 머신에서 비즈니스 트랜잭션을 구성하기 위해 순서대로 구성된 여러 개별 개별 단계 중 하나입니다.

Def 10 : 적절한 펄스가 적용될 때까지 회로가 유지되는 상태.

Webster의 New World College Dictionary는 ‘상태’를 다음과 같이 정의합니다.

주어진 시간에 사람이나 사물을 특징 짓는 일련의 상황 또는 속성; 방법이나 형태 : 상태

이 모든 것의 공통 분모는 시간입니다. 시간이 지남에 따라 상태가 변경됩니다. 이것이 변수의 본질입니다. 누군가가 “현재 상태는 무엇입니까?” 당신은 오늘 당신이 결혼했고 내일 당신은 독신이 될 수 있다고 말할 수 있습니다.

이러한 모든 정의를 고려할 때 ‘상태’는 속성의 값, 즉 속성 / 변수에 의해 결정되는 특정 시점에 객체가 존재하는 방식이라고 추정 할 수 있습니다.

나는 그것이 그보다 더 간단하다고 생각하지 않습니다.


답변

객체 지향 시스템은 “객체”개념을 사용하여 코드와 데이터 용어를 통합합니다. 객체에는 상태 (데이터)와 동작 (코드)이 있습니다. 따라서 객체의 상태는 데이터를 포함하는 객체 내부의 인스턴스 (변수)입니다.