Celem tego przykładu było stworzenie prostej aplikacji do wyznaczania temperatury opartej o wzorzec MVC, implementując Model w obiektach Logtalk oraz Widok i Kontroler w J2SE. Termostat ma wyznaczać dokładną temperaturę jak powinna być w ogrzewanym biurze na podstawie trzech danych:
Reguły opisujące wyznaczanie tej temperatury są opisane w ARD i XTT w modelu termostatu.
Jest to również bardzo prosty przykład, aby go zaimplementować wystarczy tak naprawdę utworzyć trzy klasy odpowiadające każdemu z modułów wzorca :
ThermostatView prosta klasa tworząca Swingowe okno umożliwiające wprowadzenie aktualnej Godziny, Dnia tygodnia oraz Miesiąca, oraz Wyświetlająca wyznaczoną temperaturę.
Po zatwierdzeniu wyboru danych wejściowych są one przekazywane do kontrolera.
klasa ThermostatController jest bardzo podobna do LogtalkControler z przykładu z edytorem tekstu. Wewnątrz konstruktora dokonuje koniecznej konfiguracji Logtalka i SWIProloga, oraz tworzy obiekt Logtalk thermostatModel. Następnie poprzez metodę GetTemperature wywołuje zmianę modelu w następujący sposób :
public int GetTemperature(int hour, int day, int month) { Query getTemp = new Query("thermostatModel::get_temp(" +hour + ", "+ day + ", " + month + ", T)."); int value = -1; if (getTemp.hasMoreElements()) { Object elem = getTemp.nextElement(); if (elem instanceof java.util.Hashtable) { java.util.Hashtable<String, jpl.Integer> solution = (java.util.Hashtable<String, jpl.Integer>) elem; jpl.Integer temp = solution.get("T"); value = temp.intValue(); } } return value; }
Metoda ta zwraca wyznaczoną w modelu wartość temperatury, która zostaje potem wyświetlona w Widoku.
Zaimplementowany w Logtalku obiekt thermostatModel, który zawiera jedną publiczną metodę get_temp(Hour, Day, Month, T), która umożliwia wyznaczenie aktualnej temperatury zgodnie z modelem reguł narzuconych przez projekt.
:-object(thermostatModel, imports(properties)). :-public(get_temp/4). get_temp(Hour, Day, Month, T):- checkDayTime(Hour), season(S,Month), checkWorkingTime(Day, Hour, O), temperature(S, O, T), write(T). ... :-end_object.
Pełny kod obiektu thermostatModel, natomiast źródła pełnego projektu znajdują się w sekcji Projekt.