OOP 전문가를 위한 질문입니다. - 페이지 17

 
Vladimir Simakov :
수업 수를 말하는 것입니다. 각 줄은 200입니다.
접근하기가 얼마나 더 어렵습니까? 어디에서나 볼 수 있는 글로벌 코어가 있습니다. OOP에서는 삭제해야 했습니다. 그러면 Windows의 요소로 작업하는 방법은 무엇입니까? 상상하려고 하면 혼수상태에 빠진다.))))
 
Реter Konow :
접근하기가 얼마나 더 어렵습니까? 어디에서나 볼 수 있는 글로벌 코어가 있습니다. OOP에서는 삭제해야 했습니다. 그러면 Windows의 요소로 작업하는 방법은 무엇입니까? 상상하려고 하면 혼수상태에 빠진다.))))

정적 클래스.

 

Vladimir Simakov :
А теперь к эффективности. Switch - это что в конечном итоге? Это последовательное сравнение параметра с константами. Внимание Петр, последовательное.

전혀 필요하지 않습니다.

이것은 Peter가 옳다거나 스위치가 모든 곳에서 밀어져야 한다는 것을 의미하지는 않지만 그럼에도 불구하고.

 
Alexey Navoykov :
네 맞습니다. 따라서 속도 측면에서 이것은 분명히 MQL에서 가장 빠른 옵션입니다. 그러나 관리되는 환경에서 클래스 개체 에 대한 액세스는 간접적으로 발생합니다.
교육 프로그램에 감사드립니다. 나는 스위치 백에 대한 나의 말을 받아들인다.
 
Georgiy Merts :

여기에서 이 기능에 대해 더 자세히 설명합니다. 당신에게는 열 가지 필요한 기능 중 하나를 선택하는 거대한 크기 스위치가 있습니다. 이러한 스위치에서 실수로 분기 중 하나와 관련된 코드를 잘못된 위치에 작성하여 실수를 범하기 쉽습니다.

과부하 - 모든 것이 훨씬 쉽습니다. 우리는 10개의 다른 자손을 가지고 있고, 우리가 하나의 클래스로 작업할 때마다 하나의 오버로드된 기능이 있습니다. 완전히 다른 파일을 열어야 하기 때문에 실수로 다른 클래스에 쓸 수 없습니다.

게다가 - 이 매우 거대한 스위치에 있는 시험 자체 - 제 생각에는 하나의 필요한 수업을 개설한 다음 하나의 기능만 있는 시험을 여는 것보다 훨씬 더 스트레스가 많습니다.

사실, 어셈블러 코드에서 이 모든 오버로드는 this 포인터에 따라 어떤 경우에도 동일한 스위치로 귀결됩니다. 그러나 OOP의 경우 이 모든 것이 프로그래머에게 숨겨져 있으며 그의 작업에 방해가 되지 않습니다. OOP가 없으면 처리해야 합니다.

대략적으로 말하자면, 걸을 때 근육을 움직이게 하는 특정 순서로 신호를 근육에 보내게 됩니다. 그러나 의식 수준에서는 어떤 움직임이 필요한지 기억하기만 하면 됩니다. 여기서 OOP는 바로 "메모리, 어떤 움직임이 필요한가"입니다. 당신은 "많은 근육과 신경이 연결되어 있다면 왜 그 움직임을 기억하는지 이해하지 못합니다." 음... 기억의 거인을 위해 이미 여러 번 말했지만 실제로 걷기 위해 어떤 근육을 어떤 순서로 긴장시켜야 하는지 기억하는 것으로 충분합니다. 이 전체 움직임을 기억하는 것은 의미가 없습니다. 너무 많이 기억할 수없는 나머지 사람들에게는 전체 움직임을 전체적으로 기억하는 것이 훨씬 더 합리적이지만 근육에 무엇이 있는지, 어떤 순서로 긴장되고 얼마나 많은지 - 그것을 숨기는 것이 더 합리적입니다. 의식.

오버로드된 함수는 컴파일러의 다른 함수일 뿐이며 스위치는 없습니다.

 
Реter Konow :
접근하기가 얼마나 더 어렵습니까? 어디에서나 볼 수 있는 글로벌 코어가 있습니다. OOP에서는 삭제해야 했습니다. 그러면 Windows의 요소로 작업하는 방법은 무엇입니까? 나는 상상하려고 할 때 혼수 상태에 빠진다.)))

왜 그래?

글로벌 코어와 OOP는 전혀 상호 배타적이지 않습니다.

"Lie on public display"가 아니라 창의 요소만 창 클래스 내부에 캡슐화해야 합니다. 아무도 실수로 "잘못된 곳"에 들어가는 일이 없도록 하기 위해서입니다. 하나의 변수를 변경하여 거대한 전역 배열 안에 잘못 배치하는 것은 쉽습니다. 원하는 인터페이스를 요청한 다음 필요한 객체에서 동일한 변수를 변경하면서 동시에 실수를 하는 것은 훨씬 더 어렵습니다.

 
Koldun Zloy :

오버로드된 함수는 컴파일러의 다른 함수일 뿐이며 스위치는 없습니다.

그리고 필요한 것은 어떻게 선택됩니까? 우리는 가상 기능 과 후기 바인딩에 대해 이야기하고 있습니다. 오버로드된 함수 중 어떤 것이 호출됩니까? 이것은 호출될 때 암시적으로 전달되는 this 포인터에 의해 결정됩니다. 그리고 이러한 선택이 어떻게 이루어졌다고 생각하십니까?

 
Georgiy Merts :

그리고 필요한 것은 어떻게 선택됩니까? 우리는 가상 기능 과 후기 바인딩에 대해 이야기하고 있습니다. 오버로드된 함수 중 어떤 것이 호출됩니까? 이것은 호출될 때 암시적으로 전달되는 this 포인터에 의해 결정됩니다. 그리고 이러한 선택이 어떻게 이루어졌다고 생각하십니까?

일반적으로 Peter는 가상 기능에 대해 이야기하지 않았습니다.

그러나 그들은 또한 어떤 스위치도 가지고 있지 않습니다.

가상 함수가 있는 클래스에는 가상 함수 테이블이 있습니다.

그리고 이 클래스의 각 객체에는 암시적 변수(가상 함수 테이블에 대한 포인터)가 포함되어 있습니다.

하나 또는 모든 가상 함수가 하위 항목에서 재정의되면 새 테이블이 생성되고 하위 인스턴스에는 이에 대한 포인터가 포함됩니다.

 
Koldun Zloy :

일반적으로 Peter는 가상 기능에 대해 이야기하지 않았습니다.

그러나 그들은 또한 어떤 스위치도 가지고 있지 않습니다.

가상 함수가 있는 클래스에는 가상 함수 테이블이 있습니다.

그리고 이 클래스의 각 객체에는 암시적 변수(가상 함수 테이블에 대한 포인터)가 포함되어 있습니다.

하나 또는 모든 가상 함수가 하위 항목에서 재정의되면 새 테이블이 생성되고 하위 인스턴스에는 이에 대한 포인터가 포함됩니다.

정확히. 나는 또한 이 테이블이 어떻게 작동하는지 묻습니다. 어셈블리 코드에서 이것은 동일한 스위치입니다.

그리고 "그는 가상 기능 에 대해 이야기하지 않았습니다"에 대해 - 그래서 "왜 OOP"에 대한 것과 같습니다... 즉, 결국 가상 기능에 관한 것이지 인수가 다른 단순한 동일한 기능 이름이 아닙니다.

 
Georgiy Merts :

정확히. 나는 또한 이 테이블이 어떻게 작동하는지 묻습니다. 어셈블리 코드에서는 동일한 스위치입니다.

아니요. 함수 포인터의 배열일 뿐입니다.

어셈블러 코드에서 테이블의 주소는 개체에서 가져옵니다.

그 안에 특정 위치에서 함수의 주소가 취해집니다.

그리고 이 주소로 전환됩니다.

그리고 "그는 가상 기능 에 대해 이야기하지 않았습니다"에 대해 - 그래서 "왜 OOP"에 대한 것과 같습니다... 즉, 결국 가상 기능에 관한 것이지 인수가 다른 단순한 동일한 기능 이름이 아닙니다.

그의 질문으로 판단하면 그는 같은 이름의 기능에 대해 이야기하고있었습니다.

그는 가상 기능에 대해 의심조차하지 않을 가능성이 큽니다.