아니요 , 개체는 개체를 나타내지 않아도됩니다.
사실, 나는 당신이 물체를 물리적 실체로 생각하는 것을 멈 추면 OOP가 약속 한 이익을 마침내 얻을 때라고 주장합니다.
이것이 가장 좋은 예는 아니지만 커피 메이커 디자인 은 아마도 조명이 켜지 기 시작했을 것입니다.
객체는 메시지에 관한 것입니다. 그들은 책임에 관한 것입니다. 자동차, 사용자 또는 주문에 관한 것이 아닙니다.
나는 우리가 OO를 이런 식으로 가르치는 것을 알고 있지만, MVC, MVVM 또는 MV를 수행하려고 할 때 일이 어디로 가야하는지 알아내는 것이 몇 번의 시도를 거친 후에 명백해집니다. 모델이 말도 안되게 부풀어 오르거나 컨트롤러가 부풀어 오릅니다. 탐색을 위해 Vehicles에 닿는 모든 것이 Vehicle.ext 파일에 있지만 응용 프로그램이 Vehicles에 관한 경우 필연적으로 해당 파일에 3000 줄의 스파게티가 생깁니다.
보낼 새 메시지가 있으면 새 개체가 적어도 하나 이상있을 수 있습니다. 따라서 일련의 메소드에 대한 귀하의 질문에서, 귀하는 메시지 묶음에 대해 잠재적으로 이야기하고 있다고 주장합니다. 그리고 각자 자신의 일이 될 수있는 고유 한 대상이 될 수 있습니다. 그리고 괜찮습니다. 당신이 정말로 정말로 함께해야 할 것들을 나누면 분명해질 것입니다. 그리고 당신은 그것들을 함께 넣습니다. 그러나 OO를 즐기고 싶다면 편의를 위해 모호한 서랍에 모든 방법을 즉시 버리지는 않습니다.
기능 가방에 대해 이야기합시다
객체는 단지 메소드의 모음 일 수 있으며 여전히 OO 일 수 있지만 내 "규칙"은 매우 엄격합니다.
컬렉션에는 단일 책임이 있어야하며 그 책임은 "모터에 물건을 싣는 것"만큼 일반적 일 수 없습니다. 서비스 계층 파사드와 같은 일을 할 수도 있지만 OO 코드를 작성하려고하지 않기 때문에 탐색 / 발견 이유로 게으르다는 것을 심각하게 알고 있습니다.
모든 방법은 일관된 추상화 계층에 있어야합니다. 한 메소드가 Motor 오브젝트를 검색하고 다른 메소드가 Horsepower를 리턴하는 경우, 아마도 너무 멀리 떨어져있을 것입니다.
객체는 동일한 "종류"의 데이터에서 작동해야합니다. 이 객체는 모터에 작동 (시작 / 중지), 크랭크 길이의 작업, 점화 시퀀싱 처리, HTML 형식을 취합니다. 이 데이터는 아마도 객체의 필드 일 수 있으며 응집력이있는 것처럼 보입니다.
나는 일반적으로 변형, 구성을 수행하거나 변경 가능성에 대해 걱정하고 싶지 않을 때 이런 종류의 객체를 만듭니다.
나는 객체 책임에 초점을 맞추면 응집력을 얻게된다. 객체가되기 위해서는 약간의 응집력이 있어야하지만, 객체가되기 위해 어떤 필드 나 많은 행동이 필요하지는 않습니다. 5 가지 모터 방법을 필요로하는 시스템을 구축하고 있다면, 그 일을하는 5 가지 다른 물체로 시작할 것입니다. 공통점을 발견하면 함께 병합하거나 일반적인 "도우미"개체를 사용하기 시작합니다. 그것은 열린 / 닫힌 관심사로 나를 움직입니다.이 비트의 기능을 어떻게 추출하여 특정 파일을 다시 수정할 필요가 없지만 필요한 곳에서 계속 사용할 수 있습니까?
객체는 메시지에 관한 것입니다
필드는 거의 객체에 중요하지 않습니다. 레지스터를 가져오고 설정해도 프로그램 외부의 세계는 바뀌지 않습니다. 다른 개체와 공동 작업하면 작업이 완료됩니다. 그러나 OO의 강점은 추상화를 생성하여 모든 개별 세부 사항을 한 번에 생각할 필요가 없다는 것입니다. 누출되거나 이해가되지 않는 추상화는 문제가 있으므로, 우리는 우리의 정신 모델과 일치하는 객체를 만드는 것에 대해 깊이 생각합니다.
주요 질문 :이 두 물체가 서로 대화해야하는 이유는 무엇입니까?
개체를 사람의 장기로 생각하십시오-기본 목적을 가지고 있으며 관심있는 특정 메시지를받을 때만 동작이 변경됩니다.
횡단 보도에 있고 자동차가 빨리오고있는 시나리오를 상상해보십시오. 뇌의 대상으로 스트레스 요인을 감지합니다. 시상 하부에 코르티코 트로 핀 방출 호르몬을 보내라고 지시합니다. 뇌하수체는 그 메시지를 받고 부 신피질 호르몬을 분비합니다. 부신은 그 메시지를 받고 아드레날린을 만듭니다. 근육이 그 아드레날린 메시지를 받으면 수축합니다. 심장이 같은 메시지를 받으면 더 빨리칩니다. 길 건너편의 단거리 달리기의 복잡한 행동을 시작하는 데 관련된 모든 플레이어 체인이 있으며 중요한 메시지입니다. 뇌 개체는 시상 하부가 경고를 보내도록하는 방법을 알고 있지만 결국에는 동작이 일어날 개체 체인을 모릅니다. 마찬가지로, 심장은 아드레날린이 어디에서 오는지 모릅니다.
따라서이 단순화 된 예에서 부신 개체는 ACTH를 복용하고 아드레날린을 만드는 방법 만 알면됩니다. 이를 수행하기 위해 필드가 필요하지는 않지만 여전히 나에게 객체처럼 보입니다.
이제 우리의 응용 프로그램이 길 건너 스프린트 전용으로 설계된 경우, 뇌하수체와 부신이 필요하지 않을 수 있습니다. 또는 개념적으로 "뇌하수체 모델"로 볼 수있는 것의 작은 부분만을 수행하는 뇌하수체 개체 만 필요합니다. 이러한 개념은 모두 개념적 개체로 존재하지만 소프트웨어이므로 AdrenalineSender 또는 MuscleContractor 등을 만들 수 있으며 모델의 "불완전 성"에 대해 크게 걱정하지 않아도됩니다.