나는 스몰 토크의 초기 역사를 읽었 으며 그 의미에 대한 나의 이해에 의문을 갖게하는 "할당"에 대한 몇 가지 언급이있다.
OOP는 많은 동기에서 비롯되었지만 두 가지가 중심이었습니다. 대규모는 세부 사항 숨기기와 관련된 복잡한 시스템을위한 더 나은 모듈 체계를 찾고 소규모는보다 유연한 할당 버전을 찾은 다음이를 완전히 제거하려고했습니다.
( 1960-66 년 ~ 60 년대 초반의 OOP 및 기타 형성 아이디어 , 섹션 I)
내가 Simula에서 얻은 것은 이제 바인딩과 과제를 목표로 바꿀 수 있다는 것 입니다. 프로그래머가 마지막으로 원했던 것은 비 유적으로 제시 되어도 내부 상태를 망쳐 놓는 것입니다. 대신, 객체는 동적 구성 요소로 사용하기에 더 적합한 상위 수준의 동작 사이트 로 제공되어야합니다 . (...) 오늘날 "개체 지향 프로그래밍 (object-oriented programming)"이라고 불리는 것의 상당수가 단순히 더 멋진 구조를 가진 구식 프로그래밍이라는 것은 불행한 일입니다. 많은 프로그램이 이제 더 비싼 첨부 프로 시저에 의해 수행되는 "할당 스타일"작업으로로드됩니다.
( "객체 지향"스타일 , 섹션 IV에서)
객체가 façades이고 객체에 인스턴스 변수를 설정하는 (즉, "assignment") 목적을 가진 메소드 (또는 "메시지")가 목적을 무력화하려는 의도로 해석하는 것이 맞습니까? 이 해석은 IV 절의 두 가지 후반 진술에 의해 뒷받침되는 것으로 보인다.
지속성 상태, 다형성, 인스턴스화 및 객체에 대한 목표와 같은 방법으로 함께 사용되는 네 가지 기술이 많은 힘을 설명합니다. 이 중 어느 것도 "개체 지향 언어"를 사용하지 않아도됩니다. ALGOL 68은 거의이 스타일로 바꿀 수 있습니다. OOPL은 디자이너의 마음을 특정 방향으로 집중시킵니다. 그러나 캡슐화 권한을 수행하는 것은 상태의 추상화뿐만 아니라 프로그래밍에서 상태 지향적 은유를 제거하기위한 약속입니다.
...과:
과제 진술 (추상적 인 진술조차도)은 매우 낮은 수준의 목표를 표현하며, 그 중 더 많은 것이 목표 달성을 위해 필요합니다. 일반적으로, 우리는 프로그래머가 시뮬레이션 여부에 상관없이 상태를 망칠 것을 원하지 않습니다.
불투명하고 불변 인 인스턴스가 여기에서 권장되고 있다고 말할 수 있습니까? 아니면 낙담 한 직접적인 상태 변화입니까? 나는이있는 경우 예를 들어, BankAccount
클래스를, 그것의 확인을해야합니다 GetBalance
, Deposit
그리고 Withdraw
인스턴스 메소드 / 메시지; SetBalance
인스턴스 메소드 / 메시지 가 없는지 확인하십시오 .