Code Smell 161 - 추상/최종/정의되지 않은 클래스

클래스가 추상, 최종 또는 정의되지 않음

TL;DR: If your language has the right tool, your classes should be either abstract or final.



문제


  • 에 대한 하위 분류
  • 구체적인 하위 클래스가 있는 클래스
  • Liskov 대체 위반
  • [요요] 문제

  • 솔루션


  • 모든 리프 클래스를 최종 클래스로 선언하고 나머지는 추상 클래스로 선언합니다.

  • 문맥



    계층 구조 및 구성 관리는 훌륭한 소프트웨어 디자이너의 주요 작업입니다.

    계층 구조를 건강하게 유지하는 것은 응집력을 선호하고 피하는 데 중요합니다.

    샘플 코드



    잘못된




    public class Vehicle
    {
      // class is not a leaf. Therefore it should be abstract
    
      //an abstract method that only declares, but does not define the start 
      //functionality because each vehicle uses a different starting mechanism
      abstract void start();
    }
    
    public class Car extends Vehicle
    {
      // class is leaf. Therefore it should be final
    }
    
    public class Motorcycle extends Vehicle
    {
      // class is leaf. Therefore it should be final
    }
    

    오른쪽



    abstract public class Vehicle
    {
      // class is not a leaf. Therefore it is be abstract  
    
      //an abstract method that only declares, but does not define the start 
      //functionality because each vehicle uses a different starting mechanism
      abstract void start();
    }
    
    final public class Car extends Vehicle
    {
      // class is leaf. Therefore it is final
    }
    
    final public class Motorcycle extends Vehicle
    {
      // class is leaf. Therefore it is final
    }
    

    발각



    [X] 자동

    이는 정적 분석에 의해 시행되기 때문에 대부분의 사용 가능한 도구로는 수행할 수 없습니다.

    태그


  • 하위 분류

  • 결론



    우리는 수업을 되돌아보고 추상 또는 최종으로 자격을 부여하기 시작해야 합니다.

    하나가 다른 하나를 하위 분류하는 두 개의 구체적인 클래스에 대한 유효한 사례가 없습니다.

    처지





















    더 많은 정보






    Deep Subclasses

    부인 성명



    코드 냄새는 그냥 내 .

    학점



    사진 제공: William Bossen on Unsplash


    When the final design seems too simple for the amount of work you've put in, then you know you're done.



    브래디 클라크






    이 기사는 CodeSmell 시리즈의 일부입니다.


    좋은 웹페이지 즐겨찾기