태그 보관물: coding-standards

coding-standards

추상 클래스에 “Abstract”접두사를 추가해야합니까? [닫은]

이라는 추상 클래스가 있다고 가정하십시오 Task.

AbstractTask대신 이름을 지정해야한다는 표준 또는 규칙이 있습니까?



답변

Bloch의 Effective Java (항목 18)에 따르면 Abstract 접두사는 특수한 경우에 사용되는 규칙입니다.

내보내는 각각의 중요하지 않은 인터페이스와 함께 추상 스켈 레탈 구현 클래스를 제공하여 인터페이스와 추상 클래스의 장점을 결합 할 수 있습니다. … 일반적으로, 골격 구현을 AbstractInterface라고합니다. 여기서 Interface 는 구현하는 인터페이스의 이름입니다.

그러나 Bloch는 SkeletalInterface라는 이름이 의미가 있다고 지적했지만

이제 추상 컨벤션이 확정되었습니다.

다른 답변이 지적했듯이 일반적 으로이 명명 규칙을 모든 추상 클래스에 적용 할 이유가 없습니다.


답변

컨벤션이 없습니다. 개발자로서 더 빠르고 더 나은 코드를 작성하고 다른 사람들이 귀하의 코드를 이해하는 데 도움이되는 것은 무엇입니까?

코드를보고 관리 할 사람들에게 물어보십시오. 그들은 오히려 무엇을 볼 것입니까? 그들에게 무엇이 더 쉬울까요? 그런 다음 원하는 것을 기준으로 이름을 지정하십시오.

또 다른 참고로, Java 프로그래밍 언어에 대한 코드 규약 : 9. 명명 규약 에서는 요구 사항이 없습니다.

클래스 이름은 명사이어야하며 대문자로 된 각 내부 단어의 첫 글자와 대소 문자를 혼합해야합니다. 수업 명을 단순하고 설명하기 쉽게 유지하십시오. 전체 단어를 사용하지 않는 두문자어 및 약어를 사용하십시오 (약어가 URL 또는 HTML과 같은 긴 형식보다 훨씬 널리 사용되지 않는 한).


답변

아닙니다. Intellisense는 그것이 추상적인지를 사소하게 말해 줄 것이므로 여기서 DRY를 위반하고 있습니다.


답변

이것은 다소 선호의 문제 (그러나 경계선 나쁜 습관)이지만 대부분의 사람들은 클래스의 이름으로 한정자의 일부를 보는 것을 좋아하지 않습니다.

대부분의 IDE는 정보를 쉽게 사용할 수 있도록하기 때문에 이름에 넣을 필요는 없으며 정보를 생략하는 것이 더 깨끗합니다. 변수 이름 지정에 대한 헝가리 표기법을 생각 나게하며 오늘날 요즘 나쁜 형태로 간주됩니다. 나는 단순히 그것을 호출하는 것이 좋습니다 Task.


답변

.NET에서 “Base”를 접미사로 사용하여 추상 기본 클래스를 나타내는 경우가 종종 있습니다. 이것이 Java에서 일반적인 관행인지 여부에 대해서는 다른 답변을 연기합니다.


답변

제 생각에, 엔티티 이름은 타입 구조에 대한 정보를 전달해서는 안되며 의미에 대한 정보를 전달해서는 안됩니다. 따라서 추상화가 런타임 목표의 일부가 아닌 경우 클래스를 “AbstractSomething”으로 정의하는 것은 의미가 없습니다. 기본 추상 클래스라는 것은 프로그래머가 볼 수 있으며 이름에 반영 될 필요는 없습니다.

그러나 추상 팩토리의 구현을 AbstractFactory라고 부르는 것이 완벽하다면 클래스의 의도와 관련이 있기 때문입니다.

일반적으로, 학급 목표에 대한 대부분의 정보를 전달하는 데 도움이되는 명명 규칙을 선호하십시오.

마찬가지로에서 삭제하십시오 SomethingImpl. 우리는 그것이 기본 클래스가 아닌 구현이라는 것을 신경 쓰지 않습니다. 클래스 계층 구조가 상속을 위해 올바르게 설계된 경우 누군가가 상속 할 수 있습니다. 더 많은 “Impl”접미사 또는 기타 아티팩트를 추가하는 것은 가치가 없을 것입니다. “인터페이스”접미사 또는 “I”접두사를 추가해도 값이 없습니다.

치다:

IVehicle <-- IMotoredVehicle <-- AbstractCar <-- CarImpl

반대로 :

Vehicle <-- MotoredVehicle <-- Car <-- DefaultCar
                                   <-- Ferrari
                                   <-- Trabi

나는 후자를 선호한다.


이것은 어떤면 에서 헝가리어 표기법끔찍한 오용 과 비슷하지만 후자 사람들이 변수 유형의 지표로 변수 앞에 접두사를 개발자에게 요구하도록 잘못 해석했기 때문에 나쁜 표현을 주었다고 잘못 지적했습니다. 이것은 때로는 용도를 가질 수 있지만 (주로 유형 정의를 찾기가 게으른 경우) 쓸모가 없습니다. 헝가리 표기법에 대한 Simonyi의 독창적 인 아이디어는 개발자가 유형이 아닌 엔티티의 기능을 개발자에게 상기시키기 위해 니모닉으로 사용하는 것이 었습니다.


답변

일반적으로 구문에서 명백한 이름에 속성을 포함시키지 않는 것이 좋습니다. Java에서는 적절하게 이름이 지정된 abstract키워드 로 추상 클래스를 표시해야 하므로 이름에 포함하지 않을 것입니다. 예를 들어 C ++에서 경우는 분명하지 않지만 적어도 추상 클래스를 잘못 사용하면 컴파일러에서 알려줍니다. 파이썬과 마찬가지로 다시 추상 클래스의 이름을 명시 적으로 지정하는 것은 나쁜 생각이 아닙니다.

규칙에 대한 일반적인 예외는 이름이 모호한 경우입니다. 어떤 이유로 든 구체적인 하위 클래스가있는 경우 Task(다른 예에서는 더 합리적이지만 어쨌든),을 사용하십시오 AbstractTask.