Possible Duplicate:
OO Software Design Principles
My questions concern methodology that are built onto OOP (not sure about the terminology here…). I have learned some things about the Law of Demeter and MVC.
I am not a total beginner in programming, but I have never worked on a really tricky OOP development. So I would say that I am aware of the basic principles of OOP. I am about to embark upon a personal project using C++.
My questions:
- So first, are there some methodologies like those two that can be useful to know, or at least to be aware of?
- And are there good websites that describes them?
- What other things that I am not even aware of could be useful?
You should realise that although C++ was initially designed to enable OOP, it is very ill suited for that kind of programming (where I define OOP as the use of virtual functions, which imply dynamically allocated objects, etc…).
Modern C++ programming provides tools that are far better than traditional OOP for solving many programming problems.
If you are learning C++ I would recommend that you learn about RAII, and learn why it is that is is absolutely central to correct usage of the language. After that you should learn about templates, and how they can be used to create reusable components.
Read through and understand everything in Guru of the Week, and consider reading the associated books (Exceptional C++ and More Exceptional C++). Also consider reading some of the other books from The Definitive C++ Book Guide and List.
While you are doing this, have a look at the design and implementation of the libraries in boost. Many of them are examples of near perfect usage of the C++ language, and they have widespread usefulness.
Most importantly: write code.
It is often difficult to understand solutions to problems that you have never faced. It is crucial that you have a deep understanding of when particular techniques are appropriate, and what problems can be solved by which methodologies. Attempting to use methodologies, techniques, libraries or patterns that solve a fundamentally different problem from the one that you are up against will never result in good code.