Prinsip tanggung jawab tunggal - Sebuah kelas seharusnya hanya memiliki satu alasan untuk berubah.
Prinsip Terbuka/Tertutup - Entitas perangkat lunak harus terbuka untuk perluasan, namun tertutup untuk modifikasi.
Prinsip Substitusi Liskov - Kelas anak tidak boleh melanggar definisi tipe kelas induk.
Prinsip Pemisahan Antarmuka - Tidak ada klien yang terpaksa bergantung pada metode yang tidak digunakannya. Jumlah anggota dalam antarmuka yang terlihat oleh kelas dependen harus diminimalkan. Kelas besar mengimplementasikan beberapa antarmuka kecil yang mengelompokkan fungsi berdasarkan penggunaannya
Prinsip inversi ketergantungan - Modul tingkat tinggi tidak boleh bergantung pada modul tingkat rendah. Keduanya harus bergantung pada abstraksi. Abstraksi tidak boleh bergantung pada detail.