Diagramy stanów Na podstawie UML 2.0 Tutorial Zofia Kruczkiewicz

Podobne dokumenty
Diagramy stanów Na podstawie UML 2.0 Tutorial Zofia Kruczkiewicz

Diagramy stanów tworzenie modeli analizy i projektowania Na podstawie UML 2.0 Tutorial

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Diagramy czynności tworzenie modelu przypadków użycia Wykład 2

Model przypadków użycia - rola diagramów aktywności Część 2 Wykładowca Dr inż. Zofia Kruczkiewicz

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Diagramy klas, diagramy sekwencji Wykład 4

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Implementacja modelu obiektowego

Projekt sytemu informatycznego podejście obiektowe

Diagramy czynności Na podstawie UML 2.0 Tutorial

Wzorce oprogramowania zastosowane w modelu obiektowym (wg Alan Shalloway, James R.Trott)

TECHNOLOGIE OBIEKTOWE. Wykład 3

Diagramy klas, diagramy sekwencji tworzenie modeli analizy i projektu

Wzorce oprogramowania zastosowane w modelu obiektowym (wg Alan Shalloway, James R.Trott)

Diagram stanów Laboratorium 9

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Aplikacja wielowątkowa prosty komunikator

Język UML w modelowaniu systemów informatycznych

Aplikacja wielow tkowa prosty komunikator

Laboratorium 8 Diagramy aktywności

Systemy wieloagentowe (MAS) zasady tworzenia systemów wieloagentowych za pomocą technologii MASE i JADEczęść.

Diagramy klas, diagramy sekwencji

Diagramy czynności i syntaktyka diagramów klas Wykład3

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Systemy wieloagentowe (MAS) zasady tworzenia systemów wieloagentowych za pomocą technologii MASE i JADEczęść.

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Współbieżność w środowisku Java

Literatura. J. Nilsson: Applying Domain-Driven Design and Patterns,With Examples in C# and.net, Addison-Wesley Professional, 2006

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 5

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Wykład 3_1 Przykład aplikacji: Wyszukiwanie informacji w internecie

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Podstawy języka UML2 w realnych projektach

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

Laboratorium 2_3_4 Wzorce oprogramowania zastosowane w modelu obiektowym (wg Alan Shalloway, James R.Trott)

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kolekcje - pakiet Java Collections Framework

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Klasy i obiekty cz II

Programowanie obiektowe

Programowanie obiektowe

Aplikacje w Javie- wykład 11 Wątki-podstawy

Szablony klas, zastosowanie szablonów w programach

Platformy Programistyczne Podstawy języka Java

NIFIED M L ODELLING ANGUAGE. Diagramy czynności

Podejście obiektowe. Tablice (1) obiektów

Programowanie i projektowanie obiektowe

Budowa aplikacji wielowarstwowych. Obsługa zdarzeń, zastosowanie walidatorów, wykonanie listy typu Drop Down List.

Języki i metody programowania Java. Wykład 2 (część 2)

Metody Metody, parametry, zwracanie wartości

Dawid Gierszewski Adam Hanasko

Instrukcja 4 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwa klienta: Interfejs graficzny użytkownika

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 5

Java. Programowanie Obiektowe Mateusz Cicheński

Budowa aplikacji wielowarstwowych. Zastosowanie szablonów, tabel oraz plików typu properties

Programowanie w języku Java. Kolekcje

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Kurs programowania. Wykład 9. Wojciech Macyna

Język JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

1 Atrybuty i metody klasowe

koniec punkt zatrzymania przepływów sterowania na diagramie czynności

Modelowanie aktywności. Jarosław Kuchta Programowanie Współbieżne

UML w Visual Studio. Michał Ciećwierz

Aplikacje RMI Lab4

Język UML w modelowaniu systemów informatycznych

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Michał Adamczyk. Język UML

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Kolekcje - pakiet Java Collections Framework

Iteracyjno-rozwojowy cykl oprogramowania cykl 2. Java Zofia Kruczkiewicz 1

Modelowanie obiektowe

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Java: interfejsy i klasy wewnętrzne

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Java Język programowania

Transkrypt:

Diagramy stanów Na podstawie UML 2.0 Tutorial http://sparxsystems.com.au/resources/uml2_tutorial/ Zofia Kruczkiewicz 1

Diagramy stanów 1. Diagramy stanów UML http://sparxsystems.com.au/resources/uml2_tutorial/ 2. Przykład diagramów stanów UML modelowanie wpływu przypadków użycia na stany obiektu 3. Przykład diagramu stanów UML inżynieria wprost i inżynieria odwrotna 2

Dwa rodzaje diagramów UML 2 Diagramy UML modelowania strukturalnego Diagramy pakietów Diagramy klas Diagramy obiektów Diagramy mieszane Diagramy komponentów Diagramy wdrożenia Diagramy UML modelowania zachowania Diagramy przypadków użycia Diagramy aktywności Diagramy stanów Diagramy komunikacji Diagramy sekwencji Diagramy czasu Diagramy interakcji 3

Diagramy stanów 1. Diagramy stanów UML http://sparxsystems.com.au/resources/uml2_tutorial/ 4

Diagram stanu opisuje zmiany stanu obiektu, podsystemu lub systemu pod wpływem działania operacji - iest szczególnie przydatny, gdy zachowanie obiektu jest złożone. Przedstawia on maszynę stanów jako przepływ sterowania między stanami. Diagram stanów jest grafem złożonym z wierzchołków i krawędzi: wierzchołkami są stany (prostokąty o zaokrąglonych rogach), krawędziami są przejścia (strzałki). (np. przedstawienie stanów, w jakich mogą być drzwi i zdarzenia, które powodują ich zmianę stanów) 5

Stan jest okolicznością lub sytuacją, w jakiej znajduje się obiekt jest rezultatem poprzedniej aktywności spełnia jakiś warunek jest określony przez wartości własnych atrybutów i powiązań do innych zadań wykonuje pewne czynności czeka na jakieś zdarzenie Nazwa -unikatowy ciąg znaków, brak nazwy dla stanu anonimowego Akcje wejściowe (entry) i wyjściowe (exit) - akcje wykonywane odpowiednio przy wejściu do stanu i przy wyjściu) 6

Stan początkowy (Initial) może być tylko jeden stan początkowy Stan końcowy (Final) może być kilka stanów końcowych Przejście (transition) jest związkiem między dwoma stanami, który wskazuje, że np. obiekt znajdujący się w pierwszym stanie wykona pewne akcje (Effect) i przejdzie do drugiego stanu, ilekroć zaistnieje określone zdarzenie (Trigger) i będą spełnione 7 określone warunki (Guard).

Przejście własne jest związkiem między tym samym stanem, który wskazuje, że np. obiekt znajdujący się w pewnym stanie wykona pewne akcje i powróci do tego samego stanu, ilekroć zaistnieje określone zdarzenie i będą spełnione określone warunki. 8

Stany zagnieżdżone Zagnieżdżona struktura stanu zawierająca podstany rozłączne lub współbieżne 9

Alternatywne przedstawienie stanu zagnieżdżonego za pomocą stanów nie zagnieżdżonych 10

Entry point wskazanie różnych stanów początkowych (Initial) obiektu: rozpoczęcie stanu z inicjalizacją (normalne) bez inicjalizacji (wyjątkowe) 11

Entry point szczegółowy model startu (z poziomu wyższego na poziom niższy), czyli wskazanie różnych stanów początkowych obiektu: rozpoczęcie stanu z inicjalizacją (normalne) bez inicjalizacji (wyjątkowe) 12

Punkt wyjścia modelowanie osiągnięcia alternatywnych stanów końcowych (Final) przez obiekt 13

Pseudo stan wyboru: Jeden stan początkowy W wyniku zdarzenia następuje przejście ze stanu początkowego i na podstawie formatu wygenerowanej wiadomości możliwość wyboru jednego ze stanów wyjściowych 14

Pseudo stan typu połączenie możliwości wyboru stanów końcowych po zdarzeniach zachodzących po stanach początkowych 15

Pseudo stan typu zakończenie oznacza zakończenie linii życia maszyny stanowej 16

Stany historyczne przedstawiają stany wcześniejsze (historyczne) przed przerwaniem działania maszyny stanowej (np. w chwili załączenia zasilania maszyna stanowa zmywarki pamięta stan, w którym ma wznowić działanie) 17

Równolegle podstany Stan może być podzielony między równoległe podstany wykonywane jednocześnie. (np. sterowanie przednimi (front) i tylnymi (rear) hamulcami odbywa się równolegle i musi być zsynchronizowane wyrażone za pomocą symbolu rozdzielenia na pseudo stany oraz symbolu połączenia pseudo stanów. Równoległe podstany są używane do modelowania synchronizacji wątków 18

Diagram stanów 1. Diagramy stanów UML http://sparxsystems.com.au/resources/uml2_tutorial/ 2. Przykład diagramów stanów UML modelowanie wpływu przypadków użycia na stany obiektu 19

Przykład 1 - Diagram stanów klasy Tytul 20

Przykład 2 - Klasa TRachunek Zdarzenie Dodaj_zakup (slajdy 31-33 i 39-40) Zdarzenie Podaj_wartosc (slajdy 41-45) Zdarzenie equals (slajdy 34-38) 21

Projekt przypadku użycia zdarzenie Dodaj_zakup Wstawianie nowego zakupu za pomocą diagramu sekwencji i diagramu klas. Diagram klas jest uzupełniany metodami zidentyfikowanymi podczas projektowania scenariusza przypadku użycia za pomocą diagramu sekwencji. Definiowanie kodu metod realizujących przypadek użycia na podstawie diagramów sekwencji Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 5_1 22

(5) Wstawianie nowego zakupu generowanie zdarzeń equals i Dodaj_zakup na obiekcie typu TRachunek (void TAplikacja::Wstaw_zakup (int nr, int ailosc, String dane[])) Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 4 3 1 12 Zdarzenie equals na obiekcie typu TRachunek w metodzie indexof kolekcji Rachunki, wywołanej w metodzie Szukaj_rachunek (slajdy 25-29) Zdarzenie Dodaj_zakup na obiekcie typu Trachunek (slajdy 30-33) 23

//TAplikacja public void Wstaw_zakup (int nr, int ile, String dane[]) { TRachunek rachunek; TFabryka fabryka = new TFabryka(); TProdukt1 produkt1 = fabryka.podaj_produkt(dane); if ((rachunek=szukaj_rachunek(nr))!= null) if ((produkt1=szukaj_produkt(produkt1))!= null) rachunek.dodaj_zakup(new TZakup(ile, produkt1)); Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 5_1 24

(3) Szukanie rachunku (TRachunek TAplikacja::Szukaj_rachunek(int nr)) Zdarzenie equals na obiekcie typu TRachunek w metodzie indexof kolekcji Rachunki typu ArrayList 11 Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 4 25

//TAplikacja static private ArrayList <TRachunek> Rachunki = new ArrayList <TRachunek>(); public TRachunek Szukaj_rachunek (int nr) { TRachunek rachunek = new TRachunek(nr); int idx; if ((idx=rachunki.indexof(rachunek))!= -1) { rachunek=rachunki.get(idx); return rachunek; return null; Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 5_1 26

//metoda indexof obiektu Rachunki klasy typu //ArrayList public int indexof(object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementdata[i]==null) return i; else { for (int i = 0; i < size; i++) if (o.equals(elementdata[i])) return i; return -1; Zdarzenie equals na obiekcie typu TRachunek w metodzie indexof kolekcji Rachunki typu ArrayList 27

(11) boolean TRachunek::equals(Object rachunek) Dozór zdarzenia equals na obiekcie typu TRachunek Akcja zdarzenia equals na obiekcie typu Trachunek zwrócenie wyniku dozoru true lub false Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 4 28

//TRachunek //metoda zdarzeniowa equals // metody użyte w kodzie metody są akcjami zdarzenia //instrukcje warunkowe mogą być użyte jako dozory public boolean equals (Object atrachunek) { TRachunek rachunek= (TRachunek)aTRachunek; boolean bstatus = true; if ( numer!= rachunek.numer ) bstatus = false; return bstatus; Dozór zdarzenia equals na obiekcie typu TRachunek Akcja zdarzenia equals na obiekcie typu TRachunek zwrócenie wyniku dozoru true lub false Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 5_1 29

(12) void TRachunek::Dodaj zakup(tzakup atzakup) metoda zdarzeniowa 13 Dozór zdarzenia Dodaj_zakup na obiekcie typu TRachunek Akcje zdarzenia Dodaj_zakup na obiekcie typu TRachunek Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 4 30

//TRachunek //metoda zdarzeniowa Dodaj_zakup // metody użyte w kodzie metody są akcjami zdarzenia //instrukcje warunkowe mogą być użyte jako dozory private ArrayList<TZakup> Zakupy = new ArrayList<TZakup>(); public void Dodaj_zakup (TZakup atzakup) { TZakup zakup; if ((zakup = Szukaj_zakup(aTZakup))!= null) zakup.dodaj_ilosc(atzakup.podaj_ilosc()); else Zakupy.add(aTZakup); Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 5_1 31

Projekt przypadku użycia zdarzenie Podaj_wartosc Obliczanie wartości rachunku za pomocą diagramu sekwencji i diagramu klas. Diagram klas jest uzupełniany metodami zidentyfikowanymi podczas projektowania scenariusza przypadku użycia za pomocą diagramu sekwencji. Definiowanie kodu metod realizujących przypadek użycia na podstawie diagramów sekwencji Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 5_1 32

(6) Obliczanie wartosci rachunku generowanie zdarzeń equals i Podaj_wartosc na obiekcie typu TRachunek (float TAplikacja::Podaj_wartosc(int nr, int podatek_)) 3 Zdarzenie equals na obiekcie typu TRachunek w metodzie indexof kolekcji Rachunki, wywołanej w metodzie Szukaj_rachunek (slajdy 25-29) 15 Zdarzenie Podaj_wartosc na obiekcie typu TRachunek (slajdy 35-36) Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 4 33

//TAplikacja public float Podaj_wartosc (int nr, int podatek_) { TRachunek rachunek; rachunek = Szukaj_rachunek(nr); if (rachunek!= null) return rachunek.podaj_wartosc(podatek_); return 0F; Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 5_1 34

(15) float TRachunek::Podaj_wartosc(int podatek_) Dozór zdarzenia Podaj_wartosc na obiekcie typu TRachunek Akcje zdarzenia Podaj_wartosc na obiekcie typu TRachunek 16 Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 4 35

//TRachunek //metoda zdarzeniowa Dodaj_zakup // metody użyte w kodzie metody są akcjami zdarzenia //instrukcje warunkowe mogą być użyte jako dozory private ArrayList<TZakup> Zakupy = new ArrayList<TZakup>(); public float Podaj_wartosc (int podatek_) { float suma=0; TZakup zakup; Iterator <TZakup> it=zakupy.iterator(); while (it.hasnext()) { zakup = it.next(); suma += zakup.podaj_wartosc(podatek_); return suma; Zofia Kruczkiewicz, Modelowanie i analiza systemów informatycznych 5_1 36

Diagramy stanów 1. Diagramy stanów UML http://sparxsystems.com.au/resources/uml2_tutorial/ 2. Przykład diagramów stanów UML modelowanie wpływu przypadków użycia na stany obiektu 3. Przykład diagramu stanów UML inżynieria wprost i inżynieria odwrotna 37

Przykład 3.1 diagram stanu protokołu komunikacji klasy FulfillSearchReaquest (na podstawie projektu dostarczonego z programem AgentTool1.8.3 ) 38

Przykład 3.2 kod wygenerowany na podstawie diagramu stanu protokołu komunikacji klasy FulfillSearchReaquest (na podstawie projektu dostarczonego z programem AgentTool1.8.3 ) /* Class for Component FulfillSearchRequests * automatically generated by agenttool - agentmom transform ver 0.5*/ package wyklad2; import java.net.*; import java.io.*; import java.awt.*; import afit.mom.*; import java.util.*; public class FulfillSearchRequests extends afit.mom.component { public Object task; public Object bidlist; public Object t; public Object time; public Object winner; public Object bidder; public Object cost; public Vector bidders; public Vector list; public task_cost_type task_cost; public Object ag; public Object a; public Object results; public Object reason; 39

/* Constructor for component. * automatically generated by agenttool - agentmom transform ver 0.5 */ public FulfillSearchRequests (Agent a) { parent = a; /* gettask Method * automatically generated by agenttool - agentmom transform ver 0.5 * */ public Object gettask() { /* Enter method code here */ return null; /* newlist Method * automatically generated by agenttool - agentmom transform ver 0.5 * */ public Object newlist() { /* Enter method code here */ return null; 40

/* settimer Method * automatically generated by agenttool - agentmom transform ver 0.5 * */ public Object settimer(object time) { /* Enter method code here */ return null; /* evaluatebids Method * automatically generated by agenttool - agentmom transform ver 0.5 * */ public Object evaluatebids(object bidlist) { /* Enter method code here */ return null; /*remove Method * automatically generated by agenttool - agentmom transform ver 0.5 * */ public Object remove(object bidder, Object list) { /* Enter method code here */ return null; 41

/*Conversation14_1 Method * automatically generated by agenttool - agentmom transform ver 0.5 */ public void Conversation14_1(Object bidder, Object cost) { ConnectionData conndata = (ConnectionData)bidder; String serverhost = conndata.serverhost; int serverport = conndata.serverport; Conversation14_1_searchManager_I conv = new Conversation14_1_searchManager_I(this,serverHost,serverPort,cost); conv.run(); /*Conversation10_1 Method * automatically generated by agenttool - agentmom transform ver 0.5 */ public void Conversation10_1(Vector bidders) { if (bidders!= null) for(int i = 0; i < bidders.size(); i++) { ConnectionData conndata = (ConnectionData)bidders.elementAt(i); String serverhost = conndata.serverhost; int serverport = conndata.serverport; Conversation10_1_searchManager_I conv = new Conversation10_1_searchManager_I(this, serverhost, serverport); conv.run(); 42

/*Conversation15_1 Method * automatically generated by agenttool - agentmom transform ver 0. */ public void Conversation15_1(Vector list) { if (list!= null) for(int i = 0; i < list.size(); i++) { ConnectionData conndata = (ConnectionData)list.elementAt(i); String serverhost = conndata.serverhost; int serverport = conndata.serverport; Conversation15_1_searchManager_I conv = new Conversation15_1_searchManager_I(this, serverhost, serverport); conv.run(); /*Conversation13_1 Method * automatically generated by agenttool - agentmom transform ver 0.5 */ public void Conversation13_1(Object ag, Object a) { ConnectionData conndata = (ConnectionData)ag; Socket server = conndata.server; ObjectInputStream input = conndata.input; ObjectOutputStream output = conndata.output; Thread t = new Thread(new Conversation13_1_searchManager_R(server,input,output, this, m, a)); t.start(); 43

/*Conversation12_1 Method * automatically generated by agenttool - agentmom transform ver 0.5 */ public void Conversation12_1(Object bidder) { ConnectionData conndata = (ConnectionData)bidder; Socket server = conndata.server; ObjectInputStream input = conndata.input; ObjectOutputStream output = conndata.output; Thread t = new Thread(new Conversation12_1_searchManager_R(server, input, output, this, m)); t.start(); /*Conversation11_1 Method * automatically generated by agenttool - agentmom transform ver 0.5 */ public void Conversation11_1(Object bidder) { ConnectionData conndata = (ConnectionData)bidder; Socket server = conndata.server; ObjectInputStream input = conndata.input; ObjectOutputStream output = conndata.output; Thread t = new Thread(new Conversation11_1_searchManager_R(server, input, output, this, m)); t.start(); 44

/*add Method * automatically generated by agenttool - agentmom transform ver 0.5 * */ public Object add(object bid, Object bidlist) { /* Enter method code here */ return null; /*display Method * automatically generated by agenttool - agentmom transform ver 0.5 * */ public void display(object results) { /* Enter method code here */ 45

/*run method - controls state table behavior. * automatically generated by agenttool - agentmom transform ver 0.5*/ public void run() { int state = 0; boolean notdone = true; /* state constant definitions */ final int StartState = 0; final int idle = 1; final int begin = 2; final int waitforbids = 3; final int evaluate = 4; final int WaitForResults = 5; final int InformLosers = 6; final int StartState_out = 7; final int idle_out = 8; final int waitforbids_out = 9; final int evaluate_out = 10; final int begin_out = 11; final int InformLosers_out = 12; final int WaitForResults_out = 13; //set up while (notdone) { switch (state) { case StartState : state = StartState_out; break; case StartState_out : state = idle; break; 46

case idle : task = gettask(); state = idle_out; break; case idle_out : if (task) // [task] state = begin; else if (!task) // [!task] state = idle; break; case begin : bidlist = newlist(); t = settimer(time); state = begin_out; break; case begin_out : // /Conversation10_1(<bidders>) Conversation10_1(bidders); state = waitforbids; break; case waitforbids : state = waitforbids_out; break; case waitforbids_out : m = checkexternal(); if (m!= null) { // receive(abid(task, cost), ag) /Conversation13_1(ag, a) if (m.performative.equals("abid")) { task_cost = (task_cost_type)m.content; task = task_cost.task; cost = task_cost.cost; Conversation13_1(ag, a); state = waitforbids; else // [timeexpired(t)] if ( timeexpired(t) ) state = evaluate; break; 47

case evaluate : winner = evaluatebids(bidlist); list = remove(winner.bidder, list); state = evaluate_out; break; case evaluate_out : // /Conversation14_1(winner.bidder, winner.cost) Conversation14_1(winner.bidder, winner.cost); state = InformLosers; break; case InformLosers : state = InformLosers_out; break; case InformLosers_out : // /Conversation15_1(<list>) Conversation15_1(list); state = WaitForResults; break; case WaitForResults : state = WaitForResults_out; break; case WaitForResults_out : m = checkexternal(); if (m!= null) { // receive(info(results), bidder) /Conversation12_1(bidder) if (m.performative.equals("info")) { results = m.content; Conversation12_1(bidder); state = idle; // receive(sorry(reason), bidder) /Conversation11_1(bidder) else if (m.performative.equals("sorry")) { reason = m.content; Conversation11_1(bidder); state = idle; break; // end run // end class 48