001/*
002 * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences.
003 * Copyright (C) 2006 - JScience (http://jscience.org/)
004 * All rights reserved.
005 * 
006 * Permission to use, copy, modify, and distribute this software is
007 * freely granted, provided that this notice is preserved.
008 */
009package org.jscience.mathematics.structure;
010
011/**
012 * This interface represents a structure with a binary additive 
013 * operation (+), satisfying the group axioms (associativity, neutral element,
014 * inverse element and closure).
015 * 
016 * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
017 * @version 3.0, February 13, 2006
018 * @see <a href="http://en.wikipedia.org/wiki/Mathematical_Group">
019 *      Wikipedia: Mathematical Group</a>
020 */
021public interface GroupAdditive<G> extends Structure<G> {
022
023    /**
024     * Returns the sum of this object with the one specified.
025     *
026     * @param  that the object to be added.
027     * @return <code>this + that</code>.
028     */
029    G plus(G that);
030
031    /**
032     * Returns the additive inverse of this object. It is the object such as
033     * <code>this.plus(this.opposite()) == ZERO</code>,
034     * with <code>ZERO</code> being the additive identity.
035     *
036     * @return <code>-this</code>.
037     */
038    G opposite();
039
040}