Radu Marinescu held an excellent lecture on Good Object-Oriented Design in Timişoara, Romania. See the slides for Lecture 2 and 3. They mainly present the ideas found in Robert C. Martin's articles.
Basic OO Principles: OCP, LSP, DIP The goal is to make your software open to extension and closed to modification (OCP). This can be accomplished if we ensure, that any subtype can be used everywhere in place of its supertype (LSP). Then a concrete implementation depends on the supertype used by a client class and the client class need not depend on the concrete implementation (DIP).
Class Cohesion an Coupling Principles: ISP, SRP, LoD Many client specific interfaces are better than one general purpose interface (ISP). There should never be more than one reason for a class to change (SRP). “Only talk to your immediate friends.” (LoD)
Package Cohesion Principles: REP, CCP, CRP The granule of reuse is the granule of release (REP). Classes that change together, belong together (CCP). Classes that arent reused together should not be grouped together (CRP).