Orodha ya maudhui:
- Hatua ya 1: Unda Darasa Lako, Pamoja na Faili ya Kichwa na Faili ya CPP
- Hatua ya 2: Weka Mjenzi kwa Binafsi
- Hatua ya 3: Weka Mwangamizi kuwa Binafsi
- Hatua ya 4: Kuunda Kiashiria cha tuli kinachobadilika katika Singleton
- Hatua ya 5: Kuunda Kazi ya Wakati
- Hatua ya 6: Kuunda Kazi za Umma za Umma
- Hatua ya 7: Kuunda Kazi ya Kukomesha
- Hatua ya 8: Kuweka PtrInstance kwa Nullptr
- Hatua ya 9: Mtihani na Hitimisho
Video: Jinsi ya Kufanya Sampuli ya Ubunifu wa Singleton katika C ++: Hatua 9
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:52
Utangulizi:
Kusudi la mwongozo huu wa mafundisho ni kufundisha mtumiaji jinsi ya kutekeleza muundo wa muundo wa singleton katika mpango wao wa C ++. Kwa kufanya hivyo, maagizo haya yaliyowekwa yataelezea pia msomaji kwa nini vitu vya singleton ni jinsi zilivyo na jinsi nambari hiyo inasindika. Kujua hii, itasaidia katika siku za usoni na utatuzi wa nyimbo zako za baadaye. Je! Muundo wa singleton ni nini? Sampuli ya muundo wa singleton ni muundo wa muundo ambapo kificho huunda darasa ambalo linaweza kutiliwa mkazo mara moja tu, kazi za umma za madarasa zinaweza kupatikana mahali popote, mradi uwe na # pamoja na faili ya kichwa katika faili zingine zinazohusiana na mradi.
Sampuli ya muundo wa singleton ni lazima ujue muundo wa muundo wa programu yoyote inayolenga vitu, programu za programu, na programu za mchezo. Sampuli ya muundo wa singleton pia ni moja wapo ya muundo rahisi zaidi wa muundo wa usimbuaji huko nje. Kujifunza kunaweza kukusaidia kujifunza mifumo mingine, ngumu zaidi, ya kubuni katika siku zijazo. Inaweza pia kukusaidia kurahisisha msimbo wa programu yako kwa njia ambazo haukufikiria kuwa inawezekana.
Wakati ugumu wa muundo wa muundo wa singleton ni rahisi ikilinganishwa na mifumo mingine ya muundo, seti hii ya maagizo ina ugumu wa kati. Hii inamaanisha kuwa kufanya maagizo haya, tunapendekeza ujue mahitaji ya kimsingi na mapema ya sintaksia ya C ++. Unapaswa pia kujua adabu sahihi ya uandishi wa C ++ (i.e. Weka vigeuzi vya darasa faragha, darasa moja kwa faili ya kichwa nk). Unapaswa pia kujua jinsi ya kufungua kumbukumbu na jinsi wajenzi na waharibu wanavyofanya kazi katika C ++.
Mwongozo huu wa mafundisho utachukua wastani wa dakika 10-15.
Mahitaji ya nyenzo:
-Kompyuta (inaweza kuwa PC au Mac) inayoweza kuendesha Studio za Visual (toleo lolote)
- Programu rahisi, iliyoundwa katika Studio ya Visual, ambayo unaweza kujaribu singleton yako na
Kumbuka: Sampuli ya muundo wa singleton inaweza kufanywa kwa njia nyingine yoyote inayounga mkono C ++ IDE au interface, lakini kwa seti hii ya maagizo, tutatumia Toleo la Biashara la Visual Studios.
Hatua ya 1: Unda Darasa Lako, Pamoja na Faili ya Kichwa na Faili ya CPP
Ili kuunda faili hizi mbili na darasa kwa wakati mmoja, fungua mradi / programu yako katika Studio za Visual, nenda kwa mtaftaji wa suluhisho, bonyeza kulia, na sanduku linapaswa kuonekana karibu na mshale wa panya wako, pata chaguo "Ongeza", hover juu yake, na sanduku lingine linapaswa kuonekana kulia. Katika sanduku hili, unataka kupata chaguo "Bidhaa mpya..", bonyeza na dirisha, linalofanana na picha 1.1 picha hapa chini, inapaswa kuonekana. Katika dirisha hili unataka kuchagua "Darasa la C ++" na kisha gonga "Ongeza". Hii itafungua dirisha lingine linalofanana na picha 1.2 picha. Katika dirisha hili, chapa jina la darasa lako kwenye uwanja wa "Jina la Darasa" na Studio za Visual zitataja faili moja kwa moja baada ya jina la darasa. Kwa kusudi la maagizo haya, tutaita darasa letu "InjiniDebugSingleton", lakini inaweza kuwa jina lolote lenye herufi. Sasa unaweza kugonga "Sawa" na uendelee kwenye hatua ya 2.
Kumbuka: Kichunguzi cha suluhisho na mahali faili zinahifadhiwa kwenye kompyuta yako ni tofauti. Kuhamisha au kuunda chochote katika suluhisho la suluhisho hakutasogeza au kupanga faili ndani ya mtafiti wa faili yako ya OS. Njia salama ya kupanga faili zako kwenye kichunguzi cha faili itakuwa kuondoa, lakini usifute faili maalum kutoka kwa mtaftaji suluhisho, songa faili zile zile katika kigunduzi cha faili kwenda mahali unavyotaka na kisha urudi kwa mtaftaji wa suluhisho, bonyeza kulia, pata chaguo "Ongeza", kisha upate "Bidhaa iliyopo" na upate faili ulizohamisha. Hakikisha unahamisha kichwa na faili ya cpp.
Hatua ya 2: Weka Mjenzi kwa Binafsi
Na faili yako mpya ya CPP na faili ya kichwa, ikiwa haikufunguliwa kiotomatiki wakati uliiunda, nenda kwa mtafiti wa suluhisho na bonyeza na ufungue "EngineDebugSingleton.h". Kisha utasalimiwa na "EngineDebugSingleton ()", mjenzi chaguo-msingi wa darasa na "~ EngineDebugSingleton ()" mwangamizi wa darasa. Kwa hatua hii, tutataka kuweka mjenzi kwa faragha, hii inamaanisha kuwa kazi hii inapatikana tu kwa darasa na sio kitu kingine chochote. Kwa hili, hautaweza kubadilisha au kutenga darasa kwa kumbukumbu nje ya darasa, tu kwenye faili ya kichwa cha madarasa na kazi zingine za madarasa. Kuwa na mjenzi binafsi ni ufunguo wa muundo wa muundo na jinsi singletoni zinafanya kazi. Tutagundua katika hatua zijazo jinsi singleton inavyothibitishwa na kupatikana.
Darasa sasa linapaswa kuonekana kama hii baada ya kuhamisha mjenzi kwenda kwa faragha (Angalia picha inayohusiana)
Hatua ya 3: Weka Mwangamizi kuwa Binafsi
Kama tulivyofanya na mjenzi katika
hatua 2, kwa hatua hii, sasa tutaweka muharibu kwa faragha. Kama ilivyo na mjenzi, hakuna kitu, isipokuwa darasa lenyewe, litakaloweza kufuta anuwai ya darasa kutoka kwa kumbukumbu.
Darasa sasa linapaswa kuonekana kama hii baada ya kumaliza hatua hii. (Tazama picha inayohusishwa)
Hatua ya 4: Kuunda Kiashiria cha tuli kinachobadilika katika Singleton
Katika hatua hii, tutaunda faili ya
tuli ya kutofautisha ya aina ya "EngineDebugSingleton *". Hii itakuwa tofauti ambayo itatumika kutenga singleton yetu kwa kumbukumbu na itaiashiria kwa muda wote wa singleton yetu iliyotengwa kwa kumbukumbu.
Hivi ndivyo faili yetu ya kichwa inapaswa kuonekana baada ya kuunda tofauti hii
Hatua ya 5: Kuunda Kazi ya Wakati
Tunataka sasa kufanya mfano
kazi. Kazi hiyo itahitaji kuwa kazi tuli na itataka kurudisha rejeleo kwa darasa letu ("EngineDebugSingleton &"). Tuliita kazi yetu Instance (). Katika kazi yenyewe, tutataka kujaribu kwanza ikiwa ptrInstance == nullptr (inaweza kufupishwa kuwa! PtrInstance), ikiwa ni nullptr, hii inamaanisha kuwa singleton haijatengwa na kwa upeo wa taarifa hiyo ikiwa nataka kutenga kwa kufanya ptrInstance = new EngineDebugSingleton (). Hapa ndipo unapotenga single moja kwa kumbukumbu. Baada ya kutoka kwa upeo wa taarifa hiyo ikiwa tutarudi kile ptrInstance inaelekeza, ambayo inaashiria syntax "* ptrInstance". Tutatumia kazi hii sana wakati wa kufanya kazi zetu za umma, kwa hivyo tunaweza kuangalia kuona kama singleton imeundwa na imetengwa kwa kumbukumbu. Kwa asili, kazi hii inafanya iweze kuwa na mgao mmoja tu wa darasa na sio zaidi.
Hivi ndivyo darasa letu linapaswa kuonekana sasa baada ya kuunda kazi ya Instance (). Kama unavyoona, yote ambayo tumefanya yamebaki katika sehemu ya kibinafsi ya darasa, hii itabadilika kidogo katika hatua chache zijazo.
Hatua ya 6: Kuunda Kazi za Umma za Umma
Baada ya kufanya kazi kutoka
hatua ya 5, unaweza kuanza kufanya kazi za umma za tuli. Kila shughuli ya umma inapaswa kuwa na kazi ya kibinafsi kwenda nayo, jina la kazi hii haliwezi kuwa sawa. Kwa nini ufanye kazi iwe tuli? Tunafanya kazi za umma ziwe tuli ili ziweze kupatikana bila kitu halisi. Kwa hivyo badala ya kufanya kitu kama "EngineDebugSingleObj-> SomeFunction ()", tunafanya "EngineDebugSingleton:: Baadhi ya Kazi ()". Hii inafanya uwezekano wa singleton kupatikana kimsingi popote kwenye nambari, mradi umejumuisha # faili ya kichwa katika faili maalum ya mradi unayofanya kazi nayo. Kwa hili, unaweza pia kuunda singleton kupitia kazi yoyote ya umma.
Kwa madhumuni yetu katika hatua hii tuliunda kazi mbili za wazi za umma, "ongeza ()" na "toa ()". Katika sehemu ya kibinafsi, sisi kazi mbili zaidi, "PrivAdd ()" na "PrivSubtract ()". Tuliongeza pia kutofautisha kwa int inayoitwa "NumberOfThings". Ufafanuzi wa kazi hizi utaingia kwenye faili ya CPP ya madarasa yetu. Ili kufanya kazi iwe rahisi kuingia kwenye faili ya CPP, unaangazia, na mshale wako, kazi, ambayo inapaswa kuwa na laini ya kijani chini yake, na kugonga "Left ALT + ENTER", itakupa fursa ya kuunda ufafanuzi katika faili ya CPP inayohusishwa na madarasa. Tazama Picha 6.1 ili kuona faili ya kichwa inapaswa kuonekanaje na baada ya kuunda ufafanuzi wote wa kazi, CPP yako inapaswa kuonekana kama Picha 6.2 isipokuwa kwamba ufafanuzi wako wa kazi hautakuwa na nambari ndani yao.
Sasa utataka kuongeza nambari sawa na kwenye Picha 6.2 katika ufafanuzi wako wa kazi. Kama ilivyoelezwa hapo awali, kazi zetu za umma zitatumia kazi ya Instance (), ambayo itarudisha kile ptrInstance inaelekeza. Hii inatuwezesha kupata kazi za kibinafsi za darasa letu. Kwa kazi yoyote ya umma ya singleton, unapaswa tu kuwa unaita kazi hiyo ya Instance. Isipokuwa tu kwa hii ni kazi yetu ya kumaliza.
Kumbuka: Kazi haswa za umma na za kibinafsi zilizoonyeshwa katika hatua hii sio lazima, unaweza kuwa na majina na kazi tofauti katika kazi ya kibinafsi, lakini kwa aina yoyote ya kazi ya umma, unapaswa kuwa na kazi ya kibinafsi kuifuata na kazi ya umma inapaswa kutumia kila wakati, kwa upande wetu, kazi ya Instance ().
Hatua ya 7: Kuunda Kazi ya Kukomesha
Kwa kuwa tunaweza kuhamisha tu singleton yetu kutoka kwa kumbukumbu katika darasa letu, lazima tuunda kazi ya umma ya tuli. Kazi hii itaita kufuta kwenye ptrInstance, ambayo huita mwangamizi wa darasa na kisha tutataka kuweka ptrInstance kurudi kwa nullptr ili iweze kutengwa tena ikiwa programu yako haitaisha. Utahitaji pia kusitisha Singletons zako kusafisha kumbukumbu yoyote iliyotengwa ambayo umetenga katika anuwai za kibinafsi za Singleton.
Hatua ya 8: Kuweka PtrInstance kwa Nullptr
Ili kukamilisha singleton yako, unataka kuelekea faili ya EngineDebugSingleton. CPP na juu ya faili ya CPP, kwa mfano wetu, andika "EngineDebugSingleton * EngineDebugSingleton:: ptrInstance = nullptr."
Kufanya hivi mwanzoni kutaweka ptrInstance kwa nullptr, kwa hivyo wakati unapoanza kufanya kazi ya mfano kwa mara ya kwanza, darasa letu litaruhusiwa kugawanywa kwa kumbukumbu. Bila hiyo, uwezekano mkubwa utapata hitilafu kwa sababu utakuwa unajaribu kupata kumbukumbu ambayo haijapewa chochote.
Hatua ya 9: Mtihani na Hitimisho
Sasa tutataka kujaribu kwamba singleton yetu kuhakikisha inafanya kazi, hii itatuhusisha kupiga simu kazi za umma kama ilivyoelezewa katika hatua ya 6 na tunapendekeza uweke njia za kupumzika kupitia nambari yako na uone kuwa singleton inafanya kazi kama inapaswa kuwa. Sehemu yetu ya kuanzia itakuwa katika main.cpp ya mradi wetu na main.cpp yetu sasa inaonekana kama picha hapa chini.
Hongera! Umekamilisha tu utekelezaji wako wa kwanza wa Sampuli ya Ubunifu wa Singleton. Kwa muundo huu wa muundo, sasa unaweza kurekebisha nambari yako kwa njia anuwai. Kwa mfano, sasa unaweza kutengeneza mifumo ya meneja ambayo inafanya kazi wakati wote wa programu yako, ambayo inaweza kupatikana kupitia kazi za tuli mahali popote ambapo umejumuisha darasa.
Faili yako ya kichwa ya mwisho inapaswa kuonekana kama picha 7.1. Faili yako ya CPP inayohusishwa na singleton inapaswa kuonekana kama Picha 6.2 na kuongeza, juu ya faili, ya nambari iliyoonyeshwa katika hatua ya 8. Maagizo haya yalikupa muundo rahisi wa muundo wa Singleton Design.
Ushauri wa utatuzi:
Kupata makosa yanayohusiana na kumbukumbu?
Hakikisha unarejelea hatua ya 7 na hatua ya 8 ili kuhakikisha kuwa unaweka ptrInstance kwa nullptr.
Kitanzi kisicho na kikomo kinachotokea?
Hakikisha kwa shughuli za umma, kwa ufafanuzi wao, unaita kazi ya kibinafsi, sio kazi sawa ya umma.
Vitu vilivyotengwa ndani ya singleton husababisha kuvuja kwa kumbukumbu?
Hakikisha unaita kazi ya kumaliza kazi ya singleton yako inapofaa ndani ya nambari yako ya programu, na kwa uharibifu wa singleton yako, hakikisha unatenga vitu vyovyote ambavyo vilitengwa kwa kumbukumbu ndani ya wigo wa nambari ya singleton.