Книга по основам программирования?
Bruce Eckel - Thinking in Java. Там все это есть.
Чтобы войти в ООП я бы посоветовал начать с нее, так как Java очень четко реализует все его принципы.
А вообще - для любого ЯП есть набор "классических" или "must read" книг, их и читайте.
Возьмите Страуструпа по плюсам. Ведь все-таки он придумал ООП в том виде который сейчас используется) и лучше чем у него в общем-то вы врядли найдете что-то по тому что вы назвали. Точнее, найдете - но с него лучше начать. Проектирование - банду четырех читайте, и Фаулера. Но без понимания ООП к проектированию рано подходить, так что начните с первого человека, которого я Вам назвал. Тем более что после C будет понятно что происходит в коде)