OO 프로그래밍은 채용 회사가 배치하는 것만 큼 중요합니까? [닫은]


55

석사 과정을 마치고 (계산 중) 직업을 신청하고 있습니다. 많은 회사에서 특히 객체 방향에 대한 이해를 요구하는 것을 보았습니다. 인기있는 인터뷰 질문은 상속, 다형성, 접근 자 등에 관한 것입니다.

OO가 정말 중요합니까? 나는 C에서 프로그래밍 작업에 대한 인터뷰를했고 인터뷰의 절반은 OO였습니다.

실제 응용 프로그램을 개발하는 실제 환경에서는 거의 항상 객체 방향이 사용됩니까? 다형성과 같은 주요 기능이 많이 사용됩니까?

내 질문은 내 약점 중 하나에서 비롯된 것 같습니다. 나는 OO에 대해 알고 있지만, 그것을 내 프로그램에 많이 포함시킬 수없는 것 같습니다.


3
그러나 모든 것이 손실되지는 않습니다. 문제가 :)를 해결하는 첫 번째 단계가 있습니다 인식
엘리시움 먹어

37
정확히 왜 OO가 유용한 개념인지 이해하는 데 몇 년이 걸렸습니다. 나는 모든 기술적 부분을 이해할 수 있었지만 그 유용한 것을 찾을 수 없었습니다. 내가 개는 포유류 동물을 확장 확장과 함께 표시 봤는데 그 많은 바보 같은 예에서이었다고 생각한다 ... 내 눈을 뜨게 무엇, OO 디자인 패턴, 특히 수신기 (일명 옵저버)과 전략 패턴에보고했다
Mchl

1
그렇습니다. 솔직히
quant_dev

6
Thorbjørn Ravn Andersen의 답변을 참조하십시오. 좋은 프로그래머가 되려면 모듈 성과 API 디자인을 알아야합니다. 업계의 모든 프로그래머가 좋은 것은 아니지만 대부분 OOP를 사용합니다. 불행하게도, OOP와 비 모듈 식 코드 및 열악한 API의 조합은 품질이 낮은 소프트웨어로 이어지고, 이런 종류의 코드는 실제로 작동합니다. 여가 시간에 많은 코드를 작성하지 않으면 "실제"OOP에 대해 잘 모를 것입니다. 괜찮습니다. 당신은이 입장에서 혼자가 아닙니다.
Joh

1
네, 그렇습니다. 그리고 석사 학위를 받았을 때와 같은 OOP에 대한 이해가 있다면 OOP에 대해 전혀 모를 것입니다.
deadalnix

답변:


84

OOP는 유지 관리 / 이해가 불가능하지 않게 프로그램을 확장 할 수있는 패러다임입니다. 이것은 학생들이 거의 2 주에서 최대 2 개월간 지속되는 프로젝트를 거의 수행하지 않기 때문에 거의 얻지 못하는 점입니다.

이 짧은 기간은 특히 프로젝트에 참여한 사람들이 초보자 인 경우 OOP의 목표를 명확하게하기에 충분하지 않습니다. 그러나 대규모 프로젝트에는 일부 모델화를 고수하는 것이 중요합니다. OOP가 유일한 해결책은 아니지만 업계에서 가장 널리 사용됩니다.

사람들이 당신이 OOP를 알고 싶어하는 이유입니다.

나는 거의 모든 주니어 프로그래머들이 모델화와 OOP에 심각한 결함을 가지고 있다고 덧붙였다. 그들 대부분은 클래스를 작성하는 방법을 알고 클래스와 그와 같은 기본적인 것을 상속 받지만 "OOP"로 생각하지 않고 오용하게됩니다. 그렇기 때문에 진지한 채용 담당자가 귀사의 역량이 OOP 도메인에 있는지 항상 확인해야합니다.

이런 것들이 학교에서 배우지 않기 때문에, 서로 다른 응시자들 사이에 지식이 엄청나게 변합니다. 그리고 정직하자 : OOP에 대한 지식이 부족한 사람은 대규모 프로젝트에서 작업 할 수 있다고 생각하지 않습니다. 단순히 코드를 작성하는 것보다 리드 개발자가 이러한 사람들을 관리하는 데 더 많은 시간이 필요하기 때문입니다.

아직 "OOP"를 생각하지 않는다면, 그것에 대해 책을 읽고 실제로 큰 프로젝트가없는 회사에 적용 할 것을 제안합니다. 고용주를 위해 유용한 일을 계속하는 OOP에 익숙해지기 위해 (그리고 당신이 급여를 제공하는 한, 이것은 당신에게도 유용 할 것입니다).

편집 : 하, 그리고 나는 C에서 OOP 코드를 이미 작성했다고 덧붙였습니다 .C의 가장 일반적인 사용법이 아니더라도, 이것은 강력한 지식으로 가능합니다. vtable을 수동으로 빌드하면됩니다.

그리고 OOP 기술 뒤에는 소프트웨어 디자인이 숨겨져 있습니다. 소프트웨어 디자인은 다른 언어와 마찬가지로 C에서 정말 유용합니다. 많은 채용 담당자가 귀하의 소프트웨어 설계 역량을 테스트 할 것이며 OOP 질문은 그에 대한 것이지만 여기서 OOP가 테스트되는 것은 아닙니다. 이것이 C 직업에 대해서도 그러한 질문을하는 이유입니다.


2
그리고 예 .. 나는 이전 의견에서 썼 듯이 OOP를 높이기 위해 더 큰 프로젝트를 진행해야한다고 생각합니다. :)
ale

5
VOP가 OOP 일 필요는 없습니다. structC에서 그 구조에서 작동하는 단순히 사용 하고 함수는 OOP입니다.
edA-qa mort-ora-y

2
@ edA-qa mort-ora-y 구조체는 OOP 기능을 제공하지 않습니다. 다형성? 무관심? 그게 당신에게 뭔가를 의미합니까? 그렇다면 vtable없이 가상 함수를 어떻게 구현합니까?
deadalnix

2
@ deadalnix : .NET 및 Java가 다중 상속을 수행하는 것과 동일한 방식으로 구현합니다. 첫 번째 C ++ 컴파일러는 전혀 컴파일러가 아니며 C ++ 코드를 가져 와서 C 컴파일러로 전달 된 C 코드로 변환 한 번역가였습니다. 구글 "CFront".
gbjbaanb

3
Java와; NET은 다중 상속을 수행하지 않습니다. 그리고 그렇습니다. C ++는 C에서 자동으로 번역 가능하지만 이것은 vtable을 사용하는 문제와는 완전히 관련이 없습니다. 실제로 vtable 없이는 가상 함수를 구현할 수 없습니다.
deadalnix

38

컴퓨터 프로그래밍의 압도적 인 문제는 복잡성을 처리하는 것이며 현대 프로그램은 실제로 매우 복잡 할 수 있으며 이는 증가하는 것처럼 보입니다.

사소한 컴퓨터 프로그램의 소프트웨어 엔지니어링에서 수행되는 대부분의 작업은 길들이기 복잡성에 중점을 두어 평생 학습에 대한 헌신없이 가능한 많은 사람들이 액세스 할 수 있도록합니다.

예 :

  • 모듈화 : 각 모듈은 네트워크 모듈 버퍼를 직접 조작 할 수있는 마우스 아이콘 그리기 라우팅 대신 다른 모듈에 대해서만 조금만 알고있는 코드 모듈을 사용하여 프로그램을 개념적으로 간단하게 만듭니다.
  • API : API 뒤의 복잡한 프로그램에 대한 간단한 사용 경로를 제공합니다. 파일을 열 때 네트워크 공유가 USB 디스크와 다르게 처리되는 것을 신경 쓰지 않습니다. API는 동일합니다.
  • 객체 방향. 이를 통해 기존 코드를 재사용하고 추가 한 새 코드로 투명하게 작동하면서 모든 기본 복잡성을 숨길 수 있습니다.

다시 말해, 사소하지 않은 소프트웨어를 혼자 또는 다른 사람과 함께 사용하려면 많은 트릭을 알아야합니다.


7
나는 모듈성, API 및 OO 사이에 차이를 만든 것을 좋아합니다. 저는 소프트웨어 산업에서 OO가이 모든 것을 의미한다는 광범위한 오해가 있다고 생각합니다.
Joh

3
OO 자체를 아는 것조차 어려운 요구 사항은 아니지만 특정 영역 (C 또는 Haskell)에서는 절차 적 및 기능적 패러다임으로 충분합니다. 여전히 모듈화 및 API 디자인을 배워야합니다.
Raynos

@Raynos, C에는 OO가 본질적으로하는 일을 명시 적으로 수행 할 수있는 함수 포인터가 있습니다. 마찬가지로 Haskell은 패턴 일치를 사용하여 Java에서 컴파일러가하는 일을 명시 적으로 수행합니다.

@ThorbjornRavnAndersen OO 스타일 C와 Haskell을 작성하는 것은 약간의 틈새입니다. 나는 단지 코드 재사용이 절차적이고 기능적인 패러다임에서 이루어질 수 있다고 말하고 있습니다.
Raynos

3
@mathepic 나는 OO haskell (또는 심지어 존재하는지 여부)을 써야한다고 말하지 않습니다. 나는 당신이 OO를 알 필요가 없다고 말하고있었습니다. 복잡성을 처리하는 다른 방법이 있습니다 (FP)
Raynos

14

그렇습니다. 상업 개발에 가장 많이 사용되는 두 가지 개발 플랫폼 (Java 및 .NET)이 객체 지향적이므로 OO가 많이 사용됩니다 (다형성, 상속 및 기타 모든 것 포함).

기업은 기술로서 객체 지향에 특별히 신경을 쓰지 않습니다. 이것은 이데올로기가 아니며, IT 전략과 일치하는 방식으로 문제에 대한 솔루션을 개발할 수있는 사람들을 염려합니다.

그러나 나는 그것이 약하다는 느낌에 대해 너무 걱정하지 않을 것입니다. 교육을 무시하지 않으면 서 상업 세계의 대부분의 사람들은 프로그래머가 대학을 떠나는 기사를 완성 된 기사로 보지 않습니다. 당신은 여전히 ​​배워야 할 많은 것들을 가지고 있으며 이해합니다 (아마도 학생들보다 학생들이 더 낫습니다).


2
OO에 대해 '관심이없는'회사에 대해 문의해야합니다. 우수한 회사는 재사용 가능 / 유지 보수 가능한 코드베이스를 관리하며 OO 패턴이이를 인식하는 방법입니다.
HorusKol

1
@HorusKol-그러나 Perl, Cobol 및 Visual Basic은 모두 상업적으로 성공했지만 Smalltalk는 그렇지 못했습니다. 유지 관리 가능한 코드와 같은 올바른 회사이지만 절대적인 요구 사항은 아니며 다른 요소와 함께 가중치를 부여합니다.
존 홉킨스

코볼은 OO 이전에있었습니다. 스몰 토크에 대해서는 언급 할 수 없지만, 픽업하지 않으면 문제가 있었을 것이라고 생각합니다.
HorusKol

1
@HorusKol-실제로 Cobol과 OO는 거의 같은 시간 (50 년대)에 존재했지만 우리가 OO가 70 년대 또는 1980 년대까지 실제로 잡기 시작하지 않았다고 가정하더라도 (당신이 C ++을 기다리는 경우) 90 년대 후반 (자바와 함께)까지 회사에 큰 변화가 없었던 이유는 무엇인가? 대답은 OO 이외의 유지 관리 가능한 코드 기반을 갖는 방법이 있다는 것입니다. 회사는 유지 관리 가능한 코드를 걱정하지만 고양이를 껍질을 벗기는 방법은 하나 이상이며 OO가 유일한 해결책은 아닙니다.
존 홉킨스

플랫폼 자체를 OO라고 부르는 것이 이상합니다. Clojure는 OO가 아닙니다. 스칼라는 내가 생각하는 OO 요소가 있지만 기능적으로 가장 잘 사용됩니다. F #도 같은 거래입니다. F #에서 OO 코드를 작성하는 것은 더럽습니다.
사라

7

실제와 마찬가지로 실제 프로그래밍은 이론과 다릅니다.

예, OO 패러다임을 세련되게 유지하고 항상 마음 뒤에두면 관리 가능하고 이해 가능하며 쉽게 확장 가능한 코드를 작성하는 것이 좋습니다.

불행히도 실제 세계에는 다음이 있습니다.

  • 프로젝트 시간 압력
  • 절차 지향적 인 팀 멤버
  • 위치가 다른 팀, 여러 공급 업체
  • 오리엔테이션이없는 레거시 코드
  • 그것이 작동하는 한 코드 작성 방법에 대해 약간의 관심
  • 코드가 작동하지 않더라도 동기 부여는 "OO"가 아니라 코드를 수정하는 것입니다.
  • 단순히 좋은 OO를 할 수없는 모듈, 플랫폼 제한, 프레임 워크

실제 작업에서는 위의 문제로 작업해야합니다. 이건 소리가 들린다. 그러나 이것을 머리 위로 취급하십시오. 고용 회사는 고용하는 동안 OO를 너무 중요하게 생각합니다. 왜 그런지 쉽게 알 수 있습니다. 그들이 후보자를 테스트 할 수있는 유일한 방법은 OO에 대한 이해를 묻는 것입니다. 안타깝게도 많은 응시자들이 인터뷰를 시작하기 전에 이러한 질문에 답하기 만하면됩니다.

실제 OO가 느려집니다. 시간이 지남에 따라 계속 읽고 계속 개선하면 도움이됩니다.


6

학사 학위를 마쳤을 때와 같은 느낌이 들었고 OOP가 실제 응용 프로그램과 관련이있는 이유와 방법을 보여주는 훌륭한 책은 Head First : Design Patterns 입니다. 나는 당신이 엿보기를 정말로 추천합니다. 그것은 정말로 재미있는 방식으로 쓰여졌으며, 끊임없이 변화하는 더 큰 규모의 시스템으로 작업 할 때 왜 OOP 접근 방식이 바람직한 지에 대한 많은 유효한 요점을 만듭니다.


나는 유일한 사람이 아니라 다행입니다! 감사합니다 .. 나는 그 책을 살펴볼 것입니다 :).
ale

6

C의 일부 작업의 경우에도 Linux 커널의 객체 지향 디자인에 대한 최신 기사에서 알 수 있듯이 객체 지향 디자인을 알아야 할 수도 있습니다 (컴파일러가 직접 수행 한 것보다 더 좋을 수도 있습니다). ( 제 1 , 제 2 부 )

GTK +는 또한 많은 객체 지향 디자인 패턴을 사용합니다.


4

OO는 모든 것입니다. OO는 도시를 건설 할 수 있지만 절차 적 프로그램은 벽돌이라는 의견에 동의하지 않습니다.

비유의 형태로 내 대답을 제시하려면, 일반은 물건이 필요하고, 군인은 절차가 필요합니다. 일단 OO로 충분히 드릴 다운하면 절차를 찾게되고, 그것이 당신의 전문 지식이고 충분히 능숙하다면 OO에 대해 걱정하지 마십시오. 누군가가이 OO 체스 게임 코드를 작성하는 것이 쉬워집니다 :

-findBestMove
-makeBestMove
-waitForPlayerInput

그러나 누군가가 -findBestMove 뒤에 코드를 작성해야하며 이것이 단순한 것이 아니라는 것을 확신 할 수 있습니다.

foreach $move (@moves){
    $bestMove = ($move > $bestMove ? $move : $bestMove)
}
return $bestMove

반면에 OO 코드를 읽는 방법을 모른다면 걱정하십시오. 코드가 일종의 객체를 망칠 것이라고 확신 할 수 있기 때문입니다. 12000 글로벌 vars와 1200 라인 "모듈"의 포트란 레거시 베헤모스에서 현재 작업하지 않는 한.


4

존 홉킨스 :

그렇습니다. 상업 개발에 가장 많이 사용되는 두 가지 개발 플랫폼 (Java 및 .NET)이 객체 지향적이므로 OO가 많이 사용됩니다 (다형성, 상속 및 기타 모든 것 포함).

내가 말하려고하는 것은 거의 아니지만 Java와 .Net이 아니며 C ++은 어디에나 있으며 Objective-C는 OSX에 있으며 모든 멋진 아이들은 Ruby 또는 Python을 사용하고 있습니다. 더 많은 객체 지향에 중점을 둡니다. 많은 새로운 언어가 다중 패러다임이므로 F #과 같은 것이 주로 기능적 언어이지만 객체 방향도 지원합니다. 그것은 어디에나 있으며, 최소한 약간의 이해가 있으면 매우 유용합니다. 대학 과정을 수료했다는 것은 현실 세계에서 코드 개발에 대해 배울 준비가 된 것입니다.


3

나는 오랫동안 프로그래밍을 해왔고, OO의 개념은 C로 프로그래밍 할 때도 유용하다는 것을 알았습니다. 테스트를 해보더라도 그 개념을 아주 자세하게 설명하지는 못할 것입니다. 언젠가는 초보적인 언어이지만 OO 언어를 만들어 개념에 대한 내 머리를 얻고 새로운 각도에서 OO의 즐거움을 발견했습니다.

BTW, C ++은 OO를 엄청나게 추악하게 만든 반면 Objective C는 올바르게 수행합니다.

인터뷰에 관해서, 그들은 테이블의 양쪽에서 공포 쇼가되었습니다. 대부분의 인터뷰 대상자들은 그들에게 매우 당황합니다. 대부분의 채용 관리자는 기본 프로그래밍 테스트조차도 실패하는 사람이 몇 명인지 놀랐습니다.

즉, 소프트웨어 산업에는 현재 아무 것도 모르지만 미래의 직원들로부터 세상을 기대하는 거대한 백 주머니가 있습니다.


C ++은 다중 패러다임 언어이지만 OO를 잘 처리합니다.
Nikko

1
C ++은 당신에게 큰 추악한 혼란을 줄 수있는 능력을 제공한다고 말하고 싶습니다. 올바르게 수행하면 아름다움이 단순합니다.
마틴 요크

기본을 건너 뛰면 항상 큰 혼란이 발생합니다. C ++에는 이해해야 할 기본 사항이 많이 있습니다. 이것이 큰 프로그램에 C ++를 사용할 수있는 이유입니다. 필요합니다.
tp1

@Ponk : BTW, C ++은 OO를 엄청나게 추악하게 만든 반면 Objective C는 올바르게 수행합니다. -나는 Objective C를 시도하지 않았으므로 의심 할 이유가 없지만 더 철저하고 설득력있는 주장을 어디에서 찾을 수 있습니까?
Jim G.

3

Learning OOP는 소프트웨어 개발 학습만큼 유용하지 않습니다. Code Complete 2를 읽으십시오 .

물론 유용한 도구이지만 OOP 자체는 실제로 작습니다. 일반적으로 회사 및 채용 담당자가 "OOP"라고 말하면 "소프트웨어 개발"을 의미합니다. 일반적인 용어로 사용되고 있습니다.

실제 채용 담당자는 소프트웨어 개발 방법을 알고 "OOP에 3 년이 있습니다"체크 박스와 일치하는 방법의 차이점을 알려줍니다.


예, 이런 맥락에서 OOP는 "이 역할을 위해 5 년의 GUI 경험이 필요합니다"와 같이 GUI와 같습니다.
gbjbaanb

1

다른 사람들이 언급했듯이 대답은 '그렇다'입니다.

그러나 비 OO 절차 적 스파게티 코드 더미에서 작업하려면 해당 코드도 찾을 수 있습니다. 나는 당신이 OO 작업을 선호한다고 생각합니다.

편집 : 건슬링거의 냉소와 유머 감각을 용서하십시오. Raynos가 말했듯이 OO라는 것이 좋다고해서 좋은 것은 아닙니다. OO를 올바르게 적용하려면 실제 작업과 생각이 필요합니다. 인스턴스가 있다고해서 앱이 제대로 만들어 졌다는 의미는 아닙니다. 반대로, 절차 코드가 잘 작성되어 있다고 확신합니다. 90 년대와 2000 년대 기업 IT 상점에서 경험 한 바에 따르면, 많은 잘못된 코드가 작성되어 있으며 여전히 존재합니다. 그러나 OP의 질문에 더 가깝게, 기회가 주어지면 더 똑똑한 개발자가 더 많은 OO 시스템으로 이동하고 있음을 알았습니다.


3
비 OO 코드를 암시하는 경우 -1은 스파게티입니다. 그리고 OO는 흑 마법에 의해 "스파게티가 아님"을 잘 만듭니다
Raynos

@Raynos 그것은 공정한 포인트입니다. 그리고 OO를 사용하지 않는다고해서 그것이 나쁘다는 것을 의미하지는 않습니다. 편집하겠습니다.
Bernard Dy

또한 절차 적 절차와 절차 적 / OOP뿐만 아니라 기능적 패러다임도 있습니다.
대안

색종이처럼 물건이 흩어져있는 유지 관리 할 수없는 OO 앱을 작업했습니다. OOP는 마법의 총알이 아니며 코드를보다 체계적으로 정의하는 방법입니다.
gbjbaanb

2
예, 천 번 예! 편집 내용을 참조하십시오. 내 의견은 실제로 절차 적 또는 OO의 특정 문제보다 내가 작업 한 즐거움이있는 가난한 레거시 코드의 수많은 사례에서 더 미늘했습니다. 그러나 내가 선택했다면, 잘 설계된 절차 적 시스템보다는 잘 설계된 OO 시스템에서 일하고 싶습니다. 매일 디자인이 불량한 시스템에 대해 잘 설계된 시스템.
Bernard Dy

1

OO는 다른 기술이 구축되는 기초입니다. 핵심은 먼저 유형 (클래스)과 해당 유형의 인스턴스의 차이점을 완전히 이해하는 것입니다. 일단 비전을 잡으면 나머지를 다시 읽어야하기 때문에 (이후에 명확하게 생각할 것임) 완전히 이해하지 않고 계속 읽으려고하지 마십시오.

일단 당신이 그것을 끊으면, 당신은 그것 없이는 결코 원하지 않을 것입니다. 캡슐화, 패턴, 프레임 워크 또는 그 밖의 것에 관해서는 순수 주의자가 아닙니다. 직장에서 다양한 견해와 개념에 적응해야합니다. 나는 내 자신의 이전 직업 경험을 나열 할 것입니다 :

한 회사에서 동료들은 가능한 한 게으른 로딩 (빈 생성자, 모든 곳에서 null 값을 확인 해야하는 부피가 큰 속성)을 원했습니다. 그들은 짧은 수명의 웹 기반 서버 측 객체를 구축하고있었습니다.

다음 일은 완전히 반대였습니다. 개체는 데스크톱 (Excel 기반) 응용 프로그램 내부에있었습니다. 가능한 한 많은 생성자가 생성자 (또는 많은 생성자 과부하 중 하나)에 있어야합니다. 빈 객체에는 존재 권한이 없기 때문에 빈 생성자는 허용되지 않았습니다 (지속성이 상당히 어려웠습니다). 또한 나는 스타일 코드를 통과하지 못하면 코드를 체크인 할 수 없기 때문에 "코딩 스타일 표준"(괄호를 열고 주석 뒤에 공백을 추가하는 위치 등)에 적응해야했습니다.

현재 개발자 중 누구도 OO를 이해하려고 시도하지 않은 회사에서 일하고 있습니다. 얼마나 실망 스러웠는지 표현하기가 어렵습니다. Grep 기술을 향상시켜야했습니다. 사실 선택한 텍스트에서 Grep을 수행하기 위해 F12 키에 HotScripts 매크로가 할당되어 있습니다. 나는 다른 좌절감을 극복 할 것이다 ...

OO 기술을 습득하면 스파게티에 거의 알레르기가 있습니다! 그러나, 모든 경우에, OO- 아니든, 참을성 있고 적응해야합니다. "버려두고 다시 시작"하는 것을 꺼려하십시오. 튀어 나올 때 상사는 오히려 당신을 선택합니다. 불행히도 "모니 만들기"는 우아한 코드보다 중요합니다.

긴 답변에 대해 죄송하지만 귀하의 질문의 범위를 대부분 커버하려고했습니다 :-)


당신의 이야기에 대단히 감사합니다 .. 나는 그것을 읽는 것을 즐겼습니다! 현재 C ++ 프로젝트를 진행 중이며이 기회를 사용하여 OO 기술을 사용할 수있는 가능한 방법을 생각하고 있습니다. 지금은 잘되고 있습니다 :). 당신이 대답 +1. 감사합니다.
ale

1

OOP는 그 자체로 중요하지 않지만 그로 인해 필요한 것 때문에 중요합니다. 추상화하고 격리하고 그룹화하는 기능을 다루는 것은 상호 작용하는 데 필요한 부분 만 노출시킵니다.

이것은 "모듈화"라는 일반적인 엔지니어링 기술로, 모든 단일 세부 사항을 높은 수준으로 관리하지 않고도 간단한 시스템을 통합하여 복잡한 시스템을 생성 할 수 있으며 구성 요소를 정확하게 교체하지 않아도 구성 요소를 교체 할 수 있어야합니다. 같은.

이러한 "엔지니어링 개념"은 소프트웨어 제품 자체가 "단일 개발자 기능"보다 커졌을 때부터 소프트웨어 개발에 반영되도록 노력해 왔으며, 따라서 개발자가 독립적 인 부분을 작업하고 그 부분을 함께 상호 작용하십시오.

그러나 이러한 원칙은 반드시 OOP에서만 찾을 수있는 것은 아닙니다 (계산 이론이 유효하며 이러한 결과를 도출 할 수있는 방법은 무한합니다).

OOP는 단순히 그 정의 (패턴)에 대한 정의는보다 정확하고 정교한 개념화 (모듈, 캡슐화, 대체 등)하는 일반적인 용어로주고, 함께 그 물건을 넣어 성공적인 시도 할 수 프로그래밍 언어에 맞게.

OOP를 먼저 " 언어 기능 "이 아니라 소프트웨어 엔지니어가 소프트웨어 디자인에 접근하게 하는 " 공통 어휘집 "으로 생각하십시오.

주어진 언어에 어휘집을 직접적으로 강제하는 기본 요소가 있거나없는 예를 들어, 누가 그렇게하지 말아야하는지에 따라 "캡슐"이 실수로 열리지 않도록하는 것은 OOP 디자인의 이차적 인 측면이다. 그렇기 때문에 언어 자체가 직접적인 지원을 제공하지 않더라도 큰 C 프로젝트조차 종종 OOP로 "관리되는"이유입니다.

프로젝트 규모가 단일 개발자 기능에 머물러서 자신이하는 모든 것을 이해하고 추적 할 때까지 (실제로는 "오버 헤드"로 보일 수 있음) 또는 무언가를 개발하는 소규모 그룹으로 파악 될 때까지 인식 할 수없는 모든 이점 짧은 기간. 그리고 이것이 "언어 기능"이라는 용어로 OOP를 공부 한 후배들이 나쁜 설계 코드를 잘못 해석하는 주된 이유입니다.

OOP가 언어에 적합한 방법은 언어 설계자가 OOP 원칙을 자체 구성에서 해석하는 방법에 따라 다릅니다.

따라서 C ++의 "캡슐화"는 "개인 멤버"(및 "캡슐"은 클래스가 됨)가되고, "대체"는 가상 함수 재정의 또는 템플릿 매개 변수화 / 전문화 등이되고 D에서는 캡슐은 "모듈"입니다 (그리고 대체는 계속됩니다) 클래스 등을 통해), 따라서 특정 패러다임 또는 패턴을 다른 언어가 아닌 특정 언어로 직접 사용할 수 있도록합니다.

채용 담당자가 OOP 질문을하는 것은 미래의 대규모 프로젝트 및 개발을 위해 소프트웨어 설계를 추상화하고 이해하는 능력을 확인하는 것입니다. OOP, 그들은 단지 "사전"이기 때문에 당신과 다른 사람들이 더 일반적인 것에 대해 이야기하거나 특정 구현으로 구체화 할 수 있도록 알고 있습니다.


0

객체 지향 언어는 객체 지향 디자인을 코드에 유지하는 데 도움이됩니다. 그러나 이러한 디자인은 다른 패러다임 언어로 얻을 수 있다는 것도 사실입니다.

게이츠 씨가 그의 회사를 올바르게 시작했다면 우리는 아마도 일자리를 신청하기 전에 SCHEME을 공부했을 것입니다.


Scheme은 Microsoft와 같은 해에 나타났습니다 (하지만 그 전에 다른 LISP가 있었음에도 불구하고). 또한 Java와 C #은 Alan Kay, 특히 Smalltalk 및 Simula와 C ++의 성공에 많은 성공을 거두었습니다.
JasonTrue

0

짧은 대답은 예입니다

왜 중요한지에 대한 느낌이 들거나 딜레마가 더 긴 버전은 어떤 목적을 달성하는 프로젝트 또는 구현에서 작업하지 않았기 때문입니다. 강의실에서 자동차에 대한 예를 들어 자동차, 트럭으로 확장하는 것이 완벽하게 유효하지만 소프트웨어 개발에 뛰어들 때 일부 작업의 용이성을 목표로 한 솔루션입니다. 지금은 있었다되지 않은 경우 OO우리가 가진 것 모두가 코드베이스에 걸쳐 유사한 코드를 작성하거나매일 바퀴를 재발 명. 무언가를 고치기 위해 그러한 코드베이스에 뛰어 들었다면 어떤 혼란이 생길지 상상해보십시오. 강의실 예는 모호한 정의 또는 수행 방법 / 이유에 대한 표현입니다. 실제 테스트는 앱을 빌드 할 때 시작됩니다. 의심 할 여지없이 앱을 사용할 수는 있지만 명확하고 간결한 사용법으로 인해 정신이 무겁습니다. 따라서이 약한 영역에서 작업을 시작하는 것이 가장 좋습니다. 악몽 코드를 제거하십시오.


0

따라 다릅니다. 프로그래밍 세계의 링구아 프랑카이기 때문에 OO를 알아야하는 한 가지 이유. 다른 대답에서 알 수 있듯이 거의 모든 주요 언어는 어떤 방식 으로든 OO입니다. 이는 기본적으로 고용 가능한 모든 회사가 OO 언어를 사용하고 있음을 의미합니다. OCaml 프로그래머를 고용 한 적이 있습니까? 그것은 불가능; 인재 풀이 너무 작습니다. OCaml을 사용하여 회사를 시작한 후 회사가 성공하면 프로그래머를 충분히 빨리 고용 할 수 없어 업무를 마칠 수 있습니다. 따라서 프로그래머가 3 명 이상인 거의 모든 회사는 OO 언어를 사용하며 동료와 의사 소통하고 플랫폼 라이브러리를 사용하려면 OO를 이해해야합니다.

회사가 사용하는 특정 언어에 따라 상속 및 다형성은 매우 중요하거나 적당히 관련이 있습니다. 10 개의 GoF 디자인 패턴과 의존성 주입 프레임 워크를 제거하지 않으면 Java에서 아무것도 할 수 없습니다. Java는 가장 널리 사용되는 언어 중 하나이므로 Java를 사용하는 많은 회사에서 OO 원칙이 실제로 중요합니다.

회사가 스칼라 또는 C #과 같은 람다 및 함수 포인터가있는 현대식 하이브리드 OO / 기능 언어를 사용하는 경우 상속이 갑자기 중요도가 낮아집니다. 의식. 그러나 사용하는 대부분의 라이브러리는 OO 방식으로 작성되므로 여전히 OO 작업을 수행 할 수 있어야합니다.

상속과 다형성 회사에 중요 하지 않은 경우 다음과 같은 이유로 여전히 OO 질문을받을 가능성이 있습니다.

  • 프로그래밍에 대해 전혀 모르고 점검 목록에서 질문을하는 HR 담당자와 인터뷰를합니다. X의 3 년, 멀티 태스킹 등이 있습니까?
  • 당신은 바위 아래에 살고 있지 않은지 확인하려는 엔지니어와 인터뷰를합니다. OO는 링구아 프랑카이므로 이에 대해 약간의 질문을 받게됩니다.
  • 인터뷰에 능숙하지 않은 엔지니어가 인터뷰를합니다. 일반적으로 엔지니어는 사소하고 복잡한 것을 좋아하기 때문에 다형성, 상속 및 GoF 디자인 패턴에 대한 많은 질문을 받게됩니다.

왜 downvote?
dan

-1

한마디로 "예".

이론을 알고 있다고 생각할 수도 있지만 코드를 작성하여 실용화해야합니다. 문자 그대로 수천 개의 예제와 연습이 온라인으로 제공됩니다.

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