According to this salesforce developer blog when passing data down from parent to child component, you can use attributes (or exposed methods) and when passing data up from child to parent you can use events -
The way to pass data up and around in the Lightning component hierarchy is to use events
But, is there any reason why we shouldn't use bound attributes to pass data up the hierarchy? It seems to work perfectly fine - if an attribute in the child component is changed, and that attribute is bound to an attribute in the parent component, the parent component seems to change too.