Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Una delle funzionalità principali dei linguaggi OOP (Object Oriented Programming) è l'ereditarietà. L'ereditarietà è la possibilità di usare tutte le funzionalità di una classe esistente ed estendere tali funzionalità senza riscrivere la classe originale.
Business Rules Framework supporta due tipi di ereditarietà delle classi: implementazione e interfaccia. L'ereditarietà dell'implementazione si riferisce alla possibilità di usare le proprietà e i metodi di una classe base senza codice aggiuntivo. L'ereditarietà dell'interfaccia si riferisce alla possibilità di usare solo i nomi delle proprietà e dei metodi, ma la classe figlio deve fornire l'implementazione.
Le regole possono essere scritte in termini di classe base comune, ma gli oggetti asserti nel motore possono essere provenienti da classi derivate. Nell'esempio seguente RegularEmployee e ContractEmployeee sono classi derivate della classe base Employee.
class Employee
{
public string Status()
{
// member definition
}
public string TimeInMonths()
{
// member definition
}
}
class ContractEmployee : Employee
{
// class definition
}
class RegularEmployee : Employee
{
// class definition
}
Si supponga di avere la regola seguente.
Regola 1
IF Employee.TimeInMonths < 12
THEN Employee.Status = "New"
In fase di esecuzione, se l'utente asserisce due oggetti, un'istanza di ContractEmployee e l'altra un'istanza di RegularEmployee, entrambe le istanze dell'oggetto vengono valutate rispetto alla regola descritta in precedenza.
L'utente può anche asserire oggetti classe derivata nelle azioni usando un'asserzione. In questo modo, le regole che contengono l'oggetto derivato e il relativo tipo di base nelle relative condizioni vengono rivalutate, come illustrato nell'esempio seguente.
Regola 2
IF Employee.Status = "Contract"
THEN Employee.Bonus = false
Assert(new ContractEmployee())
Tutte le regole contenenti il tipo Employee o il tipo ContractEmployee nelle relative condizioni vengono rivalutate dopo l'asserzione. Il tipo di ereditarietà in questo esempio è l'implementazione. Anche se viene asserta solo la classe derivata, anche la classe base viene asserta se le regole vengono scritte usando metodi nella base anziché nella classe derivata.