Jifunze zaidi

Sura ya 4: Kusagwa


Kama njia ya kuonyesha zaidi ya nguvu zinazoja na kuwa na uwezo wa kufafanua mbinu mpya, ni muhimu kuwa Karel kufanya kitu kidogo zaidi kuliko vitendo move koni kutoka sehemu moja hadi nyingine. Njia hizi zinaonekana kuwa zinahitajika kutengenezwa, na inaweza kuwa ya kujifurahisha kuona kama Karel anaweza kujaza mashimo katika ulimwengu wake usioonekana. Kwa mfano, fikiria kuwa Karel amesimama kwenye "barabara" iliyoonyeshwa kwa mfano wa kushoto, kona moja kushoto ya pothole barabara. Kazi ya Karel ni kujaza shimo kwa koni na kuendelea kwenye kona inayofuata. Mchoro juu ya haki unaonyesha jinsi ulimwengu unapaswa kufuatilia utekelezaji wa programu.

Kabla ya:
Baada ya:

Ikiwa umepunguzwa na amri nne run njia run ya kutatua tatizo hili ingeonekana kama hii:

private void run() {
move();
geukaKushoto();
geukaKushoto();
geukaKushoto();
move();
wekaKoni();
geukaKushoto();
geukaKushoto();
move();
geukaKushoto();
geukaKushoto();
geukaKushoto();
move();
}

Mwongozo wa kwanza wa kufafanua njia ya geukaKulia ilikuwa ni vigumu kuendelea kurudia amri tatu geukaKushoto ili kufikia upande wa kulia. Kufafanua mbinu mpya kuna lengo lingine muhimu zaidi ya kukuwezesha kuepuka kurudia utaratibu sawa wa amri kila wakati unataka kufanya kazi fulani. Nguvu ya kufafanua mbinu inafungua mkakati muhimu katika programu-mchakato wa kuvunja tatizo kubwa hadi vipande vidogo ambavyo ni rahisi kutatua. Mchakato wa kuvunja mpango hadi vipande vidogo unaitwa uharibifu, na sehemu ya sehemu ya shida kubwa huitwa subproblems.

Kwa mfano, shida ya kujaza shimo katika barabara inaweza kuharibiwa katika subproblems zifuatazo:

  1. Hoja hadi shimo
  2. Jaza shimo kwa kuacha koni ndani yake
  3. Nenda kwenye kona inayofuata

Ikiwa unafikiri juu ya tatizo kwa njia hii, unaweza kutumia ufafanuzi wa njia ili kuunda mpango unaoonyesha mimba yako ya muundo wa programu. Njia ya run itaonekana kama hii:

private void run() {
move();
kujazaPothole();
move();
}

Mawasiliano na muhtasari huwa wazi, na kila kitu kitakuwa kizuri kama tu unaweza kupata Karel kuelewa nini unamaanisha kwa kujazaPothole. Kutokana na uwezo wa kufafanua mbinu, kutekeleza kujazaPothole ni rahisi sana. Wote unachotakiwa kufanya ni kufafanua njia ya kujazaPothole ambayo mwili wake una amri ambazo umeandika tayari kufanya kazi, kama hii:

private void kujazaPothole() {
geukaKulia();
move();
wekaKoni();
turnAround();
move();
geukaKulia();
}

Hapa ni mpango kamili. Angalia jinsi unavyoweza kuelewa run programu tu kwa kusoma njia ya run . Wakati wa run mpango, mstari unaonyesha inaonyesha jinsi kompyuta run , hatua kwa hatua. Hata hivyo, kwa sababu mpango huo umevunjika vizuri tunaweza kuelewa kwenye kiwango cha mawazo ya kibinadamu:


Sura inayofuata