Analysis and Design (OO)

Started by
7 comments, last by Emmanuel Deloget 16 years, 9 months ago
Hi there, I am a recent graduate in Comp. Sci. and am looking to continue my education. I would like to learn more about Object Oriented Analysis and Design (OOAD), and was hoping that the nice people on this board could point me in the right directions. I've looked back over the last years topics here and only saw it pop up in a coule of titles, so I'm hoping that I'm not rehashing old ground. I'm looking for some non-trivial examples, that go through different steps and show you what is applied and how it is done. I am currently looking at some things I found at Wikipedia, and am going to go to the library later today to see if I can't pick up some good books (if you have book suggestions then that would also be rather cool). I wish to learn this because it looks like it might be useful, and because knowledge is a good thing. Any advice on how it is used in practice would be nice too. I would like to apply it to the job that I have, and with my own on the side projects. Thanks for reading, and I look forward to your responses.
Advertisement
The easiest way to learn it, IMHO, is to learn a strict Object Oriented language like Java. It doesn't let you do anything outside of an object very easily, if at all, so it forces you to think and design in OO.

[EDIT: On a second read, what level of study are you interested in? I'd be surprised if you've never done OO design with a recent CS degree.]

-me
Books can help. I suggest Design Patterns and the Pragmatic Programmer for guidance on OO development. I don't know how useful those will be for you, but they made a remarkable improvement in my use of OO. I believe those works to be among the best for programmers in general. I especially reccomend the later as it covers much more than just OO. In fact it covers many practical issues in programming and even in working as a programmer.
Programming since 1995.
After succombing to the fact that my (so-called) OO code was atrocious, I started looking into Design Patterns on the 'Net and spent a lot of time rewriting old code using proper(-ish) structure. I bought the book on Design Patterns T1Oracle suggested and read it cover-to-cover. Although it gave me a good deal of insight into the application of each pattern it presents, it took practice to learn how to mix and match multiple patterns in a single system to get the desired results.

ToohrVyk recently suggested some good articles on OO principles that you may find helpful: Open-Closed Principle, Liskov Substitution Principle, Single Responsibility Principle, Interface Segregation Principle and Dependency Inversion Principle
Quit screwin' around! - Brock Samson
^ Nice links man. Ratings +

I haven't finished reading them, so they may cover this, regardless I feel I should emphasize the importance of orthogonality and the DRY principal. DRY = Don't repeat yourself, it makes for harder to maintain code.
Programming since 1995.
Quote:Original post by coderx75
ToohrVyk recently suggested some good articles on OO principles that you may find helpful: Open-Closed Principle, Liskov Substitution Principle, Single Responsibility Principle, Interface Segregation Principle and Dependency Inversion Principle


I must admit, I got them from Washu in the first place [wink] Another interesting read (although it deals more with Agile development than OOAD) is the C2 Wiki.
Thanks for the sugesstions guys. I've started looking at those links and they are well writen and easy to understand so far. As to the books, the Design Patterns one was already on my list to get from the library, but they don't seem to have the other one, which is sad because I've seen good things about it in other places.

As to wether or not I've seen this stuff before; yes I did a paper that included OOAD, but I am looking to learn more, and I feel that what I got taught was to brief for me. I am, unfortuneatly, not the quickest off the blocks, and I learn best with concrete examples. So if you guys know of any place with good, concrete, examples of using OOAD then I would much appreciate it. Otherwise, keep coming with the stuff that you are, because it's all very interesting. :)
Quote:Original post by ToohrVyk
Quote:Original post by coderx75
ToohrVyk recently suggested some good articles on OO principles that you may find helpful: Open-Closed Principle, Liskov Substitution Principle, Single Responsibility Principle, Interface Segregation Principle and Dependency Inversion Principle


I must admit, I got them from Washu in the first place [wink] Another interesting read (although it deals more with Agile development than OOAD) is the C2 Wiki.
[grin]

Quote:Original post by Palidine
The easiest way to learn it, IMHO, is to learn a strict Object Oriented language like Java. It doesn't let you do anything outside of an object very easily, if at all, so it forces you to think and design in OO.

[EDIT: On a second read, what level of study are you interested in? I'd be surprised if you've never done OO design with a recent CS degree.]

-me

Eh, Java isn't object oriented. It's "class" oriented. Just because you stick things in classes doesn't make it object oriented in the slightest. Now, if you're gearing up to learn object orientation, smalltalk is the way to go. It's one of the few pure object oriented languages out there.

As far as learning what it means to be object oriented, applying the principles and patterns that are associated with it, and generally learning to think in that manner: The best friend you have is experience. Don't look for problems to apply patterns to, as noted in the introduction to GoF, that's one of the classic signs of inexperience. Patterns emerge on their own, they show up in places and you just spot them and say "hey, this looks like it's heading for the state pattern..." The principles of OO are the most important parts, they are what guide you through the dark and ultimately what will tell you if you're doing good OO or bad OO. But, with all that said, OO is not the be all, end all of programming. There are many paradigms, and each has an advantage and a problem set they solve best. Each has disadvantages and problem sets they apply poorly too.

In time the project grows, the ignorance of its devs it shows, with many a convoluted function, it plunges into deep compunction, the price of failure is high, Washu's mirth is nigh.

Quote:Original post by Washu
Eh, Java isn't object oriented. It's "class" oriented. Just because you stick things in classes doesn't make it object oriented in the slightest. Now, if you're gearing up to learn object orientation, smalltalk is the way to go. It's one of the few pure object oriented languages out there.

Reminds me that one of the guy from the original Smalltalk crew (the one who first coined the term "object oriented") is really sorry for having coined that term - because it emphasize too much on the structural way of doing thing, while the real power in OO lies in the underlying messaging system.

This topic is closed to new replies.

Advertisement