Object-Oriented Programming is something that today we take for granted. However, more often than not, I come across developers that don't have a good understanding of how to write a good OO code. I found that almost every developer can keep a conversation when talking about inheritance, polymorphism and encapsulation but not many can dig too deep on other principles and values that are also extremely important for the quality of the code.

Some key values and principles of Object-Oriented Design:

Cohesion - The cornerstone of OOP
SRP - Single Responsibility Principle
LSP - Liskov Substitution Principle
OCP - Open Closed Principle

A few techniques for a more expressive code

Empowering your Entities
MVC and Multi-tier architecture
One team, one language
A basic ActiveRecord implementation in Java