S.O.L.I.D ilkeleri; nesne yönelimli programlamada, tasarım dokularının daha iyi anlaşılması, geliştirilmesi ve esnek kalabilmeleri için oluşturulmuş temel kabullenmelerdir. Bu prensipler Robert C. Martin ve ya daha çok bilinen adıyla Bob Amca tarafından belirlenmiş ve ya tanımlanmıştır.
Tek Sorumluluk İlkesi (Single-responsibility principle, SRP)
Her bir modülün, sınıfın ve ya methodun sadece bir sorumluluğu olmalıdır. Sorumluluğu yerine getiren methodlar dışarıdan erişime kapalı olmalıdır. Dışarıdan erişime kapatılma; kapsülleme (encapsulation) tanımıdır. Anlaşılacağı üzere bu ilke daha çok sınıflara atıfta bulunur.
Esneklik-Kapalılık İlkesi (Open–closed principle, OCP)
Herhangi bir modül, sınıf ve ya method; genişletilmeye açık olmalı fakat değişiklik yapılmamalıdır. Anlaşılmasını kolaylaştırmak için; tanımlaman bir method üzerinde değişiklik yapılması, methodu kullanan diğer işlemler üzerinde de değişiklik gerektirir ya da bu işlemlerin yakalanamaması durumunda hatalara neden olur. Polimorfizm (polymorphism), bu ilkeyi destekleyici bir yaklaşımdır. Bu teknik ile aynı isimle tanımlanmış methodlar, farklı parametreler alarak farklı işlemler sonucu farklı sonuçlar verebilir.
Liskov Yerine Geçme İlkesi (Liskov substitution principle, LSP)
Bu ilke; Barbara Liskov tarafında 1988 yılında ileri sürülmüş ve 1994 yılında makale olarak yayınlanmıştır. Basitçe şu mantığı kabul etmektedir; ebeveyn sınıftan oluşturulan ve ya genişletilen alt sınıf ile ebeveyn sınıfın nesneleri yer değiştirdiğinde aynı davranışı gerçekleştirmelidirler. Bu ilke esneklik-kapalılık ilkesi (OCP) ile de tutarlı ve ilişkilidir.
Arayüz Ayırma İlkesi (Interface segregation principle, ISP)
Arayüz ayırma ilkesi aslında tek sorumluluk ilkesi ile oldukça benzerdir fakat arayüzlere (interface) odaklanır. Farklı sorumluluklara sahip tek bir arayüz oluşturmak yerine, sorumlulukları parçalayarak ilgili sorumlulukları bir araya getirmeyi savunur. Böylece nesneler ihtiyaç duymayacağı özellikleri devralmak zorunda kalmaz.
Bağımlılığı Tersine Çevirme İlkesi (Dependency inversion principle, DIP)
Yüksek seviyeli modüller düşük seviyeli modüllere bağlı olmamalıdır, aralarındaki etkileşim soyutlamalar (arayüz) aracılığıyla yapılmalıdır. Bu kabullenme ile düşük seviye modüllerde yapılan değişiklikler için yüksek seviye modüllerde değişiklik yapma gerekliliği ortadan kalkar.