문제

개념에 익숙하지 않은 사람들에게는 추상화 반전은 고급 구성 위에 저수준 구성을 구현하는 것이며, 일반적으로 불필요한 복잡성과 불필요한 오버 헤드를 추가하기 때문에 일반적으로 나쁜 것으로 간주됩니다. 물론 이것은 다소 부정확하고 주관적인 정의입니다.

귀하의 의견으로는, 모든 것이 클래스의 일부가되어야하며 Java 또는 C#과 같은 포인터와 같은 것들이 노출되지 않은 단일 파라디가 OOP 언어로 프로그래밍이 필연적으로 추상화 역전으로 이어 집니까? 그렇다면 어떤 경우에?

도움이 되었습니까?

해결책

단일-파라 디그 아무것 추상화의 첫 번째 계명을 위반하는데, 이는 소수의 사람들이 알고있는 것처럼 보이고 덜 신경을 쓰는 것입니다.

당신은 필요한 경우 무시할 수없는 추상화를 당신에게 말하지 마십시오.

패러다임이 무엇이든, 실제 문제를 해결하기 위해 사소한 코드를 작성하기 시작하면 패러다임에 잘 맞지 않는 것들로 끝날 것입니다. 하나의 패러다임이 전부라고 선언한다면, 이것은 상황이 못 생겼을 때입니다.

몇 가지 은유를 섞으려면, 당신이 가지고있는 모든 것이 망치 일 때, 모든 것이 페그처럼 보이기 시작하고, 모든 구멍이 둥글고 갑자기 사각형 페그가 있고 톱이 없으면 (망치 만 있지 않습니다. ,) 당신은 자신에게 문제가 있습니다.

무료 점심은 없습니다. 모든 것이 절충입니다. 더 쉬운 코드는 쓰기가 쉬워지고 다른 사람이 읽고 유지하기가 더 어려워 지거나, 문제가 발생하는 추상화 수준 아래에서 문제가 발생할 때 귀하 또는 다른 사람이 디버깅하기가 더 어려워집니다. (그리고 그들은 결국 때문일 것입니다 추상화는 완벽하지 않습니다.

이것은 관리 코드, 쓰레기 수집, JIT 컴파일 및 "Everything is a Object"Fiat와 같은 "유용한"기술 및 패러다임의 기본 결함입니다. 그들은 당신이 아래에 도달 할 수없는 기준 수준의 추상화 수준을 부과하며, 그 수준 아래에서 무언가 잘못되면 그것에 대해 할 수있는 일은 없습니다. 당신은 그것을 고칠 수 없기 때문에 나쁜 추상화를 중심으로 일하는 것입니다.

다른 팁

실제 프로그래머는 모든 언어로 Fortran을 쓸 수 있습니다

다시 말해서, 그것은 언어가 아니고, 프로그래머입니다

Java와 C#에는 함수와 동등한 정적 메소드가 있으므로 언어는 귀하에게 아무것도 강요하지 않습니다.

즉, 내가 정말로 OO를 얻었을 때, 나는 다른 스타일의 프로그래밍에 가고 싶은 욕망이 없었습니다.

간단한 OO 레이어가 복잡한 것을 덮고 있다면 아마도 당신의 코드 일 것입니다. OO가 올바르게 완료되면 금속까지 간단해야합니다.

나는 생각하지 않는다 언어 Java 또는 C#과 마찬가지로 프레임 워크와 함께 제공되는 라이브러리가 너무 풍부하기 때문에 다른 패러다임으로 침입해야 할 필요성이 실제로 일반 프로그래밍에 필요하지 않기 때문입니다.

즉, 풍부한 도서관 그러나 내부 구현이 종종 숨겨져 있거나 주요 클래스가 봉인되기 때문에 추상화 역전으로 어려움을 겪을 수 있습니다. 이러한 라이브러리를 확장하려고 시도하는 개발자는 종종 기본 클래스가 제공하는 확장 지점을 성공적으로 사용하기 위해 기능을 재현/복제해야합니다. 라이브러리 - 기본 클래스 라이브러리 개발자가 의식적으로 선택하여 .NET Framework/JDK의 새로운 릴리스에서 부서지기 쉬운 기능을 노출시키지 않기 위해 언어 문제가 아닙니다.

또한 .NET Framework / Java 런타임은 공통 런타임 위에 앉아있는 다른 언어와 상호 로프를 허용하기 때문에 다른 패러다임 (예 : 기능 프로그래밍, 동적 언어 등)을 대상으로하는 기능은 단일 패러다임에서 벗어날 수있는 다른 경로를 제공 할 수 있습니다. 제약.

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