/**
 * Abstract Agent class
 *
 * <p>Agent implementations should inherit from this class. It provides convenient methods for
 * managing the agent name and description.
 */
public abstract class AbstractAgent implements Agent {
  protected Description description = Description.getUninitializedDescription(this.getClass());

  @Override
  public String getName() {
    return description.getName();
  }

  @Override
  public void setName(String name) {
    description.setName(name);
  }

  @Override
  public Description getDescription() {
    return new Description(description);
  }

  @Override
  public void setDescription(Description description) {
    this.description = new Description(description);
  }
}