2009-09-05 4 views
4

인터페이스를 만들 때 행동을 기반으로 인터페이스를 만들면 가능한 표준을 따릅니다. 예 :개체 또는 동작/동작에 대한 인터페이스를 만드시겠습니까?

interface Comparable 
interface Enumerable 
interface Listable 
interface Talkable 
interface Thinkable 

또는 예를 들어.

interface Comparator 
interface Enumerator 
interface List 
interface Human 

왜?

UPDATE

이 질문은 명명 규칙 (-able 접미사 또는 I- 접두사)에 대해 없습니다.

  1. 유연성 예를 들어
  2. 복잡/단순
  3. 유지 보수

, 내가 필요로하는 경우 : -이 측면에서, 인터페이스의 디자인 의도, 그리고 그것의 영향에 관한 것입니다 - 가능한 방식으로 다른 기능을 구현하려면 클래스를 다음과 같이 선언 할 수 있습니다.

public class Man implements Talkable, Thinkable, Laughable 
public class Woman implements Talkable, Thinkable, Laughable 

한편, 우리는 개체를 기반으로 인터페이스를 만들 경우, 우리는

public class Man implements Human 
public class Woman implements Human 

로 사용할 수 있습니다 그리고 우리는 또한 다형성의 목적을 위해 사용할 수 있습니다.

Human man = new Man(); 
+0

이 표준은 주로 언어마다 다르며 때로는 조직의 프로그래머와 표준에 주관적입니다. –

답변

4

인터페이스는 구체적인 클래스가하는 것과 관련이 없습니다. 그들은 고객이 필요로하는 것, 그리고 고객이 필요로하는 것 대신에 대체 할 수있는 것이 무엇인지에 관한 것입니다. 예를 들어, Man 클래스에서 인터페이스를 추출하는 대신 Man 클래스를 사용하는 클래스 중 하나에 중점을 둡니다. 그것은 무엇을합니까? 아마도 그것은 서로 이야기하고 싶어하는 Conversation 클래스 일 것입니다. 두 개의 Man 클래스를 준 경우 talk()을 호출 할 수 있습니다. 그러나 좀 더 유연 해지기를 원한다면, 그것이하는 일의 개념을 추상화 할 수 있습니다. 즉, 말을 만들고, 인터페이스 (예 : Talkable)를 사용하게합니다. 이 Conversation 클래스에 Talkable 인터페이스를 볼 때 나는, 나는 그것이 Man, Woman, Parrot인지, Talkable를 구현하는 것을 대체 할 수있는 Talkable를 볼 경우, 당신은 ", 오히려"그건 정말 Man은 "그러나 생각한다 , Robot, 등 "

내가 명확하지 않은 경우 주제에 대한 유용한 자료가 있습니다. 로버트 마틴의 Dependency Inversion Principle, Interface Segregation PrincipleLiskov Substitution Principle 기사를 확인하십시오.

+0

링크를 제공해 주셔서 감사합니다! – janetsmith

1

인터페이스 객체에 필요한 동작을 정의하기 위해 만들어진, 그리고 여러 개체에 대한 유사한 동작을 할 수 있습니다 .. 당신이 인간의 동작을 만들려면처럼, 당신은 객체 남자와 여자를 가질 수 있습니다, 이들은 동일한 행동을 공유하지만 몇 가지 별개의 기능/속성을 가지고 있습니다. 이런 식으로 인터페이스를 사용하지 않는다면 두 남녀 성별에 대해 2 개의 인터페이스를 만들어야합니다.

따라서 인터페이스는 개체의 동작과 관련이 있습니다.

3

인터페이스 Comparable은 인스턴스가 COMPARED 일 수있는 클래스로 구현되어야합니다. 인터페이스 Comparator (모든 프로그래밍 수준의 일반 프로그래밍을 수행하는 언어로, 아마도 Comparator<T>!)은 다른 인스턴스를 비교할 수있는 인스턴스가있는 클래스에 의해 구현되어야합니다. 두 가지 용도 모두 우수한 유스 케이스를 가지며, 본질적으로 서로 분리되어 있습니다. 당신은이 중요한 의미 론적 구별을 놓치고있는 것처럼 보입니다.

+0

내가 사용하는 예제는 특정 언어 (Java)의 구현과 관련이 없습니다. Comparable/Comparator 인터페이스는 C#, C++, Actionscript 등에서 사용될 수있는 예제 중 하나입니다. – janetsmith

+0

Java-y에 대한 내 대답은 없습니다. 널리 사용되기 때문에 일반용으로 ''표기법을 제안하고 있습니다. 내 요점은 * 영어 * : Enumerable *을 열거 할 수 있고, Enumerator가 열거 할 수 있습니다. 등등, 대부분의 타동사에 대해서. 매우 다른 의미. 심지어 자동 응답 동사도 비슷하게 작동합니다 (일반적으로 몇 가지 전치사가 함축되어 있음). Laughable 객체는 * 웃을 수있는 객체입니다 (즉, MEANS라는 단어입니다). Laugher는 웃음을 짓는 대상입니다. 그것은 주체 대 문법적 인 직접 객체입니다. –