2017-11-22 15 views
1

Rubik의 큐브를 풀기 위해 프로그램 작업을 해왔고 몇 가지 사실을 알지 못했습니다. 첫째, 일반 응용 프로그램 (예 : 화면 지움)이있는 많은 함수가 있고이를 클래스 내부의 메서드로 변경해야하는지 여부를 알지 못합니다. 내 코드의 일부는 OOP이고 다른 부분은 절차 적입니다. 이것이 PEP8을 위반 하는가/나쁜 습관입니까? 넓은 의미에서 두 가지 스타일의 프로그래밍 (OOP, 기능적, 절차 적 등)을 혼합하는 것은 나쁜 생각입니까?OOP와 프로 시저 프로그래밍을 파이썬에서 혼합하거나 (일반적으로 프로그래밍 스타일을 혼합하는 것)

+0

전혀 패러다임이 없습니다! –

+0

https://cs.stackexchange.com/ –

+0

PEP 8과 관련이 없습니다. 의견이 너무 많아서이 질문을 끝내기로했습니다. 그럼에도 불구하고 모듈 수준의 함수 ("절차 적"이라고 부르는 함수)와 Python의 클래스 정의를 혼합하는 것이 일반적입니다. OOP 깃털을 정말 두들겨 맞춘다면, 모듈을 정적 클래스로 생각하고 그 모듈에서 정적 클래스로 정적 함수로 함수를 작성하십시오. Voilà! 이제는 객체 지향 코드를 완벽하게 작성하고 더러운 절차 적 농부와 섞어서는 안됨을 쉽게 이해할 수 있습니다. –

답변

0

문제가 더 쉽게 해결 될 수 있고 언어가 지원하는 경우 나쁘지 않다고 말합니다.

프로그래밍 패러다임 해결 문제를 단지 서로 다른 접근 방식이다 :

  • 절차는 말한다 "어떻게이 문제를 해결하기 위해 수행해야하는 단계는?"
  • Functional은 "어떤 값을 변형해야하며이 문제를 해결하기 위해 어떻게 변형해야합니까?"라고 말합니다.
  • OOP는 "어떤 개체가 서로 상호 작용해야하며이 문제를 해결하기 위해 어떤 메시지를 보내야합니까?"라고 말합니다.

문제를 작은 문제로 나눌 때 문제의 일부분을 기능적으로 더 쉽게 해결할 수 있고 다른 부분은 절차 적 방법으로 해결할 수 있습니다. 그런 문제가있는 것이 완전히 가능합니다.

파이썬은 주로 절차 적이며 상당히 OOP이며, 기능적 특징 (즉, functools)을 가지고 있습니다. Haskell만큼이나 OOP가 아닌 C#처럼 기능적이지는 않지만 어느 정도는 그러한 패러다임을 사용할 수 있습니다.

+0

그들을 섞으면 새로운 패러다임이 생겨나지 않을까요? –

+0

불꽃 전쟁을 일으킬 위험이 있기 때문에 파이썬이 "Java만큼 OOP만큼이나"라고 생각할 수있는 유일한 이유는 파이썬이 모든 것을 클래스 정의에 쓰도록 강요하지 않는다는 것입니다. 하지만 Java에는 기본 형식이 있습니다. 클래스 정의에 무언가를 쓰지 않는 것보다 OOP를 위반하는 것으로 보입니다. 파이썬에서 * 모든 것은 * 객체입니다. 하지만 기본적으로 프로그래밍 패러다임은 단순히 다른 접근 방식이며 언어는 이러한 다양한 접근 방식에 대해 서로 다른 수준의 지원을 제공한다는 것이 맞습니다. C에서 객체 지향 코드를 작성할 수 있습니다! –

+0

@ juanpa.arrivillaga 'C#'로 변경되었습니다. 그리고 C에서 OO 코드를 작성할 수 있다고 생각합니다.하지만 상당히 어려울 것입니다. 그렇지 않습니까? 언어는 그런 식으로 설계되지 않았습니다. – Sweeper