답변:
누군가 하나의 소프트웨어 기술이 다른 소프트웨어 기술을 죽이거나 전체 시장 / 사용 / 청중을 지배한다고 말할 때마다 다음을 기억하십시오.
건전한 (동적이지만 안정적인) 생태계는 매우 다양한 종으로 구성됩니다.
즉, 새로운 과장된 기술은 과대 광고 곡선을 통과하게되고 결국에는 시간과 경험을 통해 특정 목적을 찾게됩니다.
또한 측면 지향 프로그래밍과 같은 극단적 인 개념은 비용이 암시되어 있기 때문에 항상 그런 것은 아니라는 것을 의미하는 경우 유용합니다.
그러나 이미 OOProgramming, 일반 프로그래밍, 기능 프로그래밍, 절차 프로그래밍 등과 같은 위치에 있습니다.
실생활에서 널리 사용되고 널리 사용되는 언어가 "순수하지 않은"언어라는 것을 알고 계셨습니까? 여러 패러다임을 허용하면 시간이 지남에 따라 컨텍스트를 더 유연하게 변경하고 더 많은 사용 틈새를 채울 수 있기 때문입니다.
AOP로 인해 OOP가 종료되지 않습니다. AOP는 가치를 더하지만 OOP와 완벽하게 공존합니다. 함수형 프로그래밍이 OOP를 죽일 것이라고 생각하지 않습니다. OOP는 많은 종류의 문제 영역에 적합하기 때문에 기능 패러다임으로 대체하는 것은 의미가 없습니다.
짧은 대답 : 아니요, 그렇게 생각하지 않습니다.
더 긴 대답 : AOP에 대해 이해하는 것 자체는 프로그래밍 패러다임이 아니며 (OOP를 대체하지는 않음) 더 짧은 방법, 더 간단한 단일 책임 클래스를 작성하는 데 도움이되는 툴킷입니다. 등. 그러나 OOP를 대체하지는 않습니다.
(적어도 부분적으로) 수행하는 것은 교체하거나 추가 OOP에 실제로 프로그래밍 기능이다 있다 (이 예를 들면, OOP와 혼합 될 수 있지만, 다른 프로그래밍 패러다임 스칼라 프로그래밍 언어 ). 불변의 데이터 구조와 특히 동시성에 관해서는 OOP 개발자를 좌절시키는 경향이있는 모든 종류의 멋진 기능을 선호합니다.
OOP는 많은 상황에서 사실상의 접근 방식으로 가정 된 이래로 덜 알려졌습니다. AOP는 어떤 종류의 대중 운동으로도 결코 벗어나지 않았습니다.
기존 AOP 시스템을 살펴보십시오. 예를 들어 Spring AOP는 클래스에 메소드를 정의한 것에 의존합니다. Castle Windsor는 객체 지향 언어 인 C #에서 지원합니다.
이론적으로 OOP에서 구조적 프로그래밍으로 전환하고 AOP를 유지할 수는 있지만 실제로는 어려울 것입니다. 하위 클래스를 쉽게 작성하고 관련 메소드를 재정 의하여 적절한 사전 / 이후 필터를 호출 한 다음 종속성 주입 프로세스에서 전달합니다.
정적 메소드 호출을 다시 작성하여 사용자 정의 필터를 호출하도록 설계된 트램펄린 메소드로 라우팅하는 것은 비교하기가 어렵습니다.
따라서 일반적인 구현 관점에서 AOP에는 OOP가 필요합니다.
OOP는 확실히 은색 총알이 아니지만 AOP에 대해서도 마찬가지입니다. 구성 요소 기반 디자인을 지원하지만 더 큰 구성표에서 구성 요소는 새로운 객체이고 구성 요소 인터페이스는 기본적으로 트랜잭션 메서드 목록이며, OOP가 아닙니다.
더 많은 AOP 및 구성 요소 기반 설계는 Anemic Data Model을 지원합니다.
http://martinfowler.com/bliki/AnemicDomainModel.html
(위의 기사는 오래되었지만 놀랍게도 관련이 있음을 알고 있습니다)
결론은 AOP 시스템이 여기에 있지만 완벽하지는 않다는 것입니다. 완벽한 시스템은 없습니다.