Xususiy sinf ma'lumotlarining namunasi - Private class data pattern

Xususiy sinf ma'lumotlari a dizayn namunasi yilda kompyuter dasturlash sinf atributlarini inkassatsiya qilish va ularni manipulyatsiya qilish uchun ishlatiladi.

Standart hujjatlar

Uchun quyidagi hujjatlar toifalari xususiy sinf ma'lumotlari dizayn namunasi tomonidan belgilangan dizayn namunasi hujjatlari uslubiga mos keladi To'rt kishilik to'da.

Nomi va tasnifi

Naqsh nomi
Ushbu naqsh xususiy sinf ma'lumotlari dizayn namunasi.
Naqsh tasnifi
Ushbu naqsh a strukturaviy naqsh.

Niyat

The xususiy sinf ma'lumotlari dizayn namunalari ularning ko'rinishini cheklash orqali atributlarning ta'sirini kamaytirishga qaratilgan. U sinf atributlari sonini yakka holda inkassatsiya qilish orqali kamaytiradi Ma'lumotlar ob'ekt. Bu sinf dizayneriga faqat qurilish paytida o'rnatilishi kerak bo'lgan atributlarning yozish imtiyozini, hattoki maqsad sinf usullaridan olib tashlashga imkon beradi.

Shuningdek, nomi bilan tanilgan

PIMPL (Private IMPLementation) yoki Shaffof bo'lmagan ko'rsatkich

Motivatsiya

Manipulyatsiya endi kerak bo'lmaganda, sinf o'z atributlarini (sinf o'zgaruvchilari) manipulyatsiyaga ta'sir qilishi mumkin, masalan. qurilishdan keyin. Xususiy sinf ma'lumotlarini loyihalashtirish sxemasidan foydalanish bu istalmagan manipulyatsiyani oldini oladi.

Sinf e'lon qilinmaydigan bir martalik o'zgaruvchan atributlarga ega bo'lishi mumkin final. Ushbu dizayn namunasidan foydalanish ushbu sinf atributlarini bir martalik sozlash imkonini beradi.

Ushbu dizayn naqshining motivatsiyasi uning atributlari (ma'lumotlari) ko'rinishini minimallashtirish orqali sinf holatini himoya qilishning dizayn maqsadidan kelib chiqadi.

Amaliyligi

Ushbu dizayn namunasi ko'plab ob'ektga yo'naltirilgan tillarda har qanday sinfga tegishli.

Tuzilishi

Ishtirokchilar

Hamkorlik

Oqibatlari

Ushbu dizayn namunasidan foydalanish oqibatlari quyidagilarni o'z ichiga oladi:

  • Sinf atributlariga yozishni kirishni boshqarish;
  • Ma'lumotlarni uni ishlatadigan usullardan ajratish;
  • Inkapsulyatsion sinf atributi (ma'lumotlar) initsializatsiyasi; va
  • Yangi turini taqdim etish final: konstruktordan keyin yakuniy.

Amalga oshirish

Xususiy sinf ma'lumotlarini loyihalash naqshlari yuqoridagi muammolarni a ni chiqarib olish yo'li bilan hal qiladi ma'lumotlar sinfi maqsad sinf uchun va ajratilgan namunani maqsad sinf namunasiga berish ma'lumotlar sinfi.

  • The ma'lumotlar sinfi a orqali har bir atributni (o'zgaruvchini yoki xususiyatini) ochib beradi oluvchi.
  • The ma'lumotlar sinfi a orqali qurilgandan so'ng o'zgarishi kerak bo'lgan har bir atributni ochib beradi sozlovchi.

Namuna kodi

Quyidagi C # kod xususiy sinf ma'lumotlarini loyihalash namunasidan foydalanish imkoniyatini ko'rsatadi:

jamoat sinf Doira{    xususiy ikki baravar _radius;    xususiy Rang _color;    xususiy Nuqta _origin;    jamoat Doira(ikki baravar radius, Rang rang, Nuqta kelib chiqishi)    {        bu._radius = radius;        bu._color = rang;        bu._origin = kelib chiqishi;    }    jamoat ikki baravar Atrof => 2 * Matematika.PI * bu._radius;    jamoat ikki baravar Diametri => 2 * bu._radius;    jamoat bekor Chizish(Grafika grafikalar)    {        //...    }}

Atributlar radius, rangva kelib chiqishi dan keyin o'zgarmasligi kerak Doira () konstruktor. E'tibor bering, ularni ko'rish imkoniyati allaqachon cheklangan xususiy, lekin dars usullarini bajarish Doira ularni hali ham o'zgartirishi mumkin.

Atributlarning haddan tashqari ta'sir qilishi ushbu atributlarga kiradigan usullar o'rtasida (kiruvchi) bog'lanish turini yaratadi. Atributlarning ko'rinishini kamaytirish va shu bilan bog'lanishni kamaytirish uchun shaxsiy sinf ma'lumotlarini loyihalash namunasini quyidagicha bajaring:

jamoat sinf CircleData{    xususiy ikki baravar _radius;    xususiy Rang _color;    xususiy Nuqta _origin;    jamoat CircleData(ikki baravar radius, Rang rang, Nuqta kelib chiqishi)    {        bu._radius = radius;        bu._color = rang;        bu._origin = kelib chiqishi;    }    jamoat ikki baravar Radius => bu._radius;    jamoat Rang Rang => bu._color;    jamoat Nuqta Kelib chiqishi => bu._origin;}jamoat sinf Doira{    xususiy CircleData _circleData;    jamoat Doira(ikki baravar radius, Rang rang, Nuqta kelib chiqishi)    {        bu._circleData = yangi CircleData(radius, rang, kelib chiqishi);    }    jamoat ikki baravar Atrof => 2 * bu._circleData.Radius * Matematika.PI;    jamoat ikki baravar Diametri => bu._circleData.Radius * 2;    jamoat bekor Chizish(Grafika grafikalar)    {        //...    }}

The Doira olingan koddagi sinf tip atributiga ega CircleData ilgari sinfning barcha usullariga ta'sir qilgan atributlarni qamrab olish Doira. Ushbu inkapsulyatsiya usullardan keyin atributlarni o'zgartirishga xalaqit beradi Doira () konstruktor. Biroq, har qanday usulga e'tibor bering Doira inkassatsiya qilingan atributlarning qiymatlarini hali ham olishlari mumkin.

Ma'lum bo'lgan foydalanish

The Qt ramkasi umumiy sinf kutubxonalarida shaxsiy sinf ma'lumotlar namunasidan foydalanadi.[1] Naqshni amalga oshiradigan sinflar ma'lumotlar sinfiga "d-ko'rsatkich" ni o'z ichiga oladi. Ma'lumotlar sinfidagi a'zoning o'zgaruvchilarini manipulyatsiya qilish usullari, ikkilik moslikni buzmasdan o'zgarishlarga imkon beradi.

Shuningdek qarang

Adabiyotlar

  1. ^ "D-ko'rsatkich". Olingan 7 yanvar 2017.