OOP 대 절차 프로그래밍 - 페이지 6

 
Dmitry Fedoseev :

그리고 후행이 다른 매개변수에 적응하도록 어떻게 하시겠습니까?

특정 작업을 시도해 보겠습니다. 그렇다면 제공하십시오.
 
Реter Konow :
특정 작업으로 이끄는 것이 바람직합니다. 이 설명은 명확하지 않습니다. 내 실습에서 알고리즘은 외부 매개 변수를 변경해도 변경되지 않습니다. 이 매개 변수의 모든 값에 대해 미리 만들어졌습니다. 그래서 당신이 의미하는 바가 명확하지 않습니다. 구체적인 예를 들어 설명합니다.
 class Ордер
{
   public : int SELL;

  Ордер( void ) // Конструктор имеет то же имя, что и класс. Выполняется при инициализации переменной класса
  {
    SELL= 0 ;
     int k= OrdersHistoryTotal ()- 1 ;
     for (; k>= 0 ; k--)
    {
       if (! OrderSelect (k, SELECT_BY_POS , MODE_HISTORY )) continue ;
       if ( OrderType ()== OP_SELL )SELL++;
    }
  }
}x;

void OnStart ()
{
   Alert (x.SELL);
}

OOP 덕분에 메인 프로그램은 매우 간결하고 설명이 풍부합니다. 이것이 가장 먼저 떠오른 예일 뿐입니다. 주문수 계산이 자주 필요한 경우 이점은 분명합니다. 처음에는 이해하기 어렵습니다. 그러나 결국 기능은 물론 매개변수를 사용하는 경우에도 한 때 어려움이 있었습니다.

 
Реter Konow :
특정 작업을 시도해 보겠습니다. 그렇다면 제공하십시오.

특정 작업. 고객은 코드베이스에서 사용할 수 있는 모든 후행 옵션이 여기에 삽입되지만 테스터에서 속도가 느려지지 않도록 2개의 MA에 Expert Advisor를 주문했습니다.

예, 그리고 미래에 새로운 후행 옵션을 완성할 가능성이 있습니다(비용이 많이 들지 않음).

 
STARIJ :

OOP 덕분에 메인 프로그램은 매우 간결하고 설명이 풍부합니다. 이것이 가장 먼저 떠오른 예일 뿐입니다. 주문수 계산이 자주 필요한 경우 이점은 분명합니다. 처음에는 이해하기 어렵습니다. 그러나 결국 기능은 물론 매개변수를 사용하는 경우에도 한 때 어려움이 있었습니다.

항상 위의 루프를 수행하고 "SELL" 카운터 값을 반환하는 "int Number_of_orders()" 함수를 만들지 않는 이유를 모르겠습니다.

예를 들어:

 int Количество_ордеров()
  {
    SELL= 0 ;
     int k= OrdersHistoryTotal ()- 1 ;
     for (; k>= 0 ; k--)
    {
       if (! OrderSelect (k, SELECT_BY_POS , MODE_HISTORY )) continue ;
       if ( OrderType ()== OP_SELL )SELL++;
    }
   return (SELL);
  }


수업이 왜 여기에 있습니까?

 
Dmitry Fedoseev :

예를 들어 하나의 Expert Advisor에는 100개의 후행 중지 옵션이 포함되어야 합니다. 절차적 프로그래밍을 사용하면 다음과 같은 발판을 얻을 수 있습니다.

100개의 동일한 코드 섹션. 프로그램이 실행 중일 때 일반적으로 후행 중 하나만 활성화되고 나머지 99개 if는 단순히 리소스를 소모합니다.

이제 OOP가 있는 변형입니다. Expert Advisor를 초기화할 때 실제 활성화된 트레일링의 수에 따라 포인터로 배열을 확장하고 활성화된 트레일링에 대해서만 개체를 생성합니다. 결과적으로 다음 코드는 지속적으로 작동합니다.

하나의 후행이 활성화되면 cnt=1, 즉 불필요한 것이 없습니다.

함수 이름의 배열을 구성하고 인덱스로 이름을 선택하고 액세스하십시오.


OOP는 그것과 아무 관련이 없습니다. 이것은 OOP가 해결하고자 하는 언어의 한계입니다.

 

해보지도 않았는데 예를 들어 OOP가 없으면 언어를 untyped로 만들 수 없습니다.

 
Реter Konow :

항상 위의 루프를 수행하고 "SELL" 카운터 값을 반환하는 "int Number_of_orders()" 함수를 만들지 않는 이유를 모르겠습니다.

수업을 마치면 x.SELL x.BUY x.ALL과 필요한 모든 것을 얻을 수 있습니다. 그리고 그것들에 접근하는 것은 매우 쉽습니다. OOP 클래스 - 단순함
 
Dmitry Fedoseev :

특정 작업. 고객은 두 개의 MA에 대해 Expert Advisor를 주문하여 코드베이스에서 사용할 수 있는 모든 후행 옵션이 여기에 삽입되지만 테스터에서 속도가 느려지지 않도록 했습니다.

예, 그리고 미래에 새로운 후행 옵션을 완성할 가능성이 있습니다(비용이 많이 들지 않음).

알았습니다. 이것은 OOP에 찬성하는 부인할 수 없는 주장입니다. 고객의 어리석음과 그것에 대처할 시간의 부족, 다른 사람의 알고리즘을 개선하려는 의지가 없습니다.)) 네, 이 경우 OOP가 필요합니다. 동의한다.)
 
STARIJ :
수업을 마치면 x.SELL x.BUY x.ALL과 내가 필요한 모든 것을 얻을 수 있습니다. 그리고 그것들에 접근하는 것은 매우 쉽습니다. OOP 클래스 - 단순함
함수를 완료하면 이 함수에 전달할 모든 동일한 변수를 배열로 받을 수 있습니다. 지시에 따라 추가 사용...
 
СанСаныч Фоменко :

함수 이름의 배열을 구성하고 인덱스로 이름을 선택하고 액세스하십시오.


OOP는 그것과 아무 관련이 없습니다. 이것은 OOP가 해결하고자 하는 언어의 한계입니다.

여기에는 문자열로 주어진 함수 호출이 없습니다. 그리고 그것이있는 언어에서 이것은 테이블의 해시를 통해 수행됩니다. 즉, 이것은 끔찍한 브레이크입니다.

이러한 문제를 해결하는 일반적인 방법은 함수 포인터를 사용하는 것입니다(여기서 이에 대해 썼습니다). 그러나 포인터만 사용하는 이유는 더 편리한 방법이 있습니다. OOP는 함수에 대한 포인터를 활용할 뿐만 아니라 데이터와 코드를 편리하게 구성할 수 있습니다.

사유: