Жеке сынып деректер үлгісі - Private class data pattern

Жеке сынып деректері Бұл дизайн үлгісі жылы компьютерлік бағдарламалау класс атрибуттарын инкапсуляциялау және оларды манипуляциялау үшін қолданылады.

Стандартты құжаттама

Үшін келесі құжаттама санаттары жеке сынып деректері дизайн үлгісі белгіленген дизайнерлік құжаттама стиліне сәйкес келеді Төрт топ.

Атауы және жіктелуі

Үлгі атауы
Бұл үлгі белгілі жеке сынып деректері дизайн үлгісі.
Үлгінің жіктелуі
Бұл үлгі a құрылымдық үлгі.

Ниет

The жеке сынып деректері дизайн үлгісі атрибуттардың көрінуін шектеу арқылы олардың әсерін азайтуға бағытталған. Ол класстың атрибуттарының санын бірыңғай етіп енгізу арқылы азайтады Деректер объект. Бұл класс дизайнеріне мақсатты сынып әдістерінен де, тек құрылыс кезінде ғана орнатылатын атрибуттардың жазу артықшылығын жоюға мүмкіндік береді.

Сондай-ақ

PIMPL (Private IMPLementation) немесе Мөлдір емес көрсеткіш

Мотивация

Сынып өзінің атрибуттарын (сыныптың айнымалыларын) манипуляция қажет болмаған кезде манипуляцияға ұшыратуы мүмкін, мысалы. құрылыс аяқталғаннан кейін. Жеке сынып деректерін жобалау үлгісін қолдану жағымсыз манипуляцияны болдырмайды.

Сыныпта жарияланбайтын бір реттік өзгермелі атрибуттар болуы мүмкін ақтық. Бұл дизайн үлгісін пайдалану сол атрибуттарды бір реттік орнатуға мүмкіндік береді.

Бұл дизайн үлгісінің мотивациясы оның атрибуттарының (деректерінің) көрінуін минимизациялау арқылы таптық жағдайды қорғаудың жобалау мақсатынан туындайды.

Қолданылу мүмкіндігі

Бұл дизайн үлгісі кез-келген сыныпқа көптеген объектіге бағытталған тілдерде қолданылады.

Құрылым

Қатысушылар

Ынтымақтастық

Салдары

Осы дизайн үлгісін қолданудың салдары мыналарды қамтиды:

  • Кластың атрибуттарына жазуға рұқсатты бақылау;
  • Мәліметтерді оны қолданатын әдістерден бөлу;
  • Инкапсуляциялық класс атрибутын (деректерді) инициализациялау; және
  • Жаңа түрін ұсыну ақтық: конструктордан кейін соңғы.

Іске асыру

Жеке сынып деректерін жобалау үлгісі а. Шығару арқылы жоғарыдағы мәселелерді шешеді деректер сыныбы мақсатты класс үшін және шығарылған дананы мақсатты класс данасына беру деректер сыныбы.

  • The деректер сыныбы әр төлсипатты (айнымалы немесе қасиет) a арқылы ашады алушы.
  • The деректер сыныбы а-дан кейін өзгеруі керек әрбір атрибутты ашады орнатушы.

Кодтың үлгісі

Келесісі C # код жеке класс деректерін жобалау үлгісін пайдалану мүмкіндігін көрсетеді:

қоғамдық сынып Шеңбер{    жеке екі есе _радиус;    жеке Түс _түс;    жеке Нұсқа _оригин;    қоғамдық Шеңбер(екі есе радиусы, Түс түс, Нұсқа шығу тегі)    {        бұл._радиус = радиусы;        бұл._түс = түс;        бұл._оригин = шығу тегі;    }    қоғамдық екі есе Айналдыру => 2 * Математика.PI * бұл._радиус;    қоғамдық екі есе Диаметрі => 2 * бұл._радиус;    қоғамдық жарамсыз Сурет салу(Графика графика)    {        //...    }}

Атрибуттар радиусы, түс, және шығу тегі жоғарыдан кейін өзгермеуі керек Шеңбер () конструктор. Оларды кеңейту арқылы көріну онсыз да шектелгенін ескеріңіз жеке, бірақ сабақ әдістерін орындау Шеңбер оларды өзгерте алады.

Атрибуттардың артық экспозициясы осы атрибуттарға қол жеткізетін әдістер арасында (қалаусыз) байланыстың түрін жасайды. Атрибуттардың көрінуін азайту және осылайша байланыстыруды азайту үшін жеке класс деректерін жобалау үлгісін келесі түрде енгізіңіз:

қоғамдық сынып CircleData{    жеке екі есе _радиус;    жеке Түс _түс;    жеке Нұсқа _оригин;    қоғамдық CircleData(екі есе радиусы, Түс түс, Нұсқа шығу тегі)    {        бұл._радиус = радиусы;        бұл._түс = түс;        бұл._оригин = шығу тегі;    }    қоғамдық екі есе Радиус => бұл._радиус;    қоғамдық Түс Түс => бұл._түс;    қоғамдық Нұсқа Шығу тегі => бұл._оригин;}қоғамдық сынып Шеңбер{    жеке CircleData _circleData;    қоғамдық Шеңбер(екі есе радиусы, Түс түс, Нұсқа шығу тегі)    {        бұл._circleData = жаңа CircleData(радиусы, түс, шығу тегі);    }    қоғамдық екі есе Айналдыру => 2 * бұл._circleData.Радиус * Математика.PI;    қоғамдық екі есе Диаметрі => бұл._circleData.Радиус * 2;    қоғамдық жарамсыз Сурет салу(Графика графика)    {        //...    }}

The Шеңбер алынған кодтағы класс типтің атрибутына ие CircleData бұрын сыныптың барлық әдістеріне ұшыраған атрибуттарды жинау Шеңбер. Бұл инкапсуляция кейін атрибуттарды өзгертуге жол бермейді Шеңбер () конструктор. Алайда кез-келген әдіске назар аударыңыз Шеңбер инкапсуляцияланған атрибуттардың мәндерін ала алады.

Белгілі қолданыстар

The Qt құрылымы ортақ кітапханаларында жеке сынып деректер үлгісін қолданады.[1] Үлгіні жүзеге асыратын кластарға мәліметтер класына «d-көрсеткіш» кіреді. Мәліметтер класындағы мүшелік айнымалыларды манипуляциялау әдістері, екілік үйлесімділікті бұзбай өзгертуге мүмкіндік береді.

Сондай-ақ қараңыз

Пайдаланылған әдебиеттер

  1. ^ «D-көрсеткіш». Алынған 7 қаңтар 2017.