2009-12-02 3 views
2

OOP에서 올바른 개체를 선택하기 위해 어떤 기술을 사용해야합니까? 걱정이됩니다.OOP - 가능한 개체 후보를 선택하는 방법?

개체를 선택하는 방법에 관해서 반드시 읽어야 할 책이 ​​있습니까?

최저

+0

어떤 언어로 말하고 있습니까? – yoda

+2

누가 신경 써? 디자인은 언어에 구애받지 않습니다. :-) – CesarGon

+3

전체 답변으로 확장 할 시간이 없지만 "낯선 문제 영역에서 특히 어렵고 경험과 맛이 필요합니다."개인적으로는 실제로 도움이되는 방법론을 찾지 못했습니다. " : - \ –

답변

2

당신은 아마 오히려 "올바른 객체"보다 "올바른 클래스"를 의미한다. :-)

텍스트 분석 (명사에 밑줄을 긋는 것)과 Class Responsibility Collaborator (CRC)과 같은 몇 가지 기술이 있습니다.

"명사에 밑줄을 긋는"것은 기본적으로 문제를 해결하고 명사에 밑줄을 그어주는 자연어 (즉, 일반 영어) 설명으로 시작합니다. 그러면 후보 수업 목록이 나옵니다. 구현할 클래스 목록으로 수정하려면 여러 단계를 수행해야합니다.

CRC의 경우, check out the Wikipedia.

전체 참조 용으로 The OPEN Toolbox of Techniques을 제안합니다.

희망이 있습니다.

+0

예, 올바른 클래스를 의미합니다. – demian

+0

예. :-)이 기법들을 살펴보고 가능하다면 그 책을 읽으십시오. – CesarGon

0

저는 sctruct, type, class, set, state, 알파벳, 스칼라 및 벡터와 관계에 대한 이해가 있다고 가정합니다.

개체는이고, 메서드는 동사입니다. 개체 멤버는 필드 당 ID, 상태 또는 스칼라 값을 나타낼 수 있습니다. 객체 간의 관계는 일반적으로 참조로 표현되며, 참조는 객체의 멤버입니다. 경우에 따라 관계가 복잡하고 다 방향으로 2보다 크고 그룹화 또는 포함의 일종을 나타낼 때 관계는 객체로 표현 될 수 있습니다.

더 넓은 기술적 이유 때문에 객체가 OOP 언어의 정보를 표현할 수있는 유일한 방법 일 가능성이 큽니다.

+0

네,하지만 일반적인 예를 들어 보겠습니다. shoppingCart 클래스를 만드는 대신 고객 클래스에 add_items, check_out을 추가 할 수있는 쇼핑 카트가 어디 있습니까? .. – demian

+2

예, 고객이 수업을 진행합니다. 질문 : ShoppingCart에서는 1-1 (정확히 1 대 정확히 1)입니까? 라이프 사이클 테스트를 할 수 있습니다. 고객 정보는 쇼핑 방문보다 오래 거주합니다. 예를 들어 디자인에서 "예, 다음 번 쇼핑 방문을 위해 데이터베이스에 보관합니다"라고 말합니다. Ok, 또 다른 라이프 사이클 테스트. 장바구니에는 항상 고객이 하나뿐입니다. 예를 들어 "아니요, 익명 방문자가 자신을 식별하지 못했을 때 고객이 아닌 익명 처리 된 스텁이 있습니다"라고 대답합니다. 그런 다음 그것의 별도의 클래스. –

+0

위대한 답변 RocketSurgeon .. 그게 많이 도움이, 감사합니다! – demian

4

그냥 못생긴 경우에도, 일을 얻는다 무언가를 쓰기 후 지속적으로 리팩토링 :

그러나 :

를 작성하지 않습니다. 계속 연습 해.

P.

코드 객체는 실제 실제 객체와 관련된 이 아니라이 아닙니다. 그들은 단지 관련 정보를 함께 보관하는 구조입니다.

자바 책/학교가 객체에 대해 가르치는 것을 믿지 마십시오. 그들은 거짓말하고있어.

+1

+1 위대한 답변, 더 짧으면 더 좋을 것입니다. :) 좋은 객체 지향 디자인은 사람들이 쉽게 사용할 수있는 감미롭고 간단한 API를 제공하면서 5 개의 글 머리 기호 (특히 응집력과 커플 링에 대해)를 치는 데 중점을 둡니다. * 동사에 명사와 방법을 일치시키는 클래스가 아닙니다. –

+0

감사! 나는 그것을 조금 줄이려고 노력할 것이다. 달콤한 API를 제공하는 것은 그 자체로 예술의 전 분야입니다. 어떤 프로그래머라도 DOM과 같은 API를 만들 수 있지만 jQuery와 같은 API를 얼마나 많은 사람들이 생각해 낼 수 있습니까? – hasen

0

Eric Evans가 Domain-Driven Design을 확인해야합니다. 모델의 개체, 도메인의 기능 및 함께 작동하도록 구성 할 수있는 방법에 대해 매우 유용한 개념을 제공합니다. 그것은 요리 책이 아니다, 그리고 아마 초보자 책 - 그러나, 나는 내 인생의 다른 단계에서 그것을 읽고, 나는 거기에 가치있는 무언가를 발견 할 때마다 ...
alt text http://www.domaindrivendesign.org/sites/default/files/images/cover_small.jpg

0

내가 두 번째 대답을 추가하고 때문에 데미안의 의견에 :

때로는 클래스가이 유형이기 때문에 그리 명확하지만, 다른 시간 그것은 DB 커넥터와 같은 추상적 인 에의 객체의 개념.

사실입니다. 필자가 선호하는 방법은 시스템의 동작 분석 (예 : 사용 사례 사용)을 수행 한 다음 시스템 작업을 유도하는 것입니다. 안정적인 시스템 작업 목록 (예 : 워드 프로세서의 경우 PrintDocument, SaveDocument, SpellCheck, MergeMail 등)이 있으면 각 클래스를 클래스에 할당해야합니다. 앞서 언급 한 기술 중 일부를 사용하여 후보 클래스 목록을 작성한 경우 일부 작업을 할당 할 수 있습니다. 그러나 일부는 할당되지 않은 상태로 남을 것입니다. 이것들은보다 추상적이거나 직관력이없는 수업의 필요성을 나타낼 것입니다.

전체 방법은 백서 www.openmetis.com에 설명되어 있습니다.

관련 문제