CS100J, Exercise 5 (Worth 2 core points) The alien race Parthon reproduces by parthenogenesis, i.e. one adult can reproduce without the assistance of another Parthon. A family tree of a Parthon family might look like this: Dimmu age 60 | Dimmu is Borgir's parent. | Borgir age 40 / | \ / | \ Arcturus Tad Borknagar age 20 age 18 age 17 Arcturus, Tad, and Borknagar are siblings. These kinds of family trees can be represented by objects instantiated from a class $Parthon$ with the instance variables and methods shown below. Instance variables for class Parthon + $name$ : name of the Parthon. + $age$ : age of the Parthon. + $parent$ : parent, if any, of the Parthon + $olderSibling$ : older sibling, if any, closest in age to the Parthon + $youngestChild$ : youngest child, if any, of the Parthon Required instance methods for class Parthon + $toString$ : print the Parthon's name and age and the names of its following relatives: parent, grandparent, youngest child, oldest child. + $grandparent()$ : return (a reference to) the Parthon's grandparent + $oldestChild()$ : return (a reference to) the Parthon's oldest child How to Create a family tree A family tree will be created in some main class. That main class will instantiate Parthons and establish all the relationships by somehow "setting" all the instance variables appropriately. "Setting" can be done in a number of different ways. Tthe main class will invoke appropriately defined constructors and methods of the Parthon class. Notes: + Enforce encapsulation using $public$ and $private$ modifiers when appropriate. Consequently, you will have additional setter and getter methods. + Reduce reduce redundancy with constructors and instance methods, if necessary. + At no point do you actually draw/print the picture of a family tree! + Except for $name$ and $age$, each instance variable is a reference to a Parthon. + The special value $null$ is used to indicate that a relative does not exist. For example, Ani's parent would be set to $null$, and when there is no grandparent or oldest child, $null$ is returned by the corresponding methods. + $toString()$ should call $grandparent$ and $oldestChild$. + $toString()$ should print appropriate messages for missing relatives, e.g. "no grandparent". + An only child is both youngest and oldest! + Use this basic algorithm in $oldestChild()$ to find the oldest child: $oldest$ <-- youngest child; if youngest child exists while $oldest$ has an older sibling $oldest$ <-- its older sibling