이 포럼에는 커플 링과 응집력의 예가 들어있는 좋은 예제가 많이 있지만, 필자는이를 코드에 완전히 적용하는 데 어려움을 겪고 있습니다. 코드에서 변경해야하는 부분을 식별 할 수 있습니다. 어떤 Java 전문가라도 내 코드를 살펴보고 어떤면이 좋고 나쁘다고 설명 할 수 있습니까? 나는 그것을 전혀 바꾸지 않아도된다. 그것은 ... 많은 사람들이 서로 동의하는 것 그리고 내가 열심히 실제로 원칙에 따라 무엇을 이해하기 위해 찾는거야 그냥Coupling/Cohesion
답변
나는 앨런의와 제임스의 책 Design Patterns explained -- A new perspective on object-oriented design (ISBN-13을 추천 할 수 있습니다 : 978-0321247148) :
그것은 좋은 책에 대한 가-A의 및 입니다 - 객체 지향 설계의 응집 및 커플 링을 포함 decissions.
고마워, 앞으로의 개발을 위해 그것을 얻을 것이다. 다음주에 시험 준비를위한 앱을 개발 중입니다. 지금은 시간이 없습니다. 그러나 추천에 감사드립니다. – user559142
먼저, 저는 다양한 답변을 얻는 주된 이유는 이것이 실제로 시간이 지남에 예술이된다는 것입니다. 당신이 얻는 의견 중 많은 부분이 딱딱한 빠른 규칙이나 사실로 끓어 오르는 것이 아니라 일반적인 경험에 이르게됩니다. 이렇게하는 10-20 년 후에, 당신은 고통을 일으키는 원인이 된 무슨 일을 기억하고, 당신이 그 (것)들을 다시하는 것을 피한 방법. 많은 답이 몇 가지 문제에 대해 작용하지만, 의견을 결정하는 것은 개인의 경험입니다.
코드에서 실제로 변경할 수있는 것은 1 가지만 있습니다. 커맨드 패턴 (Command Pattern)이라고 불리는 것에 대해 살펴볼 것입니다. 이 정보는 웹이나 GoF 책에서 찾기가 어렵지 않아야합니다.
기본 아이디어는 "add child", "add parent"가 각각 별도의 클래스가된다는 것입니다. 단일 명령에 대한 논리는 테스트하고 수정할 수있는 단일 작은 클래스로 묶여 있습니다. 그런 다음 해당 클래스는 기본 클래스에서 작업을 수행하기 위해 "실행"되어야합니다. 이런 식으로, 당신의 메인 클래스는 커맨드 라인 파싱 만 다루어야하고, 그것의 대부분은 패밀리 트리에 대한 지식을 잃을 수 있습니다. 커맨드 라인이 어떤 커맨드 클래스에 맵핑되어 있는지 알아야만합니다.
그건 내 2 센트입니다. 한마디로
답장을 보내 주셔서 감사합니다 ... GoF 서적은 무엇입니까? – user559142
@ user559142 - 죄송합니다. 저작자 때문에 Gang of Four라는 책이 있지만 실제 제목은 "디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소"입니다. 대부분의 소프트웨어 엔지니어가 도서관에서 가지고있는 책 중 하나입니다. 당신이 지키는 것 중 하나. – rfeak
아, 감사합니다. 나는 그것을 조사해야 할 것이다. 나머지 코드는 괜찮아 보입니까? – user559142
: 실제 생활에서와 같은 소프트웨어 공학
응집력, 전체 구성 요소들이 실제로 함께 속해 있다고 할 수있다 (우리의 경우는의 클래스가 가정 해 봅시다) 정도이다. 따라서 이것은 소프트웨어 모듈의 소스 코드에 의해 표현 된 기능의 각 부분이 얼마나 강하게 관련되어 있는지를 나타내는 척도입니다.
OO 측면에서 응집력을 조사하는 한 가지 방법은 클래스의 메소드가 개인 속성 중 하나를 사용하는지 여부입니다.
이제는 논의가 이보다 더 크지 만 높은 결합력 (또는 응집도가 가장 좋은 유형 - 기능적 응집력)은 모두 모듈의 단일 정의 된 작업에 기여하기 때문에 모듈의 일부가 그룹화되는 경우입니다.
단순한 단어의 결합은 한 구성 요소가 다른 구성 요소의 내부 동작 또는 내부 요소, 즉 다른 구성 요소에 대한 지식의 양을 얼마나 잘 알고 있는지를 나타냅니다.
I wrote a blog post about this. :
느슨한 결합은 이러한 구성 요소 것을 실질적 가능한 최소 범위로 서로에 의존 할 수 있도록하는 시스템 또는 네트워크 구성 요소를 상호 접속하는 방법 ... 긴에서
인 이 모든 것을 예제 등으로 자세하게 다룹니다. 또한 이러한 원칙을 따라야하는 이유에 대한 이점을 설명합니다. 나는 그것이 도움이 될 수 있다고 생각합니다 ...
커플 링은 시스템의 다른 구성 요소에 의존하는 정도를 정의합니다. 두 개의 컴포넌트 A와 B가 주어지면, A가 변경되면 B에서 얼마나 많은 코드가 변경되어야합니다. 응집력은 단일 소프트웨어 구성 요소의 다양한 기능이 얼마나 일관성이 있는지 또는 강력하게 관련되어 있는지를 정의합니다. 이는 클래스의 기능을 나타냅니다. 결합력이 낮 으면 클래스가 매우 다양한 작업을 수행하고 수행해야 할 작업에 초점을 맞추지 못하게됩니다. 따라서 응집력이 높다는 것은 수업이해야 할 일, 즉 수업의 의도와 관련된 방법에만 초점을 맞추고 있음을 의미합니다. 참고 : 좋은 API는 느슨한 커플 링 및 높은 응집력을 나타냅니다. 특히 빡빡한 커플 링의 한 가지 혐오스러운 형태는 항상 피해야 만하는데, 이는 직접 또는 간접적으로 의존하는 두 가지 구성 요소, 즉 의존성주기 또는 순환 종속성을가집니다. 아래 링크의 상세 정보 http://softwarematerial.blogspot.sg/2015/12/coupling-and-cohesion.html
코드를 게시하고 도움이 필요한 곳에서 구체적으로 작성하십시오 –
전자 메일로 보내주십시오. – user559142
개인적으로 전자 메일은이 포럼의 목적에 어긋납니다. 게시 된 답변은 질문의 묻는 사람뿐만 아니라 다른 사람들에게도 도움이됩니다. – Raedwald