Win a copy of Design for the Mind this week in the Design forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Essentials

 
Maxim Katcharov
Ranch Hand
Posts: 113
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
If you were to certify that someone "knows OO", what would you be sure they know, know how to do, and know not to do? Feel free to direct to a site or book, saying "everything in there", or just listing pieces of knowlege, maybe things that you think are neglected but fundamental concepts
 
Sathya Srinivasan
Ranch Hand
Posts: 379
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I would probably think that to cerify a person as OO, one should know the following concepts

Encapsulation
Inheritance
Abstraction
Polymorphism

and the following principles

Liskov Substitution Principle
Open-Closed Principle
Single Responsibility Principle
Dependency Inversion Principle
Interface Segregation Principle

and optionally

Law of Demeter
Design by Contract

For reference, you can look at

Agile Software Development by Robert Martin.
 
Lasse Koskela
author
Sheriff
Posts: 11962
5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The Law of Demeter comes to mind.

The best method I can think of for a certification of someone's skills would be to have the candidate code something and then evaluate how what she produced follows the object-oriented design principles you're looking for.
 
Lasse Koskela
author
Sheriff
Posts: 11962
5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Ah. I see Sathya was faster in typing
I also second the suggestion for Uncle Bob's ASD book.
 
Stan James
(instanceof Sidekick)
Ranch Hand
Posts: 8791
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Sathya, great list!

Also google for "java interview questions". You'll find hundreds of mystified applicants trying to figure out what somebody just asked them, plus a few golden nuggets of good interviewing techniques. I have a couple links around here somewhere ... will try to find them. I recall one that had a nice progression so if somebody couldn't answer #5 don't even bother with #6.
 
Kishore Dandu
Ranch Hand
Posts: 1934
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Lasse Koskela:
Ah. I see Sathya was faster in typing
I also second the suggestion for Uncle Bob's ASD book.


what is uncle bob's ASD book??
 
Kishore Dandu
Ranch Hand
Posts: 1934
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Sathya Srinivasan:

Liskov Substitution Principle
Open-Closed Principle
Single Responsibility Principle
Dependency Inversion Principle
Interface Segregation Principle

and optionally

Law of Demeter
Design by Contract

For reference, you can look at

Agile Software Development by Robert Martin.


I have been doing oo systems development for almost 7 years. I have no clue what the above principles are. Can some one shed a light where I can read through them??

BTW OO design is also a inherant skill only can be grasped by better iq persons( I am not saying I am one)
 
Daniel Mayer
Ranch Hand
Posts: 103
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Kishore Dandu:


what is uncle bob's ASD book??


"Agile Software Development: Principles, Patterns, and Practices" by Robert C. Martin
 
Daniel Mayer
Ranch Hand
Posts: 103
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Kishore Dandu:
I have been doing oo systems development for almost 7 years. I have no clue what the above principles are.


What a shame!

Can some one shed a light where I can read through them??


The best really would be to read the above book. It's worth every single penny.

http://c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign also has some information on them.
 
Kishore Dandu
Ranch Hand
Posts: 1934
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Daniel Mayer:


The best really would be to read the above book. It's worth every single penny.

http://c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign also has some information on them.


I am not talking about polymorphism etc. I am talking about the principles.

U can ask around the javaranch(ask the experts), I am confident at least 50% of gurus did not go through those principles. Still they are likely to have produced high quality, highly appreciated oo based complex systems. Daa......
 
Maxim Katcharov
Ranch Hand
Posts: 113
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Kishore, I believe you may not need to know the names of the principles in order to have applied them in your designs. I'm sure that of the people you mentioned, most of them would recognize the principles without knowing their names.

Stan, great tip on the java interview questions!
 
Daniel Mayer
Ranch Hand
Posts: 103
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Kishore Dandu:
I am not talking about polymorphism etc. I am talking about the principles.


Did something in my post indicate that I was not talking about the principles?


U can ask around the javaranch(ask the experts), I am confident at least 50% of gurus did not go through those principles. Still they are likely to have produced high quality, highly appreciated oo based complex systems.


Knowing the principles still helps. I would advice everyone to take a look at them.
 
Sathya Srinivasan
Ranch Hand
Posts: 379
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I agree with what one of the posts mentioned that most experienced developers would have knowingly or unknowingly applied the mentioned principles in their code.

If someone says (not just you) that your code is easy to understand and reuse, chances are that you have applied some or all of the principles.

That said, it definitely helps to actually read these principles as you might understand some of the subtleties better. Personally, I found that I had not thought of some very important subtleties in LSP before reading Martin's book.

Here are the links for the points that I mentioned.


Principles and
Patterns



Single Responsibility Principle



Open-Closed Principle



Liskov Substitution Principle



Interface Segregation Principle



Dependency Inversion Principle


And all these principles are mentioned in the book


Agile Software Development, Principles, Patterns, and Practices
by Robert Cecil Martin




Law of Demeter


Sathya.
 
Scott Ambler
author
Ranch Hand
Posts: 608
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
A good developer will know more than just OO stuff. OO is only part of the picture, you need to have a handle on non-OO issues which are equally important.

If you're looking for a good intro to software development which addresses the full development lifecycle (e.g. modeling, coding, testing, ...), OO, more than just OO (e.g. database stuff, UI stuff, ...), agility, and UML 2 then you might want to look at The Object Primer 3rd Edition(www.ambysoft.com/theObjectPrimer.html).

- Scott
 
Lasse Koskela
author
Sheriff
Posts: 11962
5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Scott Ambler:
...then you might want to look at The Object Primer 3rd Edition (www.ambysoft.com/theObjectPrimer.html).

Disclaimer:
Just in case it's not clear from the context, Scott is the author of the said book (and many others).
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic