[language-agnostic] 객체 지향 프로그래밍의 대안?

OOP는 오늘날 소프트웨어 설계에서 가장 많이 사용되는 프로그래밍 패러다임 일 것입니다. 내 질문은 – 어떤 다른 패러다임 이 그것과 경쟁 할 수 있고 OOP 대신에 설 수 있는가? 그 질문을 명확히하기 위해 다른 패러다임이 무엇인지 묻는 것이 아닙니다. 많이 있지만 어느 쪽인지 알고 싶습니다 …

  • 이론뿐만 아니라 실제로 사용되었습니다.
  • OOP와 경쟁 할 수 있으므로 최소한의 고통으로 대규모 프로젝트에 사용할 수 있습니다.
  • 비즈니스 로직, 데이터베이스 등이 포함 된 데스크톱 앱을 개발하는 데 사용할 수 있습니다.
  • OOP와 함께 사용되지 않지만 OOP를 대체합니다.

그리고 그것이 있다면, 그것의 장단점은 무엇이며, 왜 OOP보다 낫거나 나쁜지, 어떤 언어가 그것을 사용하는 것이 가장 좋으며, 대중적인 언어에서 그것을 사용하는지, 어떤 디자인 패턴을 가질 수 있습니까? OOP를 완전히 대체 하시겠습니까?



답변

함수형 프로그래밍 은 주로 학계에서 널리 사용되는 또 다른 프로그래밍 패러다임입니다. 함수형 프로그래밍 언어의 가장 좋은 예는 HaskellStandard ML 입니다.

함수형 프로그래밍과 객체 지향 프로그래밍의 근본적인 차이점 은 제어 흐름이 아닌 데이터 흐름 의 관점에서 프로그래밍한다는 것입니다 . 좋은 소개는 Simon Peyton-Jones의 Taming Effects with Functional Programming 을 참조하십시오 .

업계에서 사용되는 함수형 프로그래밍의 좋은 예는 Erlang 입니다. 주로 통신, 분산 및 내결함성 시스템에 사용됩니다. 프레젠테이션보기 동시 세계 소프트웨어 – 얼랑 에 의해 조 암스트롱 .

함수형 프로그래밍과 OOP를 결합한 새로운 함수형 프로그래밍 언어도 있습니다. 두 가지 좋은 예는 .NET 플랫폼 용 F # 과 Java 플랫폼 용 Scala 입니다. 종종 다른 언어로 작성된 플랫폼의 기존 라이브러리를 사용할 수 있습니다.

이제 새로운 프로그래밍 언어의 추세는 객체 지향 프로그래밍 및 함수 프로그래밍과 같은 여러 패러다임이 동일한 언어로 결합되는 Multi-paradigm 입니다.


답변

절차 적 처리는 OOP가 나타나기 전의 모든 것이 었으며 일부 대규모 실제 응용 프로그램 (사실 대부분은 원래)과 많은 운영 체제를 생성했습니다.

최소한의 고통과 최대의 성능으로 대규모 제품에 확실히 사용할 수 있습니다.


답변

벡터 관계형 데이터 모델링은 네트워크 상주 모델 브로커 인 글로벌 정보 네트워크 아키텍처 내에서 도메인 관련 의미론을 가진 실행 가능한 정보 모델을 생성하는 데 사용됩니다.


답변

우선 현재 사용중인 많은 프로그래밍 언어 (특히 “고급 언어”)는 다중 패러다임 입니다. 이는 순전히 OOP 인 프로그램을 빌드하지 않는다는 것을 의미합니다 (스몰 토크 또는 에펠을 사용하여 큰 프로젝트를 빌드하는 경우 제외).

예를 들어 PHP 를 살펴보십시오 .

  • OOP의 많은 요소가 있음 (버전 5부터)
  • 이전에는 대부분 절차 적이었습니다.
  • 선언적 프로그래밍 요소 (예 : 배열 함수)가 있습니다.
  • 함수형 프로그래밍의 많은 요소를 구현했습니다 (버전 5.4 이후).

기본적으로 PHP는 많은 다른 패러다임을 하나로 묶습니다 (그리고 “접착 언어”자체입니다).

또한 Java는 객체 지향 패러다임 (예 : 함수형 프로그래밍)이 아닌 많은 개념을 구현합니다.

Wikipedia : https://en.wikipedia.org/wiki/List_of_programming_languages_by_type#Imperative_languages(100% 정확하지 않음) 에서 유형별 프로그래밍 언어 목록을 살펴보세요 .

기능적 프로그래밍 (결론적 프로그래밍의 하위 집합)

  • Wideley은 (는 같은 붙어 언어의 일부가되었다 실제로 사용되는 PHP , 또한 자바 함수 프로그래밍 및 많은 다른 사람이 구현 한 개념)
  • 많은 아이디어는 확실히 볼만한 가치가있는 LISP에서 비롯됩니다.
  • 예를 들어 Haskell로 전체 애플리케이션을 빌드 할 수 있으므로 OOP를 “대체”할 수 있습니다.

절차 적 프로그래밍

  • C (대부분 절차 적 언어)는 여전히 가장 널리 사용되는 언어 중 하나입니다.
  • 많은 현대의 접착제 언어는 처음에 절차 적이었습니다.
  • 여전히 많은 프로그램이 대부분 절차 적이므로 원하는 경우 OOP를 “대체”할 수 있습니다.

논리 프로그래밍

  • 가장 눈에 띄는 예는 Prolog입니다. 규칙 기반 논리 쿼리의 이점을 얻는 특정 작업에 사용됩니다.
  • 대규모 프로젝트 구축 측면에서 OOP를 “대체”할 수 없지만 다른 측면에서는 대체 할 수 있습니다.

일반적으로 선언적 / 도메인 특정 언어

  • 프로젝트에서 SQL을 사용하십니까? 그렇다면 그들은 순전히 OOP가 아니며 SQL은 본질적으로 선언적입니다.
  • 많은 도메인 별 언어 (예 : CSS)가 선언적입니다.

일반적인 명령형 프로그래밍

이 목록은 완전하지 않으며 단지 아이디어를 줄 것입니다. 큰 애플리케이션을 작성할 때 일반적으로 많은 다른 패러다임을 사용하고 있으며 사용중인 각 언어도 여러 패러다임을 구현하고 있다는 점에 유의하십시오.

OOP는 일반적으로 데이터를 모델링 할 때 크고 복잡한 관계를 구성하는 데 좋은 선택으로 간주됩니다. 다른 많은 작업을 수행하는 것이 항상 패러다임은 아닙니다.


답변

FP-Functional Programming은 매우 오랫동안 사용되어 온 매우 인기있는 프로그래밍 패러다임이며 최근 몇 년 동안 점점 더 두드러지기 시작했습니다. FP는 부작용이없는 가변성, 재귀 및 함수보다 불변성을 선호합니다. 널리 사용되는 fp 언어의 예로는 Erlang, Scala, F #, Haskell 및 Lisp가 있습니다.


답변

현재 OOP를 진정으로 대체 할 수있는 패러다임은 없습니다. OOP의 (이점) 문제는 리소스를 자동으로 해제하고 데이터를 검증하는 등 많은 작업을 수행하며 전 세계 기존 라이브러리의 대부분은 말할 것도없고 코드를 쉽게 검증 할 수 있다는 것입니다. C ++, C # 또는 Java와 같은 OOP 언어로 작성됩니다. 이러한 대규모 도서관없이 잘 지내는 현실은 매우 의심 스럽다.

틈새 시장이나 학문적 세계에서는 많은 함수형 프로그래밍을 찾을 수 있습니다. 그러나 정말로 큰 프로젝트를하고 싶다면 OOP가 유일한 방법입니다.

제네릭 프로그래밍이 새로운 패러다임으로 떠오를 것이라고 생각합니다. 그러나 실제로 아직 개발 단계에 있으며 C ++ / D만이 진정으로 훌륭한 제네릭 프로그래밍을 제공합니다.


답변