구현 과 함축 의 문제입니다 . C ++ 또는 Java가 씬에 도달하기 전에 속성이 OOP에있었습니다 (시뮬 라에서 가장자리가 거칠고 스몰 토크의 기본입니다). 속성이있는 엔터티는 코드가 첨부 된 값과 개념적으로 다릅니다. 일부 언어 규칙에서 get & set 접두사는 물을 흐릿하게 만드는 역할 만합니다. 언어와 관용적 인 방식으로 필드를 가져 오거나 설정하지 않고 필드에 직접 액세스 할 수 있다고 가정하면 필드와 속성의 차이점을 알 수 있습니다.
OOP의 요점은 사물을 코드가 혼합 된 구조체가 아니라 "실제"세계의 실체로 취급하는 것입니다. 다른 프로그래머는 내가 구현 한 방식에 대해 아주 조금만 알아야합니다. 그들이 가져 오거나 설정할 수있는 다양한 값들 중 어느 것이 실제이고 어떤 값인지에 대해 전혀 염려하지 않아야합니다. 내 벡터를 가로 지르면 각도와 크기를 저장하는지 또는 벡터 객체 내부의 실제 및 가상 구성 요소를 저장할지 알 필요가 없습니다. 내 라이브러리의 V2.0에서 표현을 변경하면 코드에 전혀 영향을 미치지 않아야합니다 (멋진 새 기능을 활용하고 싶을 수도 있습니다). 마찬가지로 엔터티 외부의 데이터에 의존하는 엔터티가 가질 수있는 속성이 있습니다. 그러나 이것은 어휘 관점에서 의심의 여지가없는 속성입니다. 해당 "개체"에 대해 사용할 수있는 데이터가 생년월일 (개인 불변의 멤버) 및 오늘의 날짜라는 것을 알고 있지만 "나이를 공개 할 계산을 수행하십시오"가 아니라 "나이는 몇 살입니까?" 날짜 (표준 시간대, 일광 절약 시간 및 국제 날짜 표시 줄에 따라 자동 증가하는 공용 환경 속성). 나이는 방법이 아니라 속성입니다. 비록 거기에 도달하기 위해서는 약간의 계산이 필요하고 (인공적으로 제한된 수명을 가진 장난감 컴퓨터 표현을 제외하고) 필드로 저장할 수 없습니다. 해당 "개체"에 사용할 수있는 데이터는 생년월일 (개인 불변 구성원)과 오늘 날짜 (공개, 자동 증가 환경 재산, 시간대, 일광 절약 시간 및 국제 날짜 표시 줄에 따라 다름)임을 알고 있습니다 ). 나이는 방법이 아니라 속성입니다. 비록 거기에 도달하기 위해서는 약간의 계산이 필요하고 (인공적으로 제한된 수명을 가진 장난감 컴퓨터 표현을 제외하고) 필드로 저장할 수 없습니다. 해당 "개체"에 사용할 수있는 데이터는 생년월일 (개인 불변 구성원)과 오늘 날짜 (공개, 자동 증가 환경 재산, 시간대, 일광 절약 시간 및 국제 날짜 표시 줄에 따라 다름)임을 알고 있습니다 ). 나이는 방법이 아니라 속성입니다. 비록 거기에 도달하기 위해서는 약간의 계산이 필요하고 (인공적으로 제한된 수명을 가진 장난감 컴퓨터 표현을 제외하고) 필드로 저장할 수 없습니다.
속성을 필드와 메소드의 자식으로 생각하기보다는 메소드가 특정 유형의 속성 인 엔티티에 비해 훨씬 더 만족 스럽습니다. 그렇지 않으면 개념적으로 객체 / 엔터티를 다루지 않고 코드가 첨부 된 데이터 수집을 다루는 것입니다. implementaions는 동일 할 수 있지만, 의미는 다르다.
그러나이 추상화는 비용이 든다는 것은 말할 필요도 없습니다. 클래스를 사용하는 프로그래머가 데이터를 저장하거나 계산해야 할 값을 가져 오거나 설정할 때 데이터에 액세스하고 있는지 알 수없는 경우 언어도 확실하지 않은 수준이있을 수 있습니다 (따라서 접근 자 / 선택자와 값 사이에 중간 코드가 필요합니다). "코드가 포함 된 구조체"에는 개념적으로 잘못된 것이 없습니다. 확실히 훨씬 더 효율적일 수 있습니다. 그러나 모든 곳에서 구현이 누출되기 때문에 OOP가 제거해야하는 것 중 하나입니다.