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!


LinkBack URL
About LinkBacks
Reply With Quote