Садржај
2 Класе и објекти
2.1 Основни појмови о класама и објектима
3 Генеричке класе
4 Наслеђивање и полиморфизам
5 Примери пројеката са решењима
5.1 Различита кретања
5.2 Квиз
5.4 Приказ рада алгоритама сортирања

Парсер – креатор функција

За корисника наших класа – функција било би неудобно да их повезује у свом коду онако како смо ми то учинили ради брзе пробе. Природнији начин за корисника је да он зада функцију у облику текста, а да ми тај текст неким својим методом анализирамо и исповезујемо функције тако да представљају задату сложену функцију.

Таква анализа текста може да се обави техником рекурзивног спуста, што је овде и урађено. Међутим, пошто техника рекурзивног спуста излази из оквира овог курса, овде се нећемо бавити детаљнијим објашњавањем класе Parser, која ту технику спроводи. За потребе разумевања овог примера довољно је да знамо да класа Parser има статички јавни метод који прима текстуални запис функције као параметар, а враћа референцу на базну класу Function, која израчунава вредности задате функције.

public class Parser
{
    public static bool Evaluate(string userInput,
            out Function f, out string errMessage)
    {
        // ...
    }

    // ...
}

Логичка вредност коју метод директно враћа говори да ли је израчунавање успело (могуће је да запис функције не буде синтаксно исправан). У случају да му ова функција врати false, корисник може да погледа вредност излазног параметра errMessage, да би разумео зашто запис који је проследио није исправан. Уколико функција врати true, излазни параметар f ће да садржи поменуту референцу на базну класу Function. Корисник преко ње може да добија вредности функције коју је задао, а да не мора да зна ништа о стварној класи објекта, или било ком другом детаљу из библиотеке Funkcije.

Све што је кориснику библиотеке Funkcije потребно јесте да позове метод Parser.Evaluate, а затим да за добијени објекат F користи његов метод F.Value. На пример:

string expression = "sqrt(x*x+1)";
Function F = null;
string errMessage = "";
if (Parser.Evaluate(expression, out F, out errMessage))
    Console.WriteLine(F.Value(2));

Видимо да је интерфејс целе библиотеке веома мали (само методи Parser.Evaluate и F.Value), што је чини веома једноставном за употребу и на известан начин елегантном.

И раније смо помињали да приликом креирања библиотека (или било каквих модула) треба да настојимо да њихов интерфејс буде мали, тј. најмањи који је кориснику библиотеке/модула довољан. Ипак, ретки су случајеви да интерфејс неког модула буде овако мали, па зато библиотеку Funkcije истичемо као посебно илустративан пример у том смислу.

Библиотека Funkcije ће нам бити потребна у апликацијама које следе. Да бисте касније могли да испробате сваку од апликација, потребно је да урадите следеће:

  • Креирајте нови пројекат типа Class Library (.NET framework) и назовите га Funkcije

  • Додајте у пројекат нови фајл (десни клик на пројекат у прозору Solution Explorer, ставка Add, а затим New Item у искачућем менију), назовите га Parser.cs и копирајте у њега кôд класе Parser, који је дат у наставку.

  • Додајте још један фајл у пројекат, назовите га Functions.cs и копирајте у њега садржај дат на крају претходне стране.

Прву, једноставну апликацију која користи направљену библиотеку можете да преузмете већ овде. Као што смо најавили, то је апликација која табелира вредности функције коју корисник зада.

Ако желите да испробате рад апликације, креирајте нови пројекат типа Console Application, подесите зависност од библиотеке и копирајте садржај дат у наставку у фајл Program.cs.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+