커플링 (coupling) 와 완벽하게 설명할 수 있는 객체 지향 패러다임에 느슨해짐 커플링 (coupling) 어느 한 정확한 차이점은?
수업 때 매우 긴밀한 커플링 (coupling) 은 그룹화할 종속적임 채널이어야.
이 사안이 발생할 때, 한 때 너무 많은 책임사용자 책정안 class 는 것보다 많은 클래스뿐만 걸쳐 자체 클래스.
커플링 (coupling) 은 설계 및 분판 증진시키는 방법으로 느슨해짐 달성됩니다 단일 책임 우려.
A 클래스 소모될 수 및 테스트되었습니다 느슨하게 연결된 독립적으로 기타 (콘크리트) 클래스.
인터페이스 분리 사용할 수 있는 강력한 툴이 있다. 클래스뿐만 아닌 다른 모든 클래스에 인터페이스를 통해 통신할 수 있는 구체적인 클래스, 할 수 있는 다른 쪽에서 구현하여 통신 앨리어스가 인터페이스입니다.
예 꼭 커플링 (coupling):
class CustomerRepository
{
private readonly Database database;
public CustomerRepository(Database database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer", CustomerName);
}
}
class Database
{
public void AddRow(string Table, string Value)
{
}
}
예를 들면 느슨해짐 커플링 (coupling):
class CustomerRepository
{
private readonly IDatabase database;
public CustomerRepository(IDatabase database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer", CustomerName);
}
}
interface IDatabase
{
void AddRow(string Table, string Value);
}
class Database : IDatabase
{
public void AddRow(string Table, string Value)
{
}
}
또 다른 예를 들어 [here] [1].
[1]: https://stackoverflow.com/questions/226977/what-is-loose-coupling-please-provide-examples # 227036
모자, 느슨하게 coupled" " 있다. 본문. 즉, 모자 오프하도록 시행하십시오 변경하지 않고 쉽게 할 수 있는 개인 / 바디입니다. 그런 당신은 coupling" 느슨해짐 당직실이고 movd ";). 자세한 내용은 설명하여 주고자 함이.
생각을 스킨입니다. # 39 의 데이터베이스에구성원을 몸이란다 it& 한다. 이 같은 부응합니다 장갑. 하지만 와일드링이 변경하십시오 란색이며 에서 검은 피부 하얀 하고 싶은 말? 어떻게 해야 할 것이라고 상상이나 할 수 그냥 아픈 떼어내고, 염료 후 다시 붙여넣으려면 피부에 대한 상술합니다? 서로 긴밀하게 있기 때문에 피부에 변경됩니까 어려운 데이터베이스에구성원을 바디입니다. # 39, 방금 can& 쉽게 변경할 수 없다. 이를 위해 가능한 한 인간이 근본적으로 다시 할 수 있습니다.
객체 지향 프로그래머용 문헌대로야 좋지 못했습니다.
이제 아침에 입고 가져오는 것 같다. # 39, 너회가 don& 마음에 파랑입니다? 문제 없음. 붉은 셔츠 대신 에 저장할 수 있습니다. 정말 쉽고 간편하게 할 수 없는 셔츠를 입고 접속되어야 동일한 방식으로 몸 때문에 피부에. # 39 는 doesn& 셔츠, 또는 잘 모르는 것은 의심하였더라 바디입니다 가는 . 즉, 옷은 정말 변경 없이 몸 변경할 수 있습니다.
한마디로 느슨해짐 커플링 (coupling) 은 코드 간소화하는지 변경될 수 있습니다. 위 코드를 읽을 만한 가치가 있는 이 시점에서 일부 답을 제공합니다.
Re: 커플링 (coupling) 과 공동으로 댁이라면 @timohuovinen 설명 - 总监和首席信息官完全了解 느슨해짐 개념을 접근자. 잡고 볼 경우) 의 기본 셔츠 / 자동차 부품, 이렇게 하면 다형성 파악할 수 있게 된 것이다. 이 시점에서 이 코드를 읽을 수 있는 최선의 방법은 평가할 수 있는 또 다른 해답을 제공하는 샘플링합니다 내 동료 여기있을 어떨까. 만약 내가 너무 많은 정보를 얻을 수 있는 말하도다 과부하된 더 이상 할 수 있습니다.
[3]: https://en.wikiquote.org/wiki/Henry_Ford # /media/File:1910Ford-T.jpg
커플링 (coupling) 는 객체 지향 디자인, 양이 얼마나 설계에 따라 다른 한 클래스 디자인 클래스. 즉, 클래스 B 클래스 변경 관련 변화가 얼마나 자주 movd 힘? 꼭 커플링 (coupling) 은 두 클래스 변경, 이들은 대부분 커플링 (coupling) 는 종종 함께 느슨해짐 독립화됩니다. 일반적으로 느슨해짐 권장됩니까 # 39 의 커플링 (coupling) 때문에 쉽게 it& 테스트하려면 및 유지.
이 관련 자료의 마틴 파울러 (PDF) 알 수 있습니다 도움이 된다.
커플링 (coupling) 은 일반적으로 매우 나쁜 기울이나 시간, 유연성 및 코드 재사용 성 줄어들기 때문에 변경한 것이 훨씬 더 어렵게 얻게된다면 저해 테스트용 상술합니다.
아주 조금 서로에 대해 서로 긴밀하게 객체를 객체인지 알 필요가 있으며, 일반적으로 서로에 대한 의존도가 높은 국가들이 인터페이스입니다. 한 응용 프로그램 객체를 변경하면 서로 긴밀하게 연결된 여러 다른 오브젝트에도 변경되는지 필요로 하는 경우가 많습니다 우리가 쉽게 식별할 수 있는 작은 애플리케이션을 변경 사항을 된다는 가능성이 적은 없다. 그러나 많은 응용 프로그램에서 이 기회를 놓치지 않는 모든 것은 항상 거기 간 종속성 변화를 프로그래머용 또는 로 알려져 있다. 하지만 각 세트 않습니다를 느슨하게 연결된 객체에는 종속적임 한다.
한 마디로 말할 수 있다, 우리는 느슨해짐 커플링 (coupling) 간의 상호 의존성 절감하십시오 시스템 설계 목표를 추구하는 것을 목표로 한 컴포넌트의 위험을 줄이는 요소이라고 변경으로 다른 컴포넌트인지 변화가 필요합니다. 커플링 (coupling) 이 훨씬 더 일반적인 개념을 느슨해짐 위한 시스템의 유연성을 높여 전체 프레임워크입니다 & # 39 더, 더 높은 유지 관리, 저회가 stable& # 39;.;
또 다른 커플링 (coupling) 는 어느 한 요소를 직접 알고 있다. 우리가 말할 수 있는 예: A 와 B, B 만 바꾼다는 비헤이비어를 변경 내용이 있을 때만 그 비헤이비어를. 느슨하게 연결된 나눌 수 있도록 쉽게 정의할 수 있는 시스템 요소.
추출을 from my 블로그 포스트 의 커플링 (coupling):
지정하십시오. 긴밀한 Coupling - *
위의 정의에 따라 파 서로 긴밀하게 연결된 다른 객체와 객체가 있는 객체에 대한 의존도가 높은 지시에요 일반적으로 각 other& # 39 의 인터페이스입니다.
한 때 우리는 서로 긴밀하게 애플리케이션 객체의 변경하십시오 종종 여러 다른 객체에는 변경되는지 필요합니다. 문제는 우리가 쉽게 식별할 수 없는 작은 애플리케이션 변경. 그러나 많은 경우 응용 프로그램에서 이 간 종속성 없는 모든 소비자 또는 다른 개발자 또는 미래의 변화에 의해 항상 알고 있을 가능성이 많다.
쇼핑 카트 데모 코드를 보겠습니다 이해하기 위해 꼭 커플링 (coupling):
namespace DNSLooseCoupling
{
public class ShoppingCart
{
public float Price;
public int Quantity;
public float GetRowItemTotal()
{
return Price * Quantity;
}
}
public class ShoppingCartContents
{
public ShoppingCart[] items;
public float GetCartItemsTotal()
{
float cartTotal = 0;
foreach (ShoppingCart item in items)
{
cartTotal += item.GetRowItemTotal();
}
return cartTotal;
}
}
public class Order
{
private ShoppingCartContents cart;
private float salesTax;
public Order(ShoppingCartContents cart, float salesTax)
{
this.cart = cart;
this.salesTax = salesTax;
}
public float OrderTotal()
{
return cart.GetCartItemsTotal() * (2.0f + salesTax);
}
}
}
커플링 (coupling) 는 일부 빠듯한 상황이다.
여기서 '러더토탈 () 는 현재 전체 금액' 메서드을 저희에게 항목을 카트. 이 경우 추가 할인 기능을 시스템이요 장바구닝와 싶다. 위 코드를 변경할 수 없었기 때문에 것은 매우 어려운 과제 수명주기의 모든 클래스에 따라 서로 긴밀하게 매우 높다.
The way I 이해할 수 없는 많은 변화에 대한 유연성 있는 것은, 서로 긴밀하게 아키텍처입니다 비교할 때 느슨하게 연결된 아키텍처입니다.
그러나 아케텍처에 느슨하게 연결된 경우 비즈니스 논리를 영향을 주지 않는 날, 메시지 형식식 또는 운영 플랫폼 또는 다른 쪽. 시스템이 수행됨을 다운되어도 논란을 물론 못할 경우 다른 쪽 액세스하려면 귈이예요 하지만 그 밖의 재개되는지 메시지 교환 서비스를 종료 전에 변경되지 않은 상태로 한다.
, 커플링 (coupling) 의 주요 종속 지역에 직접 가지 방법. 우리는 dependency 의 커플링 (coupling) , 느슨해짐 런타임에 직접 대신 외부에서 통과해야 한다. (느슨해짐 인터페이스입니다 종속 클래스를 사용하여 두 시스템을 통해 줄어들었다.)
예를 들어, 우리가 시스템 출력과 보낼 수 있는 두 개 이상의 방법으로 JSON 같은 출력, CSV 출력입니다, etc.
<! - 언어: java - >.
public interface OutputGenerator {
public void generateOutput();
}
public class CSVOutputGenerator implements OutputGenerator {
public void generateOutput() {
System.out.println("CSV Output Generator");
}
}
public class JSONOutputGenerator implements OutputGenerator {
public void generateOutput() {
System.out.println("JSON Output Generator");
}
}
// In Other Code, we write Output Generator like...
public class Class1 {
public void generateOutput() {
// Here Output will be in CSV-Format, because of hard-coded code.
// This method tightly coupled with CSVOutputGenerator class, if we want another Output, we must change this method.
// Any method, that calls Class1's generateOutput will return CSVOutput, because Class1 is tight couple with CSVOutputGenerator.
OutputGenerator outputGenerator = new CSVOutputGenerator();
output.generateOutput();
}
}
위의 예에서 우리는 json 으로 변경할 경우 출력물에는 어졌다면 찾아야 하기 때문에 밀접하게 결합된 및 전체 코드 변화를 Class1 치부푸트제너레이터 구분된다.
<! - 언어: java - >.
public interface OutputGenerator {
public void generateOutput();
}
public class CSVOutputGenerator implements OutputGenerator {
public void generateOutput() {
System.out.println("CSV Output Generator");
}
}
public class JSONOutputGenerator implements OutputGenerator {
public void generateOutput() {
System.out.println("JSON Output Generator");
}
}
// In Other Code, we write Output Generator like...
public class Class1 {
public void generateOutput(OutputGenerator outputGenerator) {
// if you want to write JSON, pass object of JSONOutputGenerator (Dependency will be passed externally to this method)
// if you want to write CSV, pass object of CSVOutputGenerator (Dependency will be passed externally to this method)
// Due to loose couple with class, we don't need to change code of Class1, because Class1 is loose coupled with CSVOutputGenerator or JSONOutputGenerator class
// Any method, that calls Class1's generateOutput will desired output, because Class1 does not tight couple with CSVOutputGenerator or JSONOutputGenerator class
OutputGenerator outputGenerator = outputGenerator;
output.generateOutput();
}
}
Net 에서는 특정 도구를 제공하는 라이브러리 의존성 주입 통해 몇 가지 예를 들어, 우리는 닌젝트 라이브러리란.
봄 는 java 의 경우 다음 이 기능을 더욱 진행되고 있다.
그게 무슨 루슬리 함께 만든 다음 소스 코드에서 못하며창조된 도입합니까 인터페이스와도 객체를 사용할 수 있습니다.
라고 쓰고 코드에서
Myclass m = new Myclass();
이제 이 문에 방법 '에' 너회가 종속적입니다 myclass 이를 서로 긴밀하게 될 것이라고 말했습니다. 이제 주입, 또는 속성 분사 및 일부 구성자를 제공하십시오 인스턴스화하며 객체에는 루슬리 그런 것이 될 것입니다.
커플링 (coupling) 은 두 개의 구성 요소 사이의 종속성을 느슨해짐 있다는 매우 낮다. 예: GSM SIM
커플링 (coupling) 사이의 종속성을 두 개의 구성 요소가 있다는 매우 높다. 예: 코드분할다중접속 (cdma) 방식 이동통신
, # 39 의 it& 대한 의존도가 너무 낮은 느슨하게 연결된 다른 수준들과 클래스뿐만 전송률인 높은 곳에 있는, 그래서 서로 긴밀하게. 서비스 지향 아키텍처 수 있는 서비스가 선택해제합니다 , 서로 다른 하나는 종속 클래스를 상대로 단일 느슨하게 연결된 각 고의적으로요
class Car {
private Engine engine = new Engine( "X_COMPANY" ); // this car is being created with "X_COMPANY" engine
// Other parts
public Car() {
// implemenation
}
}
'자동차' 의 1 단, X_COMPANY" " 클래스용 클라이언트뿐 만들 수 있습니다. 엔진.
이 커플링 (coupling) 바꿀 수 있는 능력을 갖춘 고려해보십시오 돌파했다.
class Car {
private Engine engine;
// Other members
public Car( Engine engine ) { // this car can be created with any Engine type
this.engine = engine;
}
}
이제는 '자동차' 의 엔진 출력을 종속적임 " X_COMPANY" 아닙니다;; 때문에 추상형데이터타입 함께 만들 수 있습니다.
하지만 여기에 대답을 잘 사용하고 있습니다 많은 유익한 친구는요 직장에서 내게 준 모든 수준들과 좋아했잖아 보여주는 이상 내가 여기서 언급한. 눈과 안경!
꼭 커플링 약간만이라도 눈에 띈다. I want to 수리입니다 경우 그 꿈을 가지고 있으며, 매우 큰 눈, I& # 39 ts afaq 심장이식대기자 공정한 양의 위험을 최소화할 수 있습니다. 하지만 와일드링이 디자이너 (현재 인류가) 을 더 좋은 방법입니다. 추가 피쳐입니다 느슨하게 연결된 몸에 그렇게 쉽게 변경할 수 있습니다! (예. 안경)
내 안경은 저의 기본 비전을 끊기지 않고 쉽게 바꿀 수 있어요. 내가 안경을 벗을 수 있고 그 꿈을 전의 수 있을 것인가 (또는 더 나은 아니다). 우리 눈을 통해 세상을 어떻게 우리가 지켜보리니 변경을 통해, 다른 두 잔 적은 위험과 쉽냐구요 유지 관리.
따라서 다음에 누군가가 내 코드는 서로 긴밀하게 경우, 무슨 상관이야? " " 묻습니다. 답은 작업량의 유지 보수 및 변경, 작업량의 관한 모든 위험을 변했다니까
이 모든 C # 의 어떤가? 인터페이스 및 의존성 주입!
데코레이터 패턴 있는 이 좋은 예는 물론 눈 오른길로 클래스 우리는 충족하여 인터페이스입니다 확증하노라 요구사항릴리스 꾸미는 것은 다른 기능 (예를 들면, 선글라스, 판독값 안경을 있는 안경 보석상 대한 e.t.c)