Object-Oriented Design Principles

Class-Level Principles

The Open-Closed Principle (OCP)

The Liskov Substitution Principle (LSP)

Dependency Inversion Principle (DIP)

Interface Segregation Principle (ISP)

Many specific interfaces are better than a single, general interface

Composite Reuse Principle (CRP)

Law of Demeter = Principle of Least Knowledge

A method should only send messages to itself, its parameters, objects it creates, global objects, and objects it contains

Package-Level Principles

Reference

Java Design: Objects, UML, and Process; Kirk Knoernschild; Addison-Wesley.