I am halfway through an OOP project in the finance industry, and I'm looking back at my design decisions. I've solved some problems using patterns, and I'm particularly proud of those, but elsewhere I seem to lack a bit of rigor. My own use cases are extremely high level, since the actual input done by the user doesn't even compare to the complexity of the calculations done underneath the hood. To give you an idea, I've had to both integrate a third-party mathematical solver AND a whole parser to allow the user to enter his own formulas.
It just happens that I have a good two dozen classes, all called in the same way : Calculator-whatever
My initial problem was that I had no clear and distinct domain objects to work from (except for the parsing module, for example). I had a great deal of difficulty thinking in terms of objects - it would have been far easier to write the program procedurally, since essentially we're just working with either money or percentages to arrive at new amounts and...percentages. I. couldn't think of any other entity other than Calculators ... calculating various weights or amounts. Everything seemed like a huge algorithm involving $$
My question is how does one think in objects when objects can't be found naturally in the domain model or the use cases ?