문제

저는 지난 4 년간 개발자로 일해 왔으며 4 년 전 대학에서 소프트웨어 개발을 공부했습니다. 업계에서 4 년 동안 나는 VB6 (농담)에서 일을했지만 대부분은 C#/asp.net에있었습니다. 이 기간 동안, 나는 "대상 인식"절차 적 패러다임에서 객체 지향 패러다임으로 옮겼습니다.

최근에 나는 다른 프로그래밍 패러다임에 대해 궁금한 점이 있었기 때문에 다른 개발자들에게 이러한 패러다임, 특히 OOP와의 유사점과 차이점에 대한 의견을 물어볼 것이라고 생각 했습니까? OOP에서는 개념 간의 관계와 논리적 상호 작용에 중점을두고 있습니다. 다른 패러다임을 위해 당신이 있어야하는 마인드 프레임은 무엇입니까?

도움이 되었습니까?

해결책

프로그래밍 패러다임에 대한 최고의 설명은 Peter Van Roy의 작품에서 발견됩니다. 특히 책에서 컴퓨터 프로그래밍의 개념, 기술 및 모델 Peter Van Roy와 Seif Haridi. (동반자 위키가 있습니다.) CTM을 사용합니다 다중-파라디가 분산 된 OZ 프로그래밍 언어 모든 주요 프로그래밍 패러다임을 소개합니다.

피터 반 로이도 만들었습니다 34 개의 주요 패러다임과 다양한 축의 관계 및 위치를 보여주는이 놀라운 포스터. 포스터는 기본적으로 엄청나게 압축 된 CTM 버전입니다. 해당 포스터에 대한보다 철저한 설명이 기사에 포함되어 있습니다. Dummies를위한 프로그래밍 패러다임 : 모든 프로그래머가 알아야 할 것 책의 장으로 나타났습니다 컴퓨터 음악을위한 새로운 계산 패러다임, G. Assayag 및 A. Gerzso에 의해 편집 됨.

또 다른 몇 가지 주요 프로그래밍 패러다임을 보여주는 훌륭한 책 컴퓨터 프로그램의 구조 및 해석 Harold Abelson과 Gerald Jay Sussman. 이 책은 수십 년 동안 MIT의 CS101의 기초였습니다. Abelson과 Sussman이 가르치는 과정은 1986 년 Hewlett-Packard를위한 기업 교육에 기록되었습니다..

CTM과 SICP의 주요 차이점은 CTM이이를 지원하는 언어 (주로 분산 된 오즈뿐만 아니라 다른 사람들도)를 사용하여 대부분의 주요 패러다임을 보여줍니다. Sicp Otoh는 그들을 보여줍니다 구현 그것들은 언어로 ~ 아니다 기본적으로 지원하십시오 (체계의 하위 집합). 12 줄 정도의 코드 라인에서 객체 지향이 구현되는 것을 보는 것은 굉장합니다.

당신은 찾을 수 있습니다 MIT의 OpenCourseware 웹 사이트의 2005 년 봄 과정의 비디오 녹화 및 코스 자료. MIT의 단기 Arsdigita University 프로젝트에서 코스의 또 다른 녹음. SICP는 다른 대학에서도 가르쳤습니다. 지금 버클리에서 가르치고 있습니다.

개인적으로, 내 자신의 경험은 진짜 프로그래밍 패러다임을 이해하는 것은 가능합니다

  • 한 번에 하나의 패러다임
  • 언어로 당신은 패러다임에 들어갑니다

이상적으로는 패러다임을 극도로 끌어 올리는 언어를 사용합니다. 다중 파라디그 언어에서는 "속임수"가 너무 쉽고 더 편한 패러다임에 빠지기가 너무 쉽습니다. 그리고 패러다임을 라이브러리로 사용하는 것은 이러한 종류의 프로그래밍을 위해 특별히 설계된 체계와 같은 언어로만 가능합니다. 예를 들어 Java에서 게으른 기능 프로그래밍을 배우는 것은 좋은 생각이 아니지만 라이브러리가 있습니다.

다음은 제가 가장 좋아하는 것입니다.

  • 일반적으로 객체 지향: 본인
    • 프로토 타입 기반 객체 지향: 자기
    • 클래스 기반 객체 지향: 신문
      • 정적 클래스 기반 객체 지향: 에펠
    • 다중 발송 기반 OO: 딜런
    • 기능 + 객체 지향: 스칼라
  • 기능적 프로그래밍: Haskell
    • 순수한 기능 프로그래밍: Haskell
      • 게으른 순수한 기능적 프로그래밍: Haskell
    • 정적 기능 프로그래밍: Haskell
    • 동적 기능 프로그래밍: Clojure
  • 필수 프로그래밍: 루아
  • 동시 프로그래밍: clojure
    • 메시지 통과 동시 프로그래밍: Erlang
  • 메타 프로 그램: 계획
  • 언어 지향 프로그래밍: 의도적 인 도메인 워크 벤치

다른 팁

내 테이크는 다음과 같습니다.

  • 기능 프로그래밍은 데이터를 취하고 작동하는 기능을 작성하는 것을 의미합니다. 기능을 조립하여 대규모 응용 프로그램을 구축합니다.
  • 객체 지향 프로그래밍은 캡슐화 된 데이터와 해당 연산자를 함께 정신 모델에 잘 맵핑하는 단일 구성 요소로 함께 캡슐화했습니다. 공동 작업에서 대규모 응용 프로그램을 구축합니다.
  • 선언 프로그래밍 (예 : SQL)은 수행 된 작업을 수행하는 방식과 분리합니다. 관계형 데이터베이스에 원하는 일을 말하고 쿼리 엔진으로 운전하는 것을 남겨 둡니다.

이 링크 지난 20 년 동안 내가 사용한 것을 설명하려고합니다. 나는 그것이 유용 할 수 있기 때문에 그것을 언급하고, 그것이 패러다임으로 간주된다고 생각합니다. 왜냐하면 그것을 사용하려면 특정한 방식으로 생각해야하기 때문입니다.

당신이 생각해야 할 다른 방법은 문제를 분석 할 때 어떤 대상이 무엇인지, 어떤 행동이 일어나는 지 묻지 않고 전반적인 요구 사항으로 시작하고 요청한다는 것입니다. 무엇을 말해야합니까?

그로부터, 당신은 도메인 별 언어 (DSL)를 선택하거나 설계하고 해당 언어로 문제를 진술하십시오.

이 링크는 동적으로 변화하는 대화 상자 사용자 인터페이스를 설명하기위한 특정 언어를 설명합니다. 구현은 특정 제어 구조, 차동 실행에 따라 다릅니다. 그것이 달성하는 것은 소스 코드의 크기 감소 순서이며, 코딩 오류에 대한 기회가 줄어 듭니다. 그러한 비용은 UI를 더욱 정교하게 만드는 데 사용될 수 있습니다.

다른 종류의 문제의 경우, 다른 제어 구조는 적절하지만, 잘 선택된 DSL을 통해 작업하는 개념은 소스 코드를 훨씬 작고 쉽게 수정하고 오류가 적은 오류가 발생하는 개념이 일반적인 접근법입니다.

기능 프로그래밍 및 OOP의 패러다임은 가장 좋은 표현 인 문제의 유형을 식별함으로써 가장 잘 평가된다고 생각합니다. 종종 이러한 패러다임은 단순히 대역계가되고 그들이 다루는 문제 공간으로 분류하는 대신 치료법으로 선전됩니다.

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