property.sell(buyer, seller, agent, contract)
seller.sell(property, buyer, agent, contract)
buyer.buy(property, seller, agent, contract)
agent.sell(property, buyer, seller, contract)
contract.sign(property, buyer, seller, agent)
The state of all the objects may be modified, and there are different types of properties, buyers, sellers and agents. So you might want polymorphism along any of those hierarchies.