C ++ "메소드"( "멤버 함수"와 비교)에 대해 말하는 것은 얼마나 잘못된가?


19

나는 이해 가에 따라 C ++ 스펙 거기에 "방법"같은 것은 없으며, 일부 (대부분? 대부분?) C ++ 프로그래머가 자바주의로 "방법"을 고려하십시오. 반면에 C ++ 포럼에서도 사람들은 비틀림없이 메소드에 대해 이야기하는 것 같습니다. 이 용어와 관련하여 알려진 규칙이나 일반적인 관행을 찾고 있습니다.

C ++ 및 Java 버전이 모두있는 API를 문서화하고 있습니다. 개발자는 실제로 포트와 테스트의 편의를 위해 클래스와 메소드 / 멤버 기능 이름을 둘 사이에서 동일하게 유지했습니다. 이 때문에 이러한 API에 대해 문서화해야 할 사항 중 일부는 언어 선택의 "위"에 있습니다. baz () 및 mumble () ... 메소드를 사용하여 Foos 및 Bars에 대해 일반적 으로 이야기 할 수 있어야 합니까?

Java 프로그래머가 자연스럽게 간주하는 방법에 대해 이야기하면 C ++ 프로그래머는 아마 이해할 수 있지만 일부는 잘못된 것으로 간주합니다. 내 질문은 : 이것이 실제로 얼마나 가혹한가 ? C ++ 관련 함수와 달리 "일반 OOP"컨텍스트에서 C ++ 멤버 함수는 일반적으로 어떻게 설명됩니까? 어느 언어에서나 올바르지 않은 방식으로 멤버 함수에 대해 이야기하는 더 좋은 방법이 있습니까? ( "멤버 함수"는 약간 장황합니다.)

이것은 여론 조사가 아닙니다. 이 문제를 해결하기 위해 실제 규칙 이나 일반적인 관행 이 있는지 확인하려고합니다 .

나는 이 질문을 알고 있지만 일반적으로 OOP에 관한 것이며 특정 언어에 대해서는 묻지 않습니다.


문의하기 전에 도움말 센터를 읽고 태그 목록을 검토했습니다. 여기에 이것을 질문하여 내가 뭔가 잘못 했습니까?
Monica Cellio

가까운 투표는 주로 의견에 근거한 것입니다. 이것은 어떤 SE 사이트에서도 사람들이 당신을 화나게 할 것인지 아닌지, 어떤 진폭에 대해 권위적으로 말하는 것이 어렵 기 때문에 모든 SE 사이트에서 얼마나 잘 작동하는지 확실하지 않습니다. 어떤 사람은 그것이 완전히 괜찮다고 생각할 수도 있고 다른 사람은 Q에 설명 된 것처럼 끔찍한 용어의 위반이라고 생각할 것입니다. 왜냐하면 이것 때문에 상대적으로 의견을 제시하는 것입니다.
Jimmy Hoffa

2
메소드의 OOP 개념은 C ++의 "가상 멤버 함수"에 가장 깔끔하게 매핑되지만 같은 것입니다. 메소드가 아니라 함수 인 "정적 메소드"와 같은 Java 측에는 더 나쁜 용어가 있습니다. 언어와 무관 한 단어 인 "방법"을 계속 사용하면 모든 사람이 자신의 의미를 이해할 것입니다. 누군가 C ++에 메소드가 없다고 주장하면 실제로 잘못되고 매우 성가신 자전거 흘림입니다.
amon

1
@JimmyHoffa가 더 낫습니까?
Monica Cellio

3
언어 간 API 문서에서 메소드를 호출하십시오. "프로그래밍 언어에 무관심하게 유지하기 위해이 API 문서는 method라는 용어를 사용하여 C ++ 멤버 함수를 참조합니다."와 같은 문구를 소개 텍스트에 포함시킬 수 있습니다.
Brandin

답변:


11

컨벤션 섹션 과 같은 문서의 소개 부분에 설명을 포함시키지 않는 이유는 무엇 입니까? 문서에 사용 된 "메소드"라는 용어는 일반적인 메소드 의미 (Java), 멤버 함수 (C ++)를 의미한다고 설명 할 수 있습니다. 문서는 모든 구현에 적용되므로.


이것이 내가 한 일이며, 지금까지 사람들은 괜찮습니다. 제안 해 주셔서 감사합니다.
Monica Cellio

15

글쎄, 당신은 그것을 위해 처형되지 않을 것입니다.

C ++ 세계에서의 불만은 실제적인 정확성의 문제가 아니라 모호성 중 하나입니다. 당신이 말하는 도메인에 따라 광야에는 여러 종류의 "방법" 이 있습니다. 우리 중 많은 사람들 이 나중에 오해를 피하기 위해 표준 용어를 고수하는 것을 선호합니다. 이는 대략 "정적 / [정적] [순수] 가상 / [가상] 구성원 / [무료] 기능을 의미합니다.

당신이 대신 설명서의 "방법"을 작성하는 경우, 일부 C ++ 프로그래머는 정말 당신이 익숙하지 않다면 당신이에 대한 말을하는지 지우거나 걱정 아니에요 불평 할 수있다 C ++ 규칙, 어떻게 다른 사람을 누락?

그러나 나는 이것이 심지어 일이라고 생각하지 않는 수백만의 전문 C ++ 프로그래머가 있다고 확신합니다. 큰 세상입니다.

당신은 그것을 위해 처형되지 않을 것입니다.


3

Eiffel 은이를 루틴 또는 피처 라고하고 , C ++는 멤버 함수 라고하며, C ++ 전후에는 컴퓨팅의 전체 역사에서 생성 된 다른 모든 OO 언어를 Methods 라고 부릅니다 . 따라서 후자는 일반적으로 C ++ (및 에펠) 프로그래머는 실제로 Simula, Smalltalk, Self, Objective-C, Newspeak, Java, C #, VB.NET, PHP, Python, Ruby, ECMAScript / JavaScript, Scala, CoffeeScript에 대해 들어 본 적이 없다면 ...


요점을 제외하고는 종종 해당 도메인에서 미묘하게 다른 것을 의미한다는 것입니다. 이것이 OP가 도메인 별 용어를 고수하는 것이 더 나은지 묻는 이유와 정답이 "예"인 이유입니다.
Monica와 Lightness Races

클래스가없는 JavaScript를 인용하여 내 요점을 입증했습니다 (OO는 프로토 타입 기반입니다). 그렇다면 JavaScript 메소드는 다른 곳의 메소드와 어떻게 동일 할 수 있습니까? 당신이 주장하는 상호 명료성은 실제로 존재하지 않습니다.
Monica와의 가벼움 경주

프로토 타입 기반 OOP는 차이가 없습니다. OOP는 객체가 메시지를 통해 통신하는 개념 (서버가 서로에게 요청을 보내는 서버 등)을 기반으로하며, 방법은 특정 객체가 지정된 메시지에 응답하는 방식 (방법)을 나타냅니다. 프로토 타입 OO는 메소드 상속 방법과 관련하여 차이가 있습니다. 더 큰 차이점은 슬롯 기반 (파이썬과 같은) 대 메시지 기반 (루비와 같은) OOP, 그리고 늦은 바인딩 또는 조기 바인딩 여부입니다.
saolof
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.