"안녕하세요, 아미고! 오늘 저는 여러분의 관점에 새롭고 흥미로운 세계를 열어줄 것입니다. 저는 객체 지향 프로그래밍 (OOP) 에 대해 이야기하고 있습니다 . 여러분은 이미 클래스와 객체를 알게 되었습니다. 오늘 여러분은 그들에 대해 더 많이, 더 많이 알기 위해."

OOP의 네 가지 기둥부터 시작하겠습니다. 추상화, 캡슐화, 상속 및 다형성 입니다 . (예전에는 3개였는데 나중에 추상화가 추가됨)

1) 추상화.

실생활에서 추상화의 좋은 예는 회사의 직무 설명입니다. 직책은 하나이지만 그 임무는 완전히 다른 문제입니다.

미래의 회사를 위한 조직도를 만들고 있다고 상상해 보십시오. 비서의 임무를 나누어 다른 여러 직책에 분산시킬 수 있습니다. CEO의 직무를 최고재무책임자, 최고기술책임자, 최고마케팅책임자, 최고인사책임자 등 여러 직책으로 나눌 수 있습니다. 또는 사무실 관리자와 채용 담당자의 위치를 ​​하나로 결합할 수 있습니다.

회사에서 직위의 이름을 생각해 낸 다음 이러한 직책에 대한 책임을 "지시"한다고 가정합니다. 그것은 추상화 입니다 . 크고 모 놀리 식을 여러 개의 작은 부분으로 나누는 것입니다.

OOP: 기본 원칙 - 1

프로그래머의 관점에서 추상화는 프로그램을 객체로 적절하게 나누는 것입니다.

대규모 프로그램은 일반적으로 12가지 방법 중 하나로 상호 작용하는 객체로 표현될 수 있습니다. 추상화를 사용하면 개체의 주요 특성을 선택하고 덜 중요한 것은 생략할 수 있습니다.

추상화는 군사 전략과 같습니다. 잘못된 전략을 선택하면 어떤 기발한 전술도 성공하지 못합니다.

2) 캡슐화.

캡슐화는 개체를 단순화하여 개체 간의 상호 작용을 개선하기 위한 것입니다.

OOP: 기본 원칙 - 2

무언가를 단순화하는 가장 좋은 방법은 복잡한 것을 알 필요가 없는 사람들에게 숨기는 것입니다. 예를 들어, Boeing 제트기의 조종 장치 뒤에 앉아 있으면 작동 방식을 이해하는 데 오랜 시간이 걸립니다.

OOP: 기본 원칙 - 3

반면에 비행기 승객에게는 모든 것이 더 간단해 보입니다. 티켓을 구입하고 비행기에 탑승하면 비행기가 이륙하고 착륙합니다. «티켓 구매»와 «비행기 탑승»만 알면 대륙에서 대륙으로 쉽게 이동할 수 있습니다. 비행, 이륙, 착륙 및 다양한 잠재적 비상 상황을 위해 비행기를 준비하는 것과 관련된 복잡성이 전혀 보이지 않습니다. 그리고 우리는 위성 내비게이션, 자동 조종 장치, 항공 교통 관제 센터에 대해 언급하지 않았습니다. 이것은 우리의 삶을 단순화합니다.

프로그래밍 측면에서 캡슐화는 «구현을 숨기는 것»입니다. 나는 그 정의를 좋아합니다. 우리 클래스는 수백 개의 메서드를 포함할 수 있으며 다양한 상황에서 매우 복잡한 동작을 구현할 수 있습니다. 그러나 다른 클래스와의 상호 작용을 위한 두세 가지 방법만 남겨두고 (« 공개 » 로 표시) 모든 방법을 엿보는 눈으로부터 숨길 수 있습니다 (« 비공개 »로 표시). 그러면 우리 프로그램의 다른 모든 클래스는 이 클래스에서 이 몇 가지 메서드만 보고 호출합니다 . 조종석이 행복한 승객의 시야에서 벗어나지 않는 것처럼 클래스의 모든 복잡성은 내부에 숨겨집니다.

3) 상속.

상속은 프로그래밍과 실생활의 개념입니다. 프로그래밍에서 상속은 두 클래스 간의 특별한 관계입니다. 그러나 실생활에서의 상속은 훨씬 더 흥미롭습니다.

실생활에서 무언가를 만들어야 하는 경우 두 가지 옵션이 있습니다.

1) 처음부터 필요한 것을 만들고 많은 시간과 노력을 들입니다.

2) 이미 존재하는 것을 사용하여 필요한 것을 만듭니다.

최선의 전략은 다음과 같습니다. 기존의 우수한 솔루션을 사용하여 필요에 맞게 재작업하고 조정한 다음 사용합니다.

인간의 진화를 생각해 보십시오. 그들의 시작을 행성의 생명의 시작으로 거슬러 올라가면 수십억 년이 흘렀음을 알 수 있습니다. 하지만 인간이 원숭이에서 시작했다고 생각한다면 불과 몇 백만 년이 지났을 뿐입니다. 처음부터 무언가를 만드는 데 시간이 더 걸립니다. 더 길게.

마찬가지로 프로그래밍에서 우리는 다른 클래스를 기반으로 하나의 클래스를 만들 수 있습니다. 새 클래스는 기존 클래스의 자손(상속자)이 됩니다. 이는 필요한 데이터 및 메서드의 80-90%를 포함하는 클래스가 이미 있는 경우 매우 유용합니다. 새 클래스의 부모로 적절한 클래스를 선언하기만 하면 됩니다. 부모 클래스의 모든 데이터와 메서드는 자동으로 새 클래스의 일부가 됩니다. 편리하죠?

4) 다형성.

다형성은 동일한 인터페이스 뒤에 다른 구현이 숨겨져 있는 상황을 설명하는 프로그래밍 개념입니다. 실생활에서 아날로그를 찾기 위해 우리는 자동차를 운전하는 과정을 살펴볼 수 있습니다.

어떤 사람이 트럭을 운전할 수 있다면 구급차나 스포츠카의 운전대를 잡을 수도 있습니다. 운전대, 페달, 변속장치 등 모두 동일한 제어 인터페이스를 가지고 있기 때문에 어떤 종류의 자동차든 사람이 자동차를 운전할 수 있습니다. 자동차는 내부가 다르게 구성되어 있지만 모두 동일한 제어 인터페이스를 공유합니다.

프로그래밍으로 돌아가서 다형성을 사용하면 다른 클래스(일반적으로 공통 조상)의 개체와 동일한 방식으로 상호 작용할 수 있습니다. 이것의 중요성은 아무리 강조해도 지나치지 않습니다. 프로그램이 커질수록 더 중요해집니다.

OOP 는 원칙입니다. 프로그래밍 법. 그들 각각은 어떤 식으로든 우리를 제한 하지만 그 대가로 프로그램이 커질수록 큰 이점을 제공합니다. OOP의 네 가지 원칙은 의자의 네 다리와 같습니다. 그중 하나라도 빼면 전체 시스템이 불안정해집니다.