I'm a relative newb to Java only 7 months experience and counting, I've noticed that in the Java Community there is a common theory that if your going to do things you should do them right.
Well I'm trying to perfect my coding style and the way I go about designing a project. I'm looking for tips on how to design a system, object models etc. I normally just design the database and then create everything around that, but apparently this isnt good object orientated design. Since I've never been taught this, I was tought the old fashioned method of functions. I need to learn it. Can anyone point in the direction of some nice website reading, or what topics to read up on.
My favorite design books:
Fundamentals of Object-Oriented Design in UML by Meiler Page-Jones: A good introduction.
Object-Oriented Software Construction by Betrand Meyer: Not for the faint of heart, advanced and dry, but very good.
Design Patterns by Gamma, Helm, Johnson, Vlissides (the "Gang of Four"): The OO Design Patterns classic.
Patterns of Enterprise Application Architecture by Martin Fowler: Good overview of modern enterprise development patterns.
But, the best teacher is experience. Look at a lot of other peoples code (open source is a good place to look) and write of lot of your own.
Don't be afraid of getting things wrong. You will anyway, so there is no point fretting. One of the big advantages of OO is that it makes it easier to fix *existing* applications. To that end, I want to add one more book:
Refactoring: Improving the Design of Existing Code by Martin Fowler
I have to agree with the above. For a modern J2EE system, Fowlers book has some great insights and is also footnoted very well to point you to more resources.
As far as perfecting your Java skillz "Effective Java" by Bloch and also one called "Practical Java" are good.
This is a great site as are:
Sun also has some of the JavaOne presentations available on their site - There are a few case studies in there that outline some of the challenges and architectures used.
Also look into attending your local Java Users Group.
All of the books mentioned by the others are real gems.
All the information can get overwhelming tho.. so the best way initially is IMHO to get an app (i used Java PetStore) and analyze the design thoroughly.
See the flow and think of how you would do it normally, and then study how it has been implemented.. the obvious flaws in your *old* ;) functional design will be obvious to you.
Try and find someone in your company to act as your mentor - invaluable!
best of luck :)