실제로 OOP 개념 / 원칙을 가장 잘 배우는 방법은 무엇입니까? [닫은]


12

객체 지향 프로그래밍 언어를 배우고 싶었습니다. OOP의 전체 개념을 알기 위해 어떤 목적으로도 원하지 않습니다. 그렇다면 누구나 어떤 언어를 배우기 시작해야하는지 말해 줄 수 있습니까?


1
어떤 언어를 이미 알고 있습니까?
Mchl

C, VB.NET 및 C ++이지만 OOP 부분은 아님
Caffeinatedwolf

1
VB.NET을 선택한 다음
Vinoth Kumar CM

아니요, VB.NET을 원하지 않습니다. Java, C ++, Python 등 중에서 선택할 수 있도록 도와 드리겠습니다.
Caffeinatedwolf

3
실용적으로 무언가를 배우고 싶습니까?
JeffO

답변:


13

몇 가지 추가 제안 사항 :

  • 내가 OOP 바에서 읽은 최고의 책은 Bertrand Meyer의 Object Oriented Software Construction 입니다. 장소에서 열심히 생각해야한다는 점에서 '쉬운'읽기는 아닙니다. 그러나 그것은 OO 원칙을 설명하는 데 가장 좋은 일을합니다.

  • 언어에 관해서는 : 저는 C ++에서 멀리 떨어져 있습니다. 학습 목적으로는 너무 큽니다. OO를 이해하는 데 실제로 도움이되는 언어를 원한다면 (주류 응용 프로그램을 작성하거나 직업을 구하는 언어와 달리) smalltalk를보십시오. 또는 에펠 (위의 마이어 책의 언어).

  • 좀 더 주류이지만 여전히 OO 원칙을 충실하게 지원하는 언어를 원한다면 Python이 좋습니다. 정적 입력을 원한다면 Java 및 C #도 괜찮습니다.

한가지주의 할 점은 언어는 당신에게 OO를 가르치지 않을 것입니다. OO 개념을 얼마나 잘 지원하는지에 대해서만 도움을 줄 수 있습니다. OO를 배우는 것은 실제로 OO 용어 로 생각 하는 것을 배우는 입니다. 이를 위해 Meyer의 책으로 돌아 왔습니다.

hth.


1
C ++의 다른 것들은 중요하다 . 그건 중요 가상 상속에 대해 알고. 그건 중요 강력한 컴파일시 일반적인 지원에 대해 알고, 그것은의 중요한 참조 대 값에 대해 알고. Java와 같은 것을 추구하는 것은 "LA LA LA 나는 당신이 이걸 할 수있는 유일한 방법"이라고들을 수 없습니다.
DeadMG

2
예, 아니오 OP의 질문은 학습에 관한 것이 었습니다. C ++이 가장 적합한 학습 언어 로서 경쟁자 중 하나라고 확신하지 않습니다 . 그러나 Meyer는 고급 주제 임에도 불구하고 제네릭 및 가치 대 참조를 다룹니다. 그는 또한이 책의 후반부에서 공분산과 반 분산에 들어갑니다. 그러나 그는 기본을 먼저 설정합니다. 그리고 에펠은 정적으로 btw로 입력됩니다.
sfinnie

1
나는 에펠 탑에 대한 권고를 동의하거나 동의하지 않을 것입니다. 그러나 내가 말했듯이 Java 및 C #에 대한 권장 사항에 전혀 동의하지 않습니다.
DeadMG

12

OOPS를 시험하기 위해 C ++, Java, C # 등과 같은 객체 지향 언어를 배울 수 있습니다.

실제로 OOP를 배우고 싶다면 언어를 넘어서 생각해야하며, 실제 환경에서 소프트웨어 프로그램을 관리하는 것과 마찬가지로 소프트웨어 프로그램과 관련된 만화의 복잡성을 돕는 패러다임이라는 것을 이해해야합니다. 그런 다음 다형성, 상속, 캡슐화 (PIE) 등과 같은 OO의 기본 개념을 배웁니다.

Grady Booch의 객체 지향 분석 및 응용 프로그램을 사용한 디자인 (제 2 판)에 관한 좋은 책이 있습니다.

또한 fascinatingoops.com 으로 시작하기에 충분히 간단한 블로그를 사용해보십시오.


3

OOP를 배우고 싶습니까? 하나의 답변-스몰 토크.

그것은 우아한 언어이며 핵심에 OO입니다. 처음부터 OOP를 배우고 다른 언어가 통합하는 다른 모든 방해 요소에 의해 방해받지 않습니다.

스몰 토크가 이깁니다. 좋은 무료 전자 책도 있습니다 ( Stephane Ducasse 참조 ).


3

C ++을 배우거나 스몰 토크와 같은 조상 중 하나를 배워야 할 것입니다. C ++는 객체 지향, 메모리 관리 및 참조 대 값과 같은 개념을 명확하게 분리하며 강력한 일반 지원을 제공합니다.

Java 또는 C #과 같은 .NET 언어를 배우지 마십시오. Java와 같은 언어를 배우면 "객체는 항상 힙에 있고 항상 참조입니다"와 같은 것을 배우게됩니다. 이는 Java에만 해당되며 일반적으로 OOP에는 해당되지 않습니다. 이러한 개념의 충돌 (객체 지향, 메모리 관리, 참조 대 가치)은 일단 머리에 갇히게되면 되돌릴 수 없기 때문에 첫 번째 언어에는 매우 위험합니다. C #은 이와 관련하여 다소 낫지 만 많이는 아닙니다. 또한, 그들은 일반적인 프로그래밍 지원이 약한 "상속은 망치이며 모든 것이 못이다"라고 가르치는 경향이있다.


이것은 매우 사실입니다. OOP에 중점을 둔 언어를 다룰 때 OOP로 모든 것을 해결하려고 시도 할 때 실제로 OOP에 어떤 문제가 실제로 적합하지 않은지 배우지 못할 것입니다.
daramarak

1

OOP 개념을 배우는 가장 좋은 방법은 점점 더 많은 코드를 작성하고 자주 검토하는 것입니다. 연습을 좋은 프로그래머로 만드십시오.

실제 시나리오를 생각하고 문제 설명을 정의하십시오. 코드로 해결하고 검토하십시오. /codereview// 에서 언제든지 도움을 얻을 수 있습니다. :)

행복한 코딩 !!!


0

단계

  1. 그들이 무엇을 의미하는지 배우십시오.
  2. 그것들을 구현하는 방법을 배우십시오.
  3. 프로젝트 개발, 언어 선택 [VB.NET, C # 또는 C ++ 또는 java와 같은 OOPS 원칙이 통합되어야 함]
  4. OOPS로 프로젝트 로직을 단순화 할 수있는 방법에 대해 생각해보십시오 . [참고 : OOPS를 원했기 때문에 OOPS를 구현하지 말고 목적을 해결해야합니다.]
  5. 잊지 마십시오 : 당신도 실수로부터 배울 것 입니다.

0

OO 세계에 대한 나의 첫 접촉은 나쁜 시작이 아닌 C ++이었습니다. 그러나 파이썬을 배울 때 많이 향상되었습니다. 차이점은 언어와 다릅니다. C ++에서 아이디어를 시도하는 방법 ( 'OO 방식 으로이 문제를 어떻게 해결할 수 있습니까?')은 파이썬에서 동일한 아이디어를 시도하는 것보다 더 많은 코드를 작성해야하며 더 많은 함정을 포함합니다. 그래서 파이썬을 추천합니다.


0

나는 OOP를 배우려고 할 때 다른 언어를보아야한다고 생각하지 않습니다. 나에게 이론을 이해하고 내가 이미 알고있는 것과 관련이 있다면 그것을 적용하는 법을 배우는 것이 더 쉽다. 새로운 구문을 알아내는 데 방해가됩니다.

모든 OOP 책으로 시작할 수 있습니다. 다시, 나는 내가 선택한 언어로 하나를 얻을 것입니다. 리팩토링 (OOP 스타일)에 관한 책을 읽으면 OOP를 적용하는 데 도움이되었습니다. 기존 프로젝트 (요구 사항 수집에 방해가되지 않음)를 사용하여 개선 할 수있는 새로운 방법을 찾았습니다. OOP를위한 OOP만이 아닙니다. 그런 다음 새 프로젝트에서 처음부터 끝까지 수행하는 방법을 배울 수 있습니다. 여기의 논리는 항상 처음부터 올바르게 얻을 수는 없다는 것입니다. 적절한 곳을 알 수 있다면 더 나을 것입니다. 대부분의 것들과 마찬가지로 모든 문제를 해결하지는 못합니다.

일부 언어에는 명확한 제한이 있습니다. 귀하의 목표가 다중 상속의 마스터가되는 것이라면 .NET은 사용되지 않습니다.


0

여기서는 기존의 사고에 반대하고 OOP 를 사용 하기위한 가장 쉬운 언어 가 반드시 그것을 배우기에 가장 적합한 언어는 아니라고 제안 합니다. 나는 C ++로 OOP에 처음 노출되었지만 Perl을 사용한 OOP에 대한 Larry Wall의 Camel 책 장을 읽을 때까지 그것을 얻지 못했습니다. 어떤 이유로 나는 클래스에 객체를 명시 적으로 축복 해야 할 때까지 클래스와 객체의 차이점을 파악하는 데 어려움을 겪었습니다 . GObject를 사용하여 C에서 수행 할 때까지 OOP의 기본 구현을 실제로 이해하지 못했습니다. 언어에 구애받지 않는 회사 수업을들을 때까지 모범 사례를 제대로 이해하지 못했습니다. 매우 큰 주제입니다..

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.