Funcții de ordin superior
Una dintre cele mai importante aplicații ale delegațiilor este legată de funcțiile de ordine superioare. Funcția de ordin superior este o funcție (metoda) din clasa care are una sau mai multe argumente aparțin tipului funcțional. Fără aceste funcții, programarea este destul de dificil de gestionat. Un exemplu clasic este funcția de calcul a integralei, pe care unul dintre argumentele precizează integrantul. Un alt exemplu este funcția. sortarea obiectelor. Argumentul său este funcția Comparare. care compară două obiecte. În funcție de faptul dacă funcția de comparare va fi transferată la funcția de sortare obiecte de intrare vor fi sortate în diverse moduri, de exemplu, prin nume sau prin tasta sau de mai multe câmpuri. Opțiunile pot fi o mulțime, cum sunt ele definite de clasa, care descrie obiectele care urmează să fie sortate.
Calculul integralului
Să analizăm mai detaliat situația cu funcții de ordin superior cu exemplul problemei de calcul al unui integral definit cu o precizie dată. În acest scop, creați o clasă în care va fi descris delegatul. determinarea contractului. pe care funcțiile integrand trebuie să le satisfacă. În aceeași clasă, definim metoda care calculează integralele. De fapt, sarcina acestei metode reprezintă o funcție a ordinii superioare. Vă voi da codul care descrie clasa:
- Clasa HighOrderIntegral este concepută pentru a funcționa cu funcții. Acesta conține o descriere a clasei funcționale - delega SubIntegralFun. care definește o clasă de funcții cu un argument de tip dublu și returnează o valoare de același tip.
- Metoda EvalIntegral - metoda principală a clasei vă permite să calculați un integral integrat. Această metodă este o funcție de ordin superior. deoarece unul dintre argumentele sale este funcția integrand aparținând clasei SubIntegralFun.
- Schema clasică este utilizată pentru a calcula integralele. Intervalul de integrare este împărțit în n părți, iar suma parțială este calculată prin metoda trapezoidală. reprezentând valoarea aproximativă a integrala. Apoi n se dublează și se calculează o sumă nouă. Dacă diferența dintre două aproximări este mai mică decât eps-ul de precizie specificat. apoi evaluarea capetelor integrale, altfel procesul se repetă într-un ciclu. Ciclul se încheie fie când se atinge precizia specificată, fie când n atinge o anumită valoare limită (în cazul nostru - 2 15).
- Calcularea sumei parțiale a integralului prin metoda trapezoidală se realizează prin procedura închisă I.
- Ulterior, clasa poate fi extinsă și, în plus față de evaluarea integralului, poate calcula și alte caracteristici ale funcțiilor.
Pentru a demonstra munca cu clasa HighOrderIntegral. Voi da și o clasă de funcții. unde sunt descrise mai multe funcții care satisfac contractul. care este specificat de clasa SubIntegralFun:
Și acum ia în considerare metoda de clasă client care realizează crearea obiectelor necesare și testează munca lor: