We were given a lab that I'm very confused over the teacher's notes. However I have figured the program out for myself, using my way but not sure if it's actually using composition. "A relationship between classes where an object is a data field within another class." is what we were told.

Our assignment was this:

Define a Date Class that will be used for containment.
Attributes: month, day, year.
Valid values: month 1-12, day 1-30, year 1900-2012. 
 
Define an Employee Class that will be used as a container. 
Attributes: name, birthDate, hireDate.
 
Define methods to ensure ownership of contained objects.
Demonstrate Composition.

Here is my code.

public class CompositionDemo{
 
	public static void main(String[] args){
	Date b = new Date(03,17,1987);
	Date h = new Date(05,20,2003);
 
	Employee joe = new Employee("Joe",b,h);
	System.out.println("Name: " + joe.getName());	
	System.out.println("Hire date: " + joe.getHireDate());	
	System.out.println("Birth date: " + joe.getBirthDate());	
		}
 
}

//contained class
 
public class Date{
 
	private int month;
	private int day;
	private int year;
 
public Date(int m, int d, int y){
	month = m;
	day = d;
	year = y;
}
 
}

//containing class
 
public class Employee{
 
	private String name;
	private Date birthDate;
	private Date hireDate;
 
 
public Employee(String nm, Date bD, Date hD){
 
	name = nm;
	birthDate = bD;
	hireDate = hD;
}
 
public Date getHireDate(){
 
	return this.hireDate;
}
 
public Date getBirthDate(){
 
	return this.birthDate;
}
 
public String getName(){
 
	return this.name;
}
 
}

Does this truly display composition correctly, or am I misunderstanding the concept? The reason I ask is because when I follow his notes he wants the Date and Employee class to look something like this....


public class Employee{
 
	private String name;
	private Date birthDate;
	private Date hireDate;
 
 
	public Employee(String n, Date bD, Date hD){
 
		name = new String(n);
		birthDate = bD.copy();
		hireDate = hD.copy();
	}
 
	public Date getHireDate(){
 
		return this.hireDate.getDate();
	}
}

public class Date{
 
 
	private int month;
	private int day;
	private int year;
 
 
	public Date(Date d){
		this.month = d.month;
		this.day = d.day;
		this.year = d.year;
 
	}
 
	public Date copy(){
 
		return new Date(this);
	}
 
	public Date getDate(){
 
		return this.copy();
	}
}


So, honestly I have no clue how to use his example to demonstrate, because it seems like a paradox where it wants a date object in the date constructor but in order to create a Date object you need a date object already!!!?!?! It confuses me pretty bad. Looking for any and all help whether my way was correct and some tips to better understand composition. Thanks!