방법(컴퓨터 프로그래밍)
Method (computer programming)객체 지향 프로그래밍(OOP)의 방법은 메시지 및 객체와 관련된 절차입니다.오브젝트는 상태 데이터와 동작으로 구성됩니다.이것들은 인터페이스를 구성합니다.인터페이스는 오브젝트가 다양한 소비자에 의해 어떻게 이용될 수 있는지를 지정합니다.메서드는 소비자가 매개 변수를 지정한 개체의 동작입니다.
데이터는 객체의 속성으로 표현되며 동작은 메서드로 표현됩니다.예를 들어,Window
오브젝트에는 다음과 같은 메서드가 있을 수 있습니다.open
그리고.close
단, 그 상태(특정 시점에서 열려 있는지 닫혀 있는지 여부에 관계없이)는 속성이 됩니다.
클래스 베이스 프로그래밍에서는 메서드는 클래스 내에서 정의되며 오브젝트는 지정된 클래스의 인스턴스입니다.메서드가 제공하는 가장 중요한 기능 중 하나는 메서드 오버라이드입니다(예:area
)는 여러 종류의 클래스에 사용할 수 있습니다.이것에 의해, 송신측 오브젝트는 동작을 호출해, 그러한 동작의 실장을 수신측 오브젝트에 위임할 수 있습니다.Java 프로그래밍의 메서드는 클래스 객체의 동작을 설정합니다.예를 들어, 오브젝트는 다음과 같이 송신할 수 있습니다.area
메시지를 다른 객체에 전송하고 수신 객체가 다음 객체인지 아닌지에 따라 적절한 수식이 호출됩니다.rectangle
,circle
,triangle
,기타.
메서드는 다른 클래스가 객체의 속성에 액세스 및 변경하기 위해 사용하는 인터페이스도 제공합니다.이것을 캡슐화라고 부릅니다.캡슐화와 오버라이드는 메서드와 프로시저 [1]콜을 구별하는2가지 주요 기능입니다.
오버라이드 및 오버로드
메서드 덮어쓰기 및 오버로드는 메서드가 기존 프로시저 또는 함수 호출과 다른 가장 중요한 두 가지 방법입니다.오버라이드란 슈퍼클래스의 메서드 구현을 재정의하는 서브클래스를 말합니다.예를들면,findArea
쉐이프 [2]클래스에 정의된 메서드일 수 있습니다. triangle
, 등 각자가 면적을 계산하기 위한 적절한 공식을 정의합니다.이 개념은 객체를 "블랙박스"로 간주하여 객체를 사용하는 다른 객체에 미치는 영향을 최소화하면서 객체의 내부를 변경하는 것입니다.이것은 캡슐화라고 불리며 코드를 쉽게 유지 및 재사용할 수 있도록 하기 위한 것입니다.
한편 메서드 오버로드란 메서드의 파라미터에 따라 메시지 처리에 사용되는 코드를 구별하는 것을 말합니다.어떤 메서드에서든 수신 객체를 첫 번째 파라미터로 볼 경우 오버라이드(override)는 첫 번째 인수에 대해서만 선택이 이루어지는 특수한 경우에 불과합니다.다음의 간단한 Java 예는 그 차이를 나타내고 있습니다.
접근자, 뮤테이터 및 매니저 방식
접근자 메서드는 객체의 데이터 값을 읽기 위해 사용됩니다.뮤테이터 메서드는 개체의 데이터를 수정하는 데 사용됩니다.관리자 메서드는 생성자 및 소멸자와 같은 클래스의 개체를 초기화하고 파괴하는 데 사용됩니다.
이러한 메서드는 캡슐화와 모듈화를 용이하게 하는 추상화 레이어를 제공합니다.예를 들어, 은행 계좌 클래스가 다음을 제공하는 경우getBalance()
(밸런스 데이터 필드에 직접 액세스하지 않고) 현재의 밸런스를 취득하는 접근자 메서드.그러면 같은 코드의 나중에 리비전이 의존 코드를 변경할 필요 없이 밸런스 검색을 위한 보다 복잡한 메커니즘(예를 들어 데이터베이스 취득)을 구현할 수 있습니다.캡슐화 및 모듈화의 개념은 객체 지향 프로그래밍에만 있는 것이 아닙니다.실제로 객체 지향 접근법은 추상 데이터 유형 및 구조화된 [3]프로그래밍과 같은 이전 패러다임의 논리적 확장일 뿐입니다.
컨스트럭터
생성자는 개체의 수명 초기에 호출되어 생성(또는 인스턴스화)이라고 하는 프로세스인 개체를 만들고 초기화합니다.초기화에는 자원 취득이 포함될 수 있습니다.생성자에는 매개 변수가 있을 수 있지만 일반적으로 대부분의 언어에서 값을 반환하지 않습니다.Java 의 다음의 예를 참조해 주세요.
일반의 학급 주된 { 스트링 이름; 인트 _롤; 주된(스트링 이름., 인트 굴리다) { // 컨스트럭터 메서드 이것..이름 = 이름.; 이것.._롤 = 굴리다; } }
파괴자
소멸자는 개체의 수명이 끝날 때 자동으로 호출되는 메서드이며 이를 파괴라고 합니다.대부분의 언어에서 파기 시 소멸자 메서드 인수나 반환 값을 허용하지 않습니다.오브젝트 파괴 시 청소 허드렛일 및 기타 태스크를 수행하기 위해 파괴를 실행할 수 있다.
파이널라이저
Java, C# 및 Python과 같은 가비지 수집 언어에서는 소멸자를 피니셔라고 합니다.디스트럭터와 목적과 함수는 비슷하지만 가비지 컬렉션을 사용하는 언어와 수동 메모리 관리를 사용하는 언어가 다르기 때문에 호출 순서가 다릅니다.
추상적 방법
추상적 방법은 서명만 있고 구현 본문은 없는 방법입니다.하위 클래스가 메서드의 구현을 제공해야 함을 지정하기 위해 자주 사용됩니다.추상 메서드는 일부 프로그래밍 [4]언어에서 인터페이스를 지정하는 데 사용됩니다.
예
다음 Java 코드는 확장해야 하는 추상 클래스를 보여 줍니다.
추상적인 학급 모양. { 추상적인 인트 지역(인트 h, 인트 w); // 추상 메서드 시그니처 }
다음 서브클래스는 메인클래스를 확장합니다.
일반의 학급 직사각형 확장 모양. { @오버라이드 인트 지역(인트 h, 인트 w) { 돌아가다 h * w; } }
재추출
하위 클래스가 추상 메서드에 대한 구현을 제공하는 경우 다른 하위 클래스가 다시 추상화할 수 있습니다.이것은 재추출이라고 불립니다.
실제로는 거의 사용되지 않습니다.
예
C#에서는 추상적인 방법으로 가상 방식을 덮어쓸 수 있다.(이는 모든 비프라이빗 방식이 가상인 Java에도 적용됩니다).
학급 IA { 일반의 가상 무효 M() { } } 추상적인 학급 IB : IA { 일반의 덮어쓰다 추상적인 무효 M(); // 허용 }
인터페이스의 기본 메서드도 다시 추출할 수 있으므로 하위 클래스가 이를 구현해야 합니다(Java에도 해당).
인터페이스 IA { 무효 M() { } } 인터페이스 IB : IA { 추상적인 무효 IA.M(); } 학급 C : IB { } // 오류: 클래스 'C'가 구현되지 않음아이엠'
클래스 메서드
클래스 메서드는 인스턴스가 아닌 클래스에서 호출되는 메서드입니다.일반적으로 개체 메타 모델의 일부로 사용됩니다.즉, 각 클래스에 대해 메타 모델에서 정의된 클래스 객체의 인스턴스가 생성됩니다.메타 모델 프로토콜을 사용하면 클래스를 만들고 삭제할 수 있습니다.이런 의미에서 위의 컨스트럭터 및 디스트럭터와 동일한 기능을 제공합니다.그러나 Common Lisp Object System(CLOS)과 같은 일부 언어에서는 메타 모델을 통해 개발자가 런타임에 오브젝트 모델을 동적으로 변경할 수 있습니다.예를 들어, 새로운 클래스를 만들거나 클래스 계층을 재정의하거나 속성을 변경할 수 있습니다.
특수한 방법
특수 메서드는 언어마다 매우 고유하며, 여기서 정의한 특수 메서드의 일부 또는 전부를 언어에서 지원할 수 있습니다.언어의 컴파일러는 자동으로 기본 특수 메서드를 생성하거나 프로그래머가 선택적으로 특수 메서드를 정의할 수 있습니다.대부분의 특별한 메서드는 직접 호출할 수 없지만 컴파일러는 적절한 시간에 호출하기 위한 코드를 생성합니다.
정적 방식
스태틱 메서드는 특정 인스턴스가 아닌 클래스의 모든 인스턴스와 관련된 것을 의미합니다.그런 의미에서 정적 변수와 유사합니다.예를 들어 클래스의 모든 인스턴스의 모든 변수 값을 합산하는 정적 메서드가 있습니다.예를 들어 다음과 같은 경우Product
class는 모든 제품의 평균 가격을 계산하는 정적 방법을 사용할 수 있습니다.
Java에서 일반적으로 사용되는 스태틱 방식은 다음과 같습니다.
Math.max(더블 a,더블 b)
이 정적 메서드는 소유 개체가 없으며 인스턴스에서 실행되지 않습니다.인수로부터 [2]모든 정보를 수신합니다.
클래스의 인스턴스가 아직 없는 경우에도 정적 메서드를 호출할 수 있습니다.정적 메서드는 호출된 클래스에 기반하여 컴파일 시에 해결되며 객체의 런타임 유형에 따라 동적으로 해결되는 인스턴스 메서드의 경우처럼 동적으로 해결되지 않기 때문에 "static"이라고 불립니다.
복사 할당 연산자
복사 할당 연산자는 클래스 개체가 동일한 유형의 클래스 개체에 할당될 때 컴파일러가 수행할 액션을 정의합니다.
연산자 방식
연산자 방법은 연산자 기호를 정의 또는 재정의하고 기호 및 관련 메서드 매개변수를 사용하여 수행할 작업을 정의합니다.C++의 예:
#실패하다 <문자열> 학급 데이터. { 일반의: 부울 교환입니다.< >(컨스턴트 데이터.& 데이터.) 컨스턴트 { 돌아가다 롤_ < > 데이터..롤_; } 부울 교환입니다.==(컨스턴트 데이터.& 데이터.) 컨스턴트 { 돌아가다 이름_ == 데이터..이름_ & & 롤_ == 데이터..롤_; } 사적인: 표준::스트링 이름_; 인트 롤_; };
C++ 멤버 함수
일부 절차 언어는 객체 지향 기능으로 확장되어 해당 언어의 대규모 스킬셋과 레거시 코드를 활용하면서도 객체 지향 개발의 이점을 제공합니다.아마도 가장 잘 알려진 예는 C 프로그래밍 언어의 객체 지향 확장인 C++일 것입니다.기존 절차 언어에 객체 지향 패러다임을 추가하기 위한 설계 요건 때문에 C++로 전달되는 메시지는 몇 가지 고유한 기능과 용어를 가지고 있습니다.예를 들어 C++에서는 메서드를 멤버 함수라고 합니다.C++에는 파생 클래스에서 덮어쓸 수 있는 멤버 함수인 가상 함수의 개념도 있습니다.
가상 기능
가상 함수는 C++ 클래스가 다형 동작을 실현하기 위한 수단입니다.비가상 멤버 함수 또는 일반 메서드는 다형성에 참여하지 않는 함수입니다.
C++의 예:
#실패하다 <iostream> #실패하다 <메모리> 학급 잘 하는 군요 { 일반의: 가상 ~잘 하는 군요() = 체납; 가상 무효 저는 ~입니다() { 표준::외치다 << > "나는 슈퍼 클래스야!\n"; } }; 학급 후보선수 : 일반의 잘 하는 군요 { 일반의: 무효 저는 ~입니다() 덮어쓰다 { 표준::외치다 << > "나는 서브클래스야!\n"; } }; 인트 주된() { 표준::unique_ptr< >잘 하는 군요> 인스톨 1 = 표준::make_filengths< >잘 하는 군요>(); 표준::unique_ptr< >잘 하는 군요> 인스톨 2 = 표준::make_filengths< >후보선수>(); 인스톨 1->저는 ~입니다(); // 슈퍼콜:저는 ~입니다. 인스톨 2->저는 ~입니다(); // 콜 서브::저는 ~입니다. }
「 」를 참조해 주세요.
메모들
- ^ "What is an Object?". oracle.com. Oracle Corporation. Retrieved 13 December 2013.
- ^ a b Martin, Robert C. (2009). Clean Code: A Handbook of Agile Software Craftsmanship. Prentice Hall. p. 296. ISBN 978-0-13-235088-4.
- ^ Meyer, Bertrand (1988). Object-Oriented Software Construction. Cambridge: Prentice Hall International Series in Computer Science. pp. 52–54. ISBN 0-13-629049-3.
- ^ "Abstract Methods and Classes". oracle.com. Oracle Java Documentation. Retrieved 11 December 2014.
레퍼런스
- JANA, DEBASISH (1 January 2005). C++ AND OBJECT-ORIENTED PROGRAMMING PARADIGM. PHI Learning Pvt. Ltd. ISBN 978-81-203-2871-6.
- Sengupta, Probal (1 August 2004). Object-Oriented Programming: Fundamentals And Applications. PHI Learning Pvt. Ltd. ISBN 978-81-203-1258-6.
- Svenk, Goran (2003). Object-oriented Programming: Using C++ for Engineering and Technology. Cengage Learning. ISBN 0-7668-3894-3.
- Balagurusamy (2013). Object Oriented Programming with C++. Tata McGraw-Hill Education. ISBN 978-1-259-02993-6.
- Kirch-Prinz, Ulla; Prinz, Peter (2002). A Complete Guide to Programming in C++. Jones & Bartlett Learning. ISBN 978-0-7637-1817-6.
- Conger, David (2006). Creating Games in C++: A Step-by-step Guide. New Riders. ISBN 978-0-7357-1434-2.
- Skinner, M. T. (1992). The Advanced C++ Book. Silicon Press. ISBN 978-0-929306-10-0.
- Love (1 September 2005). Linux Kernel Development. Pearson Education. ISBN 978-81-7758-910-8.
- DEHURI, SATCHIDANANDA; JAGADEV, ALOK KUMAR; RATH, AMIYA KUMAR (8 May 2007). OBJECT-ORIENTED PROGRAMMING USING C++. PHI Learning Pvt. Ltd. ISBN 978-81-203-3085-6.