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:

  1. Aktualnej godziny
  2. Dnia tygodnia
  3. Aktualnego miesiąca

Reguły opisujące wyznaczanie tej temperatury są opisane w ARD i XTT w 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

Po zatwierdzeniu wyboru danych wejściowych są one przekazywane do kontrolera.

Kontroler

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.

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.

:-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.

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