3.10.4. Tushunarlilik Uyg`unlik, tarkibiylik va unkapsulyatsiya qoidalarni tushuntirishning yaxshi boshqarish prinsipi sanaladi. Bundan tashqari, oson tushuntirish va tushunib olish uchun sinf aniq shartlarga ega bo`lishi lozim. Foydalanuvchilar sinflarni turli xil kombinatsiyalar, loyihalar va muhitlarga bog`lashi mumkin. Shuning uchun, sinfni foydalanuvchi u bilan ishlashi uchun hech qanday cheklovlar qo`ymaydigan yoki uning xususiyatlarini loyihalashtirishda foydalanuvchi ularning qiymatlarini o`zgartira oladigan yoki ular ishtirokida turli kombinatsiyalarni amalga oshira oladigan, funksiyalarni esa, yaratilgan dastlabki holatiga bog`lanib qolmaydigan, mustaqil qilib loyihalash lozim. Masalan, 2.13-kodli ro`yxatdagi Loan sinfi setLoanAmount, setNumberOfYears, va setAnnualInterestRate funksiyalaridan tashkil topgan. Bu xususiyatlar ixtiyoriy mavqedan turib sozlanishi mumkin.
Biz boshqa bir ma’lumotlar maydonidan qiymati olinishi mumkin bo`lgan boshqa bir ma’lumotlar maydonini e’lon qilishimiz shart emas. Masalan, quyidagi Person sinfi ikkita ma’lumotlar maydoni: birthDate va age ga ega. Bu yerda yosh tug`ilgan yili orqali olinsa ham bo`ladi, ya’ni bunda yoshni alohida ma’lumotlar maydoni sifatida aniqlash shart emas.
class Person
{
public: ...
private: Date birthDate;
intage;
}
3.10.5. Mukammallik Sinflar ko`p sonli mijozlar tomonidan foydalanish uchun mo`ljallab loyihalanadi. Ko`p sohada foydali dastur bo`lishi uchun, sinf xususiyatlar va funksiyalar orqali ko`p sonli sozlash tamoyillariga ega bo`lishi lozim. Masalan, string sinfi turli ko`rinishdagi dasturlar uchun 20 dan ortiq funksiyalarga ega.
3.10.6. Nusxa va Statik Aniq bir sinf nusxasiga tegishli o`zgaruvchi yoki funksiya nusxa o`zgaruvchi yoki nusxa funksiya bo`lishi lozim. Sinfning barcha nusxalari uchun umumiy bo`lgan o`zgaruvchi statik (static) sifatida e’lon qilinishi lozim. Masalan, 3.9-kodli ro`yxatda berilgan Circle sinfidagi numberOfObjects o`zgaruvchisi Circle sinfining barcha ob’yektlari uchun umumi hisoblanadi va shuning uchun ham statik ko`rinishda e’lon qilingan. Hech bir nusxaga bog`liq bo`lmagan funksiya ham o`z navbatida, statik deb e’lon qilinishi lozim. Masalan, Circle sinfidagi getNumberOfObjects funksiya hech qanday aniq bir nusxaga bog`lanmagan va shuning uchun ham u statik deb e’lon qilingan.
Xatoliklarni chetlab o`tish va o`qishni osonlashtirish uchun har doim sinfning statik o`zgaruvchilari va funksiyalariga (ob’yektlariga emas) murojaat qilish kerak.
Konstruktor har doim nusxa hisoblanadi. Chunki undan aniq bir nusxani yaratishda foydalaniladi. Statik o`zgaruvchi yoki funksiya nusxa funksiyasi tomonidan chaqirilishi mumkin, lekin nusxa o`zgaruvchisi yoki finksiyasini statik funksiyadan turib chaqirib bo`lmaydi.