S - Single Responsibility Principle (Tek Sorumluluk Prensibi): Her sınıf veya modül yalnızca bir tek sorumluluğa sahip olmalıdır. Bu prensip, bir sınıfın veya modülün sadece bir işi yapmasını ve bu işi yaparken yalnızca bir değişkenliği olmasını teşvik eder. Böylece sınıflar daha az bağımlı olur ve daha kolay test edilebilir hale gelir.
O - Open/Closed Principle (Açık/Kapalı Prensip): Yazılım bileşenleri (sınıflar, modüller, fonksiyonlar vb.), değişime kapalı (closed) ancak genişletmeye açık (open) olmalıdır. Yani mevcut kodu değiştirmeden yeni işlevsellikler eklemek mümkün olmalıdır. Bu prensip, kodun değişikliklere karşı daha dayanıklı ve esnek olmasını sağlar.
L - Liskov Substitution Principle (Liskov İçeriği Yerine Koyma Prensibi): Alt sınıflar, üst sınıfların yerine geçebilmelidir ve bu durum, programın beklendiği şekilde çalışmasını sağlamamalıdır. Bu prensip, alt sınıfların üst sınıfların türünü (type) sürdürmesi gerektiğini vurgular. Yani, bir alt sınıf, üst sınıfın tüm yerine geçmeli özelliklerini korumalıdır.
I - Interface Segregation Principle (Arayüz Ayrımı Prensibi): Mümkün olduğunca spesifik arayüzler (interface) tanımlanmalıdır, genel arayüzler yerine. Bu prensip, istemcinin ihtiyacı olmayan özellikler içermeyen küçük, spesifik arayüzler kullanılmasını teşvik eder. Böylece sınıfların gereksiz bağımlılıklardan kaçınılması ve sınıflar arası iletişimin kolaylaştırılması sağlanır.
D - Dependency Inversion Principle (Bağımlılıkların Ters Çevrilmesi Prensibi): Programın yüksek seviyeli modüllerinin düşük seviyeli modüllere bağlı olmaması, her ikisi de soyutlamalara (abstracts) dayanmalıdır. Bu prensip, soyutlamaların (abstracts) somutlamalara (concretes) bağlı olmamasını, aksine somutlamaların soyutlamalara bağlı olmasını sağlar. Böylece kodun değişime karşı daha dayanıklı olması ve test edilebilir olması sağlanır.
Bu prensipler, yazılım mühendisliğinde daha iyi tasarlanmış ve yönetilen kodlar üretmek için kullanılır. Her prensip, yazılımın farklı yönlerini kapsayarak daha modüler, esnek, okunabilir ve sürdürülebilir kodlar oluşturmayı hedefler.