정의 : 하나의 객체는 다른 객체에 대한 최소한의 이해를 유지해야합니다.
문제의 기원 : 클래스 간의 관계가 점점 가까워지고 있으며 커플 링이 점점 커지고 있습니다. 한 수업이 바뀌면 다른 클래스에 미치는 영향이 커집니다.
솔루션 : 클래스 간의 커플 링을 최대한 최소화하십시오.
우리는 프로그래밍과 접촉 한 이후 소프트웨어 설계, 낮은 커플 링 및 높은 응집력의 일반적인 원칙을 알고있었습니다. 객체 지향적이든 프로세스 지향적이든, 코드의 재사용 속도를 개선하기 위해 커플 링 정도가 가능한 한 낮아야합니다. 그러나 낮은 커플 링을 프로그래밍하는 방법은 무엇입니까?
논리가 아무리 복잡하더라도 종속 클래스의 경우 클래스 내에서 논리를 캡슐화하고 제공된 공개 방법을 제외하고 외부에 정보를 공개하지 마십시오. 더 간단한 정의도 있습니다. 직접 친구 와만 의사 소통합니다. 먼저, 직접적인 친구가 무엇인지 설명해 봅시다. 각 객체는 다른 객체와 결합됩니다. 이 두 객체 사이에 커플 링 관계가 있다고 가정 해 봅시다. 이 두 개체에는 친구 관계가 있다고 가정 해 봅시다. 종속성, 연관성, 구성, 집계 등과 같은 커플 링이 발생하는 방법에는 여러 가지가 있습니다. 그 중에서도 우리는 직접 친구라는 직접 친구라는 멤버 변수, 메소드 매개 변수 및 메소드 리턴 값을 나타내는 클래스를 호출하는 반면, 로컬 변수에 나타나는 클래스는 직접 친구가 아닙니다. 즉, 클래스 내부에 로컬 변수로 나타나지 않는 것이 가장 좋습니다.
예를 들어, 학교에는 여러 교사가 있습니다. 한 번에 번호가 매겨진 아래에 여러 학생이 있습니다. 이제 모든 교사와 학생의 ID를 인쇄하도록 요청하십시오.
먼저, 저 커플 링 및 고정 응집력의 원리를 위반하십시오.
코드는 다음과 같습니다.
패키지 test1; import java.util.arraylist; import java.util.list; 클래스 교사 {privatestring id; publicvoidsetid (string id) {this.id = id;} publicstring getId ()} 클래스 학생 {private String id; public void setid (string id)}}}}}}}}} Studentmanage {publiclist <guldent> getAllStudent () {list <tudent> list = newArrayList <tudent> (); for (int i = 0; i <100; i ++) {in student = new student (); Student.SetId ( "학생 번호는"+i); list.add (학생);} classermanage <}} classe -}} classermmanage <}}} {list <peclib> list = newArrayList <prection> (); for (inti = 0; i <100; i ++) {교사 교사 = New Teacher (); 교사 .SetId ( "교사 번호"+i); list.add (교사);} public void printAllperson (StudentManagestUdentManager) {Student> list1 =); {system.out.println (s.getId ());} list <prection> list2 = this.getallTeacher (); for (교사 t : list2) {system.out.println (t.getId ());}}} public classclient {publicstaticvoidmain (string [] args) {teachermanagetm = newTeacherManage (); tm.printallperson (new Studentmanage ());}} 이 디자인의 주요 문제는 이제 Teachermanage 수업에 나타납니다. 낮은 커플 링 및 높은 응집법에 따르면 직접 친구와 만 의사 소통합니다. 학생 수업은 Teachermanage 수업에서 직접 친구가 아닙니다. 이러한 비 지향적 인 친구 관계 커플 링은 수업에서 피해야합니다.
수정 후 코드는 다음과 같습니다.
패키지 test2; import java.util.arraylist; import java.util.list; 클래스 교사 {privatestring id; publicvoidsetid (string id) {this.id = id;} publicstring getId ()} 클래스 학생 {private String id; public void setid (string id)}}}}}}}} Studentmanage {publiclist <guldent> getAllStudent () {list <tudent> list = newArrayList <noygry (); for (int i = 0; i <100; i ++) {elour student = new student (); Student.SetId ( "학생 번호는"+i); list.add (학생);} 공개 void printDudent () {list <toding> list1 = this.getAllStudent (); for (학생 s : list1) {system.out.println (s.getId ());}} 클래스 교사 관리자 {publiclist <prection> getAllTeacher () {list> list = newArrayList <Prection> (); 교사 (); 교사 .SetId ( "교사 번호"+i); list.add (el {teachermanagetm = newTeacherManage (); tm.printallteacher (); Studentmanagesm = newstudentManage (); sm.printallstudent ();}}수정 후, 학생은 새로운 학생 ID 방법을 추가했으며 교사는 직접 전화 할 수 있습니다. 이것은 학생들과의 결합을 피합니다. 낮은 커플 링 및 높은 응집력의 원리의 원래 의도는 클래스 간의 결합을 줄이는 것입니다. 각 클래스는 불필요한 종속성을 줄이기 때문에 실제로 커플 링 관계를 줄일 수 있습니다. 그러나 모든 것은 어느 정도입니다. 간접 클래스와의 의사 소통을 피할 수 있지만 의사 소통을 위해서는 "중개자"를 통해 관계가 불가피하게 발생합니다. 이 규칙을 사용하면 명확한 구조, 높은 응집력 및 낮은 커플 링을 얻을 수 있습니다.
커플 링 및 응집력은 모듈 독립성에 대한 두 가지 질적 표준입니다. 소프트웨어 시스템을 모듈로 나누면 모듈의 독립성을 향상시키기 위해 가능한 한 높은 응집력과 낮은 커플 링을 달성하고 고품질 소프트웨어 구조를 설계하기위한 토대를 마련하십시오.
이해하기 쉬운 예가 있습니다. 프로그램에는 50 개의 기능이 있으며이 프로그램은 매우 잘 실행됩니다. 그러나 함수 중 하나를 수정하면 다른 49 개의 함수를 수정해야하므로 높은 커플 링의 결과입니다.
요약
위는이 기사의 모든 내용입니다. 높은 응집력 및 저 커플 링 법의 예제 코드 분석에 대한 코드 분석입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!