OOP에서 객체의 상태 정의


11

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

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

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

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

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


나는 여기에 모호함의 여지가 있다고 생각하므로, 당신은 논문에서 _you _가 'state'가 무엇을 의미하는지 정확히 언급해야합니다. 그렇게 할 수 없다면, 아마도 당신은 당신의 종이를 놓을 위치에 있지 않았을 것입니다.
PJTraill

답변:


9

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

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

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

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

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

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


4
평소와 같이 퍼지. 부스가 말한 의미 : 상태는 해당 변수에 값을 할당하는 것입니다.
reinierpost

3

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


2

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

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

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

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

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


이것은 내가 찾은 객체 상태에 대한 가장 유용한 답변 중 하나입니다. 온라인으로 하나의 PDF 문서가 있으며 대부분 문서입니다. 특히 표현 (내부 상태)에 관한 부분. 눈을 뜨고 대상에 대해 다르게 생각하게 만듭니다.
Miroslav Trninic

1

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

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

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

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

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

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

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

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

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

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

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


모호성의 가능성이 다른 답변보다 명확 해지기 때문에 몇 표의 가치가 있습니다.
PJTraill

나의 이전의 의견을 다시 : 나는 모호성을 더 격렬하게 설명하기 위해 나 자신의 대답을 추가 했다 .
PJTraill

0

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


이것은 사실이지만 기존 답변에 많은 것을 추가하는 것으로 간주되지는 않습니다.
David Richerby 2014

1
어쩌면 그것은 수 있습니다 쉽게 : 사람을 이해하는
에드 MEHRAN 후세인

2
이것은 잘못이다. 내 말은, 상태는 그 변수에 값을 할당하는 것입니다.
reinierpost
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.