문제

나는 최근에 내가 "메서드 호출"이라고 부르는 것에 대해 질문을 했습니다.대답은 "메시지"를 참조했습니다.나를 바보처럼 보이게 하지 않는 질문을 표현하려고 노력하는 독학 취미 프로그래머로서 나는 내가 사용하는 용어가 내가 프로그래밍을 배운 방법에 대해 많은 것을 드러낸다는 것을 깨닫고 있습니다.

메소드/메시지/등에 대한 다양한 용어 사이에 차이가 있습니까?OO 프로그래밍에서?유사한 개념을 설명하기 위해 다른 용어를 사용하는 다른 프로그래밍 언어에서 발생하는 차이점입니까?

OO 이전의 언어에서는 반환 값이 예상되는지 여부에 따라 "서브루틴"과 "함수"를 구분하는 경우가 가끔 있었던 것으로 기억하는데, 그때도 이것이 언어별 구분이었습니까?

도움이 되었습니까?

해결책

나는 이것이 언어와 프로그래밍 패러다임에 관한 것임을 발견했습니다.하나의 패러다임인 OOP는 개념적으로 해당 객체에 메시지를 보내는 방법인 멤버 메서드가 있는 객체를 나타냅니다(이 뷰는 예를 들어 UML에 반영됩니다).

또 다른 패러다임인 함수형은 객체 클래스를 포함할 수도 있고 포함하지 않을 수도 있지만, 함수는 작업의 원자 단위입니다.

구조화된 프로그래밍에는 서브루틴이 있었습니다. 접두사 "sub"는 구조를 의미합니다.

명령형 프로그래밍(구조화된 프로그래밍과 많이 겹치지만 사물을 보는 방식이 약간 다름)에서는 세상에 대한 보다 공식적인 관점을 가지므로 '함수'는 일부 작업(종종 수학적)을 나타냅니다.

루브처럼 들리지 않기 위해 해야 할 일은 사용 중인 언어에 대한 언어 참조에서 사용되는 용어를 사용하는 것입니다.

다른 팁

메시지!=방법!=함수

OOP에서는 다른 사물 다를 수 있습니다 행동 양식 같은 것에 묶여 메시지.

예를 들어:"왼쪽으로 n도 회전"이라는 메시지는 모양, 원, 직사각형 및 정사각형과 같은 다양한 개체에 따라 다르게 구현됩니다.

메시지:객체는 메시지를 통해 통신합니다.

-객체는 메시지를 보내고 받습니다.

- 메시지에 대한 응답이 메소드를 실행하는 것입니다.

-사용 방법은 런타임에 수신자가 되도록 결정하는 것입니다.

C++에서는 메서드와 메시지가 호출됩니다. 함수 멤버.

나는 믿는다 메시지 스몰토크에서 사용됩니다.

자바, C# 등사용하는 경향이 있다 방법 또는 인스턴스 메소드.

나는 확신한다(그러나 빨리 위키피디아 이것을 확인하는 것 같습니다) '메시지 전달' 용어는 Smalltalk 커뮤니티에서 유래한 것입니다.나는 그것이 메소드 호출과 어느 정도 동일하다고 생각합니다.

"메시지"라는 용어는 개체에 메시지를 보내는 것을 의미할 수 있으며, 이는 일부 프로그래밍 언어에서는 지원되지만 다른 프로그래밍 언어에서는 지원되지 않습니다.

개체가 메시지를 지원하면 일부 코드가 실행됩니다.그렇지 않으면 그냥 무시됩니다.이는 개체가 해당 기능을 지원해야 하는 명시적인 함수/메서드 호출보다 더 동적인 접근 방식입니다.

Objective-c는 이러한 메시징 접근 방식을 사용한다고 생각합니다.

C#과 같은 객체 지향 구현에서 "메시지"라는 개념은 실제로 명시적인 언어 구성으로 존재하지 않습니다.특정 코드 부분을 보고 "메시지가 있습니다"라고 말할 수는 없습니다.

대신, 객체 클래스의 메소드는 다른 객체가 해당 메소드 내의 동작을 트리거하는 메시지 유형을 보낼 수 있다는 아이디어를 의미합니다.따라서 메시지를 보내는 대신 메서드를 직접 지정하게 됩니다.

Smalltalk와 같은 다른 구현을 사용하면 메시지가 전달되는 것을 볼 수 있으며 수신 개체는 해당 메시지와 관련된 기능을 갖습니다.

명시적인 메시지 전달 느낌을 언어에 복원하려고 시도하는 C#과 같은 언어 위에 위치하는 라이브러리가 있습니다.나는 여기서 재미를 위해 나만의 요리를 만들어 왔습니다. http://collaborateframework.codeplex.com/

원산지는 잘 모르겠지만 메시지 술어.가장 자주 접하게 되는 메시지 UML 디자인에서.개체(UML 용어의 행위자)는 다음을 통해 서로 통신할 수 있습니다. 메시지.실제 코드에서 메시지 일반적으로 함수 호출일 뿐입니다.나는 메시지를 어떤 대상과 소통하려는 시도라고 생각한다.이는 실제 메시지(예: OS의 메시지)일 수도 있고 함수 호출일 수도 있습니다.

일반적으로 함수의 적절한 명칭은 "Method"인 것 같습니다.그러나 각 언어에는 고유한 키워드가 있습니다.예를 들어 Delphi는 무언가를 반환하는 메서드("함수")와 아무것도 반환하지 않는 메서드("프로시저") 간에 차이를 만드는 반면 C 유형 언어에서는 차이가 없습니다.

다음은 몇 가지 단순화된 정의입니다.

메소드/서브루틴/보이드:행동을 취하다

기능:작업을 수행하고 값을 반환

이벤트:객체가 실행될 때 호출됩니다.

핸들러:이벤트를 처리하는 함수/메서드입니다.


추신:이는 SO가 DL/DT/DD 태그를 지원해야 하는 이유를 보여주는 완벽한 예입니다.

나는 이것이 현 시점에서는 선호의 문제라고 믿습니다.당신이 언급한 단어는 기본적으로 오늘날 언어의 동의어이며 대부분의 경우 "방법"이나 "기능"이라고 말하면 사람들은 당신이 의미하는 바를 이해할 것입니다.실제로 OOP에서만 사용되는 "메시지"를 사용하면 전달하려는 내용이 혼동될 수 있습니다. 예를 들면 다음과 같습니다."이메일 메시지를 보내려면 메시지를 만들어야합니다." 동의어가 될 수 있고 완전한 목록이 아니라는 다른 용어는 서브 루틴, 행동, 절차, 작동 (일반적으로 수학적으로 수학적으로), 하위 프로그램, 명령입니다 ...

방법 :전통적인 언어의 기능과 유사

메시지 :기존 언어의 매개변수 전달과 유사

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top