/**
 * <copyright>
 * </copyright>
 *
 * $Id: ChildObject4.java,v 1.1 2006/09/21 00:56:52 mtaal Exp $
 */
package main;

/**
 * <!-- begin-user-doc --> A representation of the model object '<em><b>Child Object4</b></em>'.
 * <!-- end-user-doc -->
 * 
 * <p>
 * The following features are supported:
 * <ul>
 * <li>{@link main.ChildObject4#getThickness <em>Thickness</em>}</li>
 * </ul>
 * </p>
 * 
 * @see main.MainPackage#getChildObject4()
 * @model
 * @generated
 */
public interface ChildObject4 extends BaseObject {
	/**
	 * Returns the value of the '<em><b>Thickness</b></em>' attribute. <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Thickness</em>' attribute isn't clear, there really should be more
	 * of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * 
	 * @return the value of the '<em>Thickness</em>' attribute.
	 * @see #setThickness(Integer)
	 * @see main.MainPackage#getChildObject4_Thickness()
	 * @model
	 * @generated
	 */
	Integer getThickness();

	/**
	 * Sets the value of the '{@link main.ChildObject4#getThickness <em>Thickness</em>}' attribute.
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param value
	 *          the new value of the '<em>Thickness</em>' attribute.
	 * @see #getThickness()
	 * @generated
	 */
	void setThickness(Integer value);

} // ChildObject4