OOP 전문가를 위한 질문입니다.

 

OOP는 객체와 그 속성을 어떻게 반복합니까?

예를 들어 다음과 같은 루프를 실행하고 있습니다.

 //Цикл по объектам в поиске нужного значения конкретного свойства.

for ( int a1 = 0 ; a1 < obj_total; a1++)
  {
   if (G_CORE[a1][_X_SIZE] == THIS_SIZE)
     {
      G_CORE[a1][_this_state_color] = clrWhite ;
      Redraw(a1);
     } 
  }

//Цикл по свойствам в поиске неверного значения

for ( int a1 = 0 ; a1 < prop_total; a1++)
  {
   if (G_CORE[ELEMENT][a1] > Max_value)
     {
      G_CORE[ELEMENT][a1] = Max_value;
      Redraw(ELEMENT);
     } 
  }
 

개체 또는 그룹의 계층 구조가 생성되는 방식도 흥미롭습니다. 예를 들어, 여러 범주가 있으며 각 범주에는 n번째 개체 수가 있는 그룹이 포함되어 있습니다. OOP 개념이 제공하는 계층 구조 구축 방법은 무엇입니까?

계층 구조의 구현은 링크와 레벨 사이의 주기에서 쉽게 전환할 수 있도록 해야 합니다. 배열 내부에 계층 구조를 구축하면 빈 공간이 많이 생깁니다. 복잡한 배열에서 빌드하면 링크를 통해 자유 순환을 수행하는 것이 불가능합니다. OOP는 무엇을 제공합니까?

 
Реter Konow :

OOP는 객체와 그 속성을 어떻게 반복합니까?

예를 들어 다음과 같은 루프를 실행하고 있습니다.

CObj obj[];
...
for ( int i= 0 ;i< ArraySize (obj);obj[i++].CheckSomething(param));
이 같은. 그리고 이미 클래스 내부의 CheckSomething() 메서드에서 모든 논리가 구현됩니다.
 
Vladimir Simakov :
이 같은. 그리고 이미 클래스 내부의 CheckSomething() 메서드에서 모든 논리가 구현됩니다.

고맙습니다. 먼저 객체에서 obj[] 배열을 수집한 다음 루프를 돌립니까?

계층 구조는 어떻습니까? 그리고 우리는 정적 계층에 대해 이야기하고 있습니다. 일정하고 변함이 없습니다.

 
Реter Konow :

고맙습니다. 먼저 객체에서 obj[] 배열을 수집한 다음 루프를 돌립니까?

계층 구조는 어떻습니까? 그리고 우리는 정적 계층에 대해 이야기하고 있습니다. 일정하고 변함이 없습니다.

 class Class1{
...
};

class Class2{
...
};

class Class3{
   Class1 class1;
   Class2 class2;
...
};
 
Vladimir Simakov :
즉, 클래스의 계층 구조를 만든 다음 별도의 클래스에서 모든 개체를 수집하고 이를 통해 모든 링크를 반복합니까?
 
Реter Konow :
즉, 클래스의 계층 구조를 만든 다음 별도의 클래스에서 모든 개체를 수집하고 이를 통해 모든 링크를 반복합니까?

필요한 것에 따라 다르지만 원칙적으로 그렇습니다. 귀하의 어레이보다 훨씬 더 우아하다는 데 동의하십시오. 그리고 그것들이 dll로 전송될 수 없기 때문에 실제로다차원 배열 이 있고 배열이 전혀 없다는 나의 지속적인 의심을 감안할 때, 함수 호출에 대한 오버헤드는 동일할 수 있습니다.

 
Реter Konow :

OOP는 객체 와 그 속성을 어떻게 반복합니까?

피터 코노우 :
그리고 그것들을 통해 우리는 모든 링크를 통해 순환을 만들 수 있습니까?

일반적으로 통용되는 용어를 사용하면 대화 상대를 귀하의 질문으로 오도할 수 있을 뿐만 아니라 질문에 대한 답변을 받았음을 확신할 수 있습니다.

OOP Wiki - 여기에 있는 용어

주제에 따라 개체 인스턴스의 배열(위의 답변)을 보거나 WndContainer.mqh 및 ArrayObj.mqh SB의 소스 코드를 볼 수 있으며 CPanelDialog를 기반으로 그래픽 패널을 만드는 데 사용됩니다(기성품 예제는 ndicators\Examples\Panels\SimplePanel 폴더), 포인터 및 목록 작업이 있습니다.

 
Vladimir Simakov :

필요한 것에 따라 다르지만 원칙적으로 그렇습니다. 귀하의 어레이보다 훨씬 더 우아하다는 데 동의하십시오. 그리고 그것들이 dll로 전송될 수 없기 때문에 실제로 다차원 배열 이 있고 배열이 전혀 없다는 나의 지속적인 의심을 감안할 때, 함수 호출에 대한 오버헤드는 동일할 수 있습니다.

글쎄, 아마도 더 우아한, 나는 논쟁하지 않을 것입니다. 나는 실용성, 편리성, 단순성 및 편의성 문제에 매우 관심이 있으며주의, 분석이 필요하고 오류를 생성하고 인식하기 어렵게 만들기 때문에 모든 구문을 "국민의 적"으로 봅니다. 따라서 가장 단순하고 원시적인 코드 구성을 사용하려고 합니다. 가장 중요한 것은 읽기 쉽고 효과적이라는 것입니다.

물론 계층 구조를 사용하여 연결합니다. 어레이에서 모두 동일하게 수행되면 주기는 링크, 그룹, 하위 그룹, 하위 하위 그룹 등을 구문 분석할 수 있는 좋은 기회를 제공합니다. 그러나 메모리는 비효율적으로 사용됩니다. 수업을 통해 수행하면 언뜻보기에 이상적인 솔루션입니다. 그러나 이것은 "죽은" 계층 구조를 위한 것입니다. 사진을 위해. 하지만 작동하는 엔진을 만들어야 하는 경우 구문 지옥이 시작되는 곳이 두렵습니다.))

 
Реter Konow :

고맙습니다. 먼저 객체에서 obj[] 배열을 수집한 다음 루프를 돌립니까?

계층 구조는 어떻습니까? 그리고 우리는 정적 계층에 대해 이야기하고 있습니다. 일정하고 변함이 없습니다.

"... 게다가, 우리는 정적 계층에 대해 이야기하고 있습니다. 일정하고 변하지 않는"이 무슨 뜻인지 설명하십시오.
 
Igor Makanu :

일반적으로 통용되는 용어를 사용하면 대화 상대를 귀하의 질문으로 오도할 수 있을 뿐만 아니라 질문에 대한 답변을 받았음을 확신할 수 있습니다.

OOP Wiki - 여기에 있는 용어

주제에 따라 개체 인스턴스의 배열(위의 답변)을 보거나 WndContainer.mqh 및 ArrayObj.mqh SB의 소스 코드를 볼 수 있으며 CPanelDialog를 기반으로 그래픽 패널을 만드는 데 사용됩니다(기성품 예제는 ndicators\Examples\Panels\SimplePanel 폴더), 포인터 및 목록 작업이 있습니다.

OOP에서 "객체"는 해당 필드(속성)가 선언된 클래스에 대한 참조입니다. 개체는 각각 배열의 셀인 번호가 지정된 속성 집합을 의미합니다. 이것이 차이점입니다.

질문은 그래픽 인터페이스 주제와 관련이 없습니다. 나는 오래 전에 그래픽 라이브러리를 우회했고 거기에는 내가 찾을 수 있는 것이 없습니다. 하지만 지금은 AI라는 주제에 관심이 있고 이것은 새로운 도전과 질문을 제기합니다.