Java tutorial
/** * ------------------------------------------------------ * Laboratrio de Linguagens e Tcnicas Adaptativas * Escola Politcnica, Universidade So Paulo * ------------------------------------------------------ * * This program is free software: you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software * Foundation, either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will * be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License * for more details. * **/ package br.usp.poli.lta.cereda.aa.model; import br.usp.poli.lta.cereda.aa.utils.IdentifierUtils; import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; /** * Classe que representa a definio formal de uma submquina. A inteno * tentar representar a teoria da forma mais precisa possvel. * @author Paulo Roberto Massa Cereda * @version 1.0 * @since 1.0 */ public class Submachine { // atributos da classe, incluindo um identificador unvoco que representa // a submquina corrente, um nome no qual a submquina referenciada // posteriormente, um estado inicial ou de entrada, um conjunto de todos os // estados da submquina, e um conjunto de estados finais ou de aceitao. private int identifier; private String name; private State initialState; private Set<State> acceptingStates; private Set<State> states; /** * Construtor. Define a estrutura da submquina como um todo. * @param name Nome da submquina. * @param states Conjunto de todos os estados da submquina. * @param initialState Estado inicial ou de entrada da submquina. * @param acceptingStates Conjunto de estados finais ou de aceitao. */ public Submachine(String name, Set<State> states, State initialState, Set<State> acceptingStates) { this.identifier = IdentifierUtils.getSubmachineIdentifier(); this.name = name; this.initialState = initialState; this.acceptingStates = acceptingStates; this.states = states; // valida se todos os estados definidos esto de acordo com a teoria Validate.isTrue(states.contains(initialState) && states.containsAll(acceptingStates), "Existem estados indefinidos na submquina '".concat(String.valueOf(name).concat("'."))); } /** * Obtm o identificador unvoco da submquina. * @return Um valor inteiro que representa o identificador da submquina. */ public int getIdentifier() { return identifier; } /** * Define o identificador unvoco da submquina. * @param identifier Um valor inteiro que representa o identificador da * submquina. */ public void setIdentifier(int identifier) { this.identifier = identifier; } /** * Obtm o nome da submquina. * @return Nome da submquina. */ public String getName() { return name; } /** * Define o nome da submquina. * @param name Nome da submquina. */ public void setName(String name) { this.name = name; } /** * Obtm o estado inicial ou de entrada da submquina. * @return Estado inicial ou de entrada da submquina. */ public State getInitialState() { return initialState; } /** * Define o estado inicial ou de entrada da submquina. * @param initialState Estado inicial ou de entrada da submquina. */ public void setInitialState(State initialState) { this.initialState = initialState; } /** * Obtm todos os estados de aceitao ou de sada da submquina. * @return Um conjunto contendo os estados de aceitao ou de sada da * submquina. */ public Set<State> getAcceptingStates() { return acceptingStates; } /** * Define o conjunto de estados finais ou de aceitao da submquina. * @param acceptingStates Conjunto de estados finais da submquina. */ public void setAcceptingStates(Set<State> acceptingStates) { this.acceptingStates = acceptingStates; } /** * Obtm todos os estados da submquina. * @return Conjunto de todos os estados da submquina. */ public Set<State> getStates() { return states; } /** * Define o conjunto de todos os estados da submquina. * @param states Conjunto de todos os estados da submquina. */ public void setStates(Set<State> states) { this.states = states; } /** * Retorna uma representao textual do conjunto de estados. * @param set Conjunto de estados. * @param separator Separador dos elementos. * @return Representao textual do conjunto de estados. */ private String printElements(Set<State> set, String separator) { StringBuilder sb = new StringBuilder(); sb.append("("); sb.append(StringUtils.join(set, separator)); sb.append(")"); return sb.toString(); } /** * Retorna uma representao textual da submquina corrente. * @return Representao textual da submquina corrente. */ @Override public String toString() { String separator = ", "; String div = " :: "; StringBuilder sb = new StringBuilder(); sb.append("Submquina: { "); sb.append("Identificador: ").append(identifier).append(div); sb.append("Nome: ").append(name).append(div); sb.append("Estados: ").append(printElements(states, separator)).append(div); sb.append("Estado inicial: ").append(initialState).append(div); sb.append("Estados de aceitao: ").append(printElements(acceptingStates, separator)); sb.append(" }"); return sb.toString(); } }