객체 지향 프로그래밍 : 왜“오리엔트”입니까?


14

나는 게임 프로그래밍 학위를 통해 대부분의 길입니다. 이것은 컴퓨터 과학 학위가 아니기 때문에 많은 이론이 실제 포트폴리오 구축과 JIT 학습으로 보는 것을 선호하여 게임 업계에서 더 중요합니다. 첫 번째 주제는 "객체 지향 프로그래밍 소개"입니다.

이 프로그래밍 문구는 다른 프로그래밍 패러다임에 대해 배울 때까지 귀찮게하지 않았습니다 ( https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms 에서이 목록을 얻습니다 ).

  • 피할 수 없는
  • 기능의
  • 절차 적
  • 구조화
  • 이벤트 중심
  • 객체 지향
  • 선언적
  • 오토마타 기반

나는 이것이 완전한 목록이 아니며, 모든 개념이 동일하지는 않으며, 대부분의 개념이 독점적이지는 않지만, 왜 대부분의 단어가 하나의 단어를 얻는 지 이해하지 못한다. 기능의; 선언적-그러나 객체를 사용한 프로그래밍에 대해 이야기 할 때 해당 객체를 중심 으로 한다는 것을 명확히해야 합니다. 우리는 단지 객체를 사용할 수 있습니까? 우리는 단지 물건을 가질 수 없습니까? 그들이 우리를 안내하는 별로서 왜 우리 를 지향 해야 합니까?

여기 ( https://en.wikipedia.org/wiki/Object-oriented_programming )를 보면 "지향적"이라는 용어가 자체 용어로 사용되는 곳은 없습니다. "개체"만 설명됩니다.

또한 이벤트 주도형이 실제로 사용되는 이유를 알 수 있습니다. 이벤트 프로그래밍은 이미 컨퍼런스를 실행할 때 수행하는 작업이므로 Automata Programming은 로봇 생산 라인을 설정하는 것처럼 들립니다. 거기에 명확한 단어를 추가하는 것이 도움이됩니다.

프로그래밍에서 객체를 사용할 때 수행하는 작업을 설명하기에 객체 프로그래밍이 문구로 충분하지 않은 이유는 무엇입니까?

분명히 내 목소리에서 나는 "지향적"이라는 단어를 좋아하지 않습니다. 법원 기자로서의 시간을 떠올리며 변호사가 "관련"이라는 문구를 언어 적 진드기로 사용한 후에 변호사의 말을 듣게됩니다. 아무 의미도 없었습니다. 그들은 다음에 무엇을 말할지 생각하면서 공기를 채우는 데 사용한 용어 일뿐입니다. 그러나 나는 언어의 변화를 옹호하려는 것이 아니라 그것이 왜 그런지 묻는 것입니다. 누군가가 그것이 역사적으로, 전적인 이유로 그런 식으로 알려지게 된 이유를 안다면 그것은 그 답입니다. 언어 변화를 옹호하는 데 시간을 허비하기로 결정하면 탄약이 될 것입니다.

반면에 언어 나 코드가 객체 를 가리켜 야하는 유용한 이유가있는 경우 , 벨트에 단순히 도구 를 사용하는 것과는 반대로 다른 모든 방향을 배제해야 합니다. 그것에 대해 배우고 싶습니다. 나는 유용한 것들을 배우는 것을 좋아합니다.


11
"객관적으로"또는 "객관적으로"는 실제로 의미하는 것에 대한 올바른 인상을주지 않을 것입니다. ;-)
Doc Brown

나는 "객관화"를 고려했지만 잘못된 분위기를 낼 수도 있다고 결정했습니다.
Excrubulent


1
"객체"는 "지향적"이 아니라 실수라고 생각합니다 우리가 객체 지향이라고 부르는 것은 대개 클래스 지향입니다.
Steve314

1
모든 Phoenix Wright 팬들은 "OBJECTION !! Programming"이라고 부르기를 원하십니까?
Katana314

답변:


24

난 당신이 읽고 생각 의 방법을 간단한 문법 구조에 너무 많이. 우리가 곧 도착하게 될 이유에 따라 다르게 분류 된 패러다임 목록을 살펴보십시오.

  • 피할 수 없는
  • 기능의
  • 절차 적
  • 구조화
  • 선언적
  • 이벤트 중심
  • 오토마타 기반
  • 객체 지향

모든 단어의 공통점은 무엇입니까? 그것들은 "프로그래밍"이라는 단어를 수정하기 때문에 모든 형용사입니다. 또한, "제 국적"을 제외하고는 모두 "천연"형용사가 아니라 "형용사"명사-실제로 패러다임의 핵심을 나타내는 명사 : 기능, 구조, 오토마타, 객체.

명사를 형용하는 방법에는 -al 또는 -ed와 같은 접미사를 사용하거나 하이픈을 사용하여 복합 단어를 만드는 두 가지 방법이 있습니다. Doc Brown이 지적했듯이 이제 "객체"를 형용하는 데 사용할 수있는 접미사는 다른 의미를 갖습니다. 어떤 구성을 떠난다.

그리고 Alan Kay가 그의 복합 형용사 "객체 지향"에 "지향"을 사용하기로 선택한 것은 순전히 우연의 일치 나 취향이라고 생각합니다. "개체 중심"또는 "개체 기반"일 수도 있으며 너무 많이 읽을 수도 있습니다. "구동 된"소리가 건강에 해로운 집착처럼 들리지 않습니까?


1
훌륭한 요점 (당신이 부사가 아닌 형용사를 의미한다고 생각하지만,이 문맥에서 "프로그래밍"은 명사입니다).
JW01

@ JW01 : 죄송합니다, 맞습니다
Michael Borgwardt

"object"라는 단어 자체가 형용사가 아니기 때문에 "oriented"라는 단어는 "object programming"에 다른 의미를 부여합니다. 사실, 나는 "지향적"이 다른 단어들보다 더 많이 선택된 이유는 alliteration을위한 것이라고 말하고 싶다. 또한, 나는 그것에 대해 아무것도 읽지 않았고, 문헌에 완전히 설명되지 않고 의심의 여지가없는이 지향적 인 단어가 있다는 것을 강조하기 위해 과장했습니다. . : P
으스스한

왜 그가 객체에 집착하지 않았는지 궁금해 ... 오, 그래, 그들은 언제 멈출지를 모르는 열광 자일 뿐이다. ;-)
중복 제거기

폴란드 작가 Jerzy Grębosz의 저서 "Symfonia C ++"( "C ++의 Symphony")라는 책이 있는데, 그 저자는 그 구절을 흥미롭게 이해하려고 시도합니다. 객체 지향 "은 코드가 현재 작업중인 객체 (다형 적 행동)에 따라"자체 방향 "을 가질 수 있기 때문입니다. 그는 이것을 "개체"라는 단순한 개념이 데이터 조각으로 존재하는 언어와 구별합니다. 이것이 원래의 의미라는 역사적 증거는 없지만, 사후 설명으로도 설명이 필요합니다.
BarbaraKwarc

18

그러나 객체로 프로그래밍하는 것에 대해 이야기 할 때, 우리는 객체를 중심으로한다는 것을 분명히해야합니다. 우리는 단지 객체를 사용할 수 있습니까? 우리는 단지 물건을 가질 수 없습니까?

솔직히, 그것은 역사의 전복입니다. 함수형 프로그래밍은 실제로 함수형 프로그래밍이고, 선언적 프로그래밍은 실제로 선언 형 프로그래밍입니다 ... 결국 함수를 사용하지 않습니까? 우리는 단지 기능을 가질 수 없습니까?

"객체 지향"은 혀를 더 잘 굴리며 역사적으로 뿌리 깊은 곳입니다.

'방향'은 프로그래밍이 아니라 디자인에 대해 이야기하기 때문에옵니다. 객체를 사용하거나 함수를 사용하거나 이벤트를 사용한다고해서 디자인 방법론이 세 가지를 모두 모델링하여 수행된다는 의미는 아닙니다. 설계 방법론의 방향을 지정함으로써 프로그래머가 설계를 해석하고 확장하는 방법 (모델링이 구현을 채색하는 방법)과 의사 소통하는 데 도움이됩니다.


"object-oriented"는 "pro-active"가 "active"와 본질적으로 동일한 의미를 갖는 것처럼 중복 문구가있는 일종의 정책 설명이라고 할 수 있습니다. 청취자가 의미를 놓치지 않도록하십시오.
Excrubulent

1
우리는 객체 지향 디자인을하고 있습니다. 이것이 언어가 객체 지향적 인 이유입니다. 우리는이 디자인을 표현할 수 있습니다.
K.Steff

1
@Excrubulent 아니오, "지향적"을 추가하면보다 구체적으로됩니다. "객체 지향"은 객체 프로그래밍에 대한 세부 사항을 논의하는 것이 아니라 프로그램을 디자인하여 의미있는 방식으로 객체를 사용하는 방법을 논의하는 것을 의미합니다. "객체 프로그래밍", "함수 프로그래밍"또는 "선언 프로그래밍"은 디자인 원칙 대신 특정 개념 구현에 대해 구체적으로 말하는 것을 의미합니다. "기능적"과 "선언적"은 같은 의미를 전달하려고 시도하는 접미사가있는 단어이지만 "객관적"또는 "객관적"인 객체에는 그다지 의미가 없습니다.
Ilari Kajaste

로 그리고 마이클 Borgwardt 대답 , 단어 "지향"어떤 식 으로든 특별 아닙니다. "구동"또는 "기반"일 수도 있습니다. 중요한 점은 "객체 프로그래밍"이 될 수 없다는 것입니다. (음성 언어는 항상 유동적이기 때문에 설명 할 수는 없습니다.)
Ilari Kajaste

마이클 보그 워드 (Michael Borgwardt)의 답변은 실제로 단어의 의미와 그것이 어구를 어떻게 수정하는지 설명하기 때문에 답을 바꿨습니다.
Excrubulent

2

객체가 패러다임의 매우 중요한 부분임을 설명하는 데 도움이됩니다.

객체 지향 프로그래밍은 기본적으로 ALGOL과 새로운 객체 프로그래밍 기능이 포함 된 Simula에 기반을두고 있습니다. 그리고 그 역사를 유지하면서 오늘날에도 많은 언어 ( '순수한 OO 언어')로 본질적으로 일부 객체가 포함 된 절차적인 프로그램을 코딩하는 것이 가능합니다. 그러나 이것은 숙련 된 개발자가 나쁜 스타일로 간주합니다.

실제로 "객체 지향 방식"을하는 것은 "절차 적 방식"과는 매우 다릅니다. 가장 중요한 개념은 상속과 다형성의 사용입니다. 클래스와 가상 메소드의 작동 방식 을 진정으로 이해하고 내면화 할 때 , 패러다임 전환이라는 많은 경우에 코드를 작성하는 방식이 바뀌는 놀라운 경험입니다. (물론 절차 코드 작성을 시작했다고 가정하자. 요즘 많은 학생들이 Java 또는 C #을 모국어로 직접 사용하고 있으며 IMO는 OO의 이점을 실제로 이해하지 못합니다.)

OO 스타일로 작성된 프로그램에는 객체 만 포함되어 있지 않기 때문에 객체 지향 프로그래밍이라고합니다. 전체 프로그램의 구조는 그들 주위와 그들이 일하는 방식에 기초합니다.


이것은 용어로 "객체 지향 프로그래밍"이 실제로 "객체 프로그래밍"과 근본적으로 다르다는 것을 암시하는 것만 제외하면 Telastyn과 비슷한 대답입니다. 그것들이 어떻게 다른지 설명 할 수 있습니까? 내 말은, OOP는 OP가 같은 기능을 수행 할만큼 느슨한 용어 인 것 같습니다.
Excrubulent

2
요즘 많은 학생들이 Java 또는 C #을 모국어로 사용하고 있으며 IMO는 OO의 이점을 실제로 이해하지 못합니다. -실제로 C ++로 시작했으며 첫 번째 과제에서 여러 객체와 함수를 사용했지만 함수 사용으로 표시되었습니다. 이러한 함수 중 일부는 순전히 기능적이며 객체의 캡슐화에서 전혀 이점을 얻지 못했지만 작동하기 위해 변수에 대한 포인터를 사용하는 다른 함수 (예 : 수정 된 상태 정보)는 일단 만들어지면 호출하기가 훨씬 쉬워졌습니다. 물체에서, 나는 그것의 양면을 보았습니다.
Excrubulent
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.