문제

일상적인 프로그래밍 (웹 또는 기타)에서 클래스 또는 메소드 결승을 선언 해야하는 특별한 이유가 있습니까? 사용해야 할 실제 예제를 제공하십시오.

BTW, 나는 노력하고 있기 때문에 묻습니다 '모호한'키워드를 선택하고 마스터하십시오.

도움이 되었습니까?

해결책

그것은 다른 프로그래머들이 당신이 의도하지 않는 수업으로 일을하는 것을 방지합니다. 따라서 "이 클래스를 사용하여 xxx를 사용하지 마십시오"라는 의견을 제시하지 않고,이를 무시하고 그런 식으로 남용하려는 유혹을받지 않는 방식으로 디자인 할 수 있습니다.

편집하다: 예제가 요청 되므로이 키워드를 찾을 수있는 사례를 설명하겠습니다. 두 객체가 서로 통신 할 수있는 방법, 예를 들어 청취자 및 알림자를 정의하는 클래스가 있다고 말합니다. 청취자 클래스는 분명히 상속을 허용해야하지만, "has-a"관계에서 사용해야하는 Notifier 클래스를 최종적으로 만들 수 있습니다. 이런 식으로, 당신은 그들이받는 메시지의 특성에 대해 청취자 객체로부터 몇 가지 가정을 만들 수 있습니다.

그렇지 않으면, 해당 수업에서 물려 받고 메시지를 확장하는 등 모든 종류의 미친 일을 할 수 있습니다. 다른 프로그래머가 그렇게하기를 원하지 않는다면, 수업을 최종적으로 만들 수 있습니다. 또한 다른 프로그래머가 서브 클래스에 적합한 클래스를 쉽게 이해할 수 있기 때문에 널리 사용되는 공개 API에서는 훨씬 더 의미가있을 수 있습니다.

또 다른 예-버퍼 기반 스트림 프로세서가 있고 read ()/write () 메소드 내부에 객체의 현재 상태에 대한 데이터 (즉, 현재 바이트 또는 그 밖의)에 대한 데이터를 유지합니다. 이 클래스를 서브 클래스하는 사람이 처리 중에 Super의 방법을 호출 할 것을 보장 할 방법은 없습니다. 그러한 클래스에는 몇 가지 방법 만 포함되어 있기 때문에 각 방법 대신 모든 것을 최종적으로 만드는 것이 좋습니다. 이것은 다시 클래스를 사용하는 사람들이 "is-a"가 아니라 "has-a"로 강요하므로 코드가 실행 될 것으로 예상하는 방법을 제어 할 수 있습니다.

나는 당신과 동의 할 것입니다. 수업 결승전은 아마도 푸른 달에서 한 번해야 할 일이지만 PHP가 운동하도록 선택하면이 기능을 갖는 것이 좋습니다.

다른 팁

"상속에 대한 구성을 시행" 다소 간결하게 말합니다. 다음 섹션에서 알 수 있듯이 보안 혜택도 가질 수있는 다른 어떤 것도 방해 할 수없는 클래스의 특정 행동을 보장합니다.

어떤 사람들은 당신이 선언해야한다고 주장합니다 모두 당신이 구체적으로 다형성 연장의 의미를 허용하고 조사하지 않으려고하지 않는 한, 최종 클래스. 나는 이것이 다른 사람이 당신의 코드를 가지고 일하는 사람에 대한 많은 불신을 암시하는 경향이 있지만, 불행히도 때로는 그것이 보증됩니다.

많은 언어에서 클래스를 최종으로 선언하면 방법에 대한 미덕 테이블을 볼 필요가 없기 때문에 최적화 이점도 제공합니다.

클래스의 의도를 시행하고 싶다면 의도는 서브 클래스가 의미가없는 경우 최종을 사용하십시오. 그렇지 않으면 큰 이점이 없습니다.

일반적으로 그것은 의도를 시행하는 메커니즘 일뿐입니다.

최종 클래스는 서브 클래식을 할 수없는 클래스이므로 파생 상품을 만들고 싶지 않은 모든 것입니다. 예를 들어 Java에서는 Java가 절대 값의 의미를 재정의 할 수 있기를 원하지 않기 때문에 수학 클래스는 최종입니다.

최종 (및 C#에 봉인 된)는 클래스의 기본 동작을 시행하기 위해 (클래스 라이브러리 디자이너에 의해) 사용될 수 있습니다.
예를 들어 끈에 불변의 행동이 있음을 시행합니다
Java의 문자열 클래스는 최종적으로 표시되며 C#로는 밀봉되어 있습니다.
모든 문자열은 불변이며 그 행동을 바꿀 수는 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top