Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:miw:miw08_ruleruntimeo:mvcthermostate [2019/06/27 15:50]
pl:miw:miw08_ruleruntimeo:mvcthermostate [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Termostat w modelu MVC ======
 +
 +===== Cel =====
 +
 +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: ​
 +  - Aktualnej godziny
 +  - Dnia tygodnia
 +  - Aktualnego miesiąca
 +
 +Reguły opisujące wyznaczanie tej temperatury są opisane w ARD i XTT w [[hekate:​hekate_case_thermostat|modelu termostatu]].
 +
 +
 +===== Realizacja projektu =====
 +
 +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 :
 + ==== Widok ====
 + 
 + ​**ThermostatView** prosta klasa tworząca Swingowe okno umożliwiające wprowadzenie aktualnej Godziny, Dnia tygodnia oraz Miesiąca, oraz Wyświetlająca wyznaczoną temperaturę. ​
 +
 +{{:​pl:​miw:​miw08_ruleruntimeo:​termostatview.png|:​pl:​miw:​miw08_ruleruntimeo:​termostatview.png}}
 +
 +Po zatwierdzeniu wyboru danych wejściowych są one przekazywane do kontrolera.
 +
 +==== Kontroler ====
 +
 + klasa **ThermostatController** jest bardzo podobna do LogtalkControler z [[pl:​miw:​miw08_ruleruntimeo:​mvceditor#​dokonane_modyfikacje|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 :
 +
 +<code java>
 +
 +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;
 + }
 +
 +</​code> ​
 +
 +Metoda ta zwraca wyznaczoną w modelu wartość temperatury,​ która zostaje potem wyświetlona w Widoku.
 +
 +==== Model ====
 + 
 +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.
 +
 +<code prolog>
 +
 +:​-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.
 +
 +</​code>​
 +
 +Pełny kod obiektu [[pl:​miw:​miw08_ruleruntimeo:​thermostatmodel|thermostatModel]],​ natomiast źródła pełnego projektu znajdują się w sekcji [[pl:​miw:​miw08_ruleruntimeo#​projekt|Projekt]].
 +
  
pl/miw/miw08_ruleruntimeo/mvcthermostate.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0