Sunday, November 17, 2013

වස්තු පාදක පද්ධති සංවර්දනය-2

විවිද ක්‍රමලේකන ශෛලීන්
හැම ක්‍රමලේකන බාශාවකටම මොකක් හරි ස්ටයිල් එකක් තියෙනවා.එහි තොරතුරු සංවිදානය  කරන විදියට බලපාන්නේ ඔය කියන ස්ටයිල් එක.එහෙම නැත්තම් ක්‍රමලේකන සුසමාදර්ශය(programming paradigm).ඕනෑම වැඩසටහනක් තුල විචල්‍යක්(variable) ලෙස හෝ නියතයක්(constant) ලෙසින් දත්ත(ඉන්පුට් කරන දේ) දැකගන්න පුළුවන්.ඒවගේම පරිගණක වැඩසටහනක් තුල ඔපරෙටර්ස්(operators) ,ඔපරන්ඩ්ස්(operands),එක්ස්ප්රෙශන්ස්(expressions),ස්ටේට්මන්ට්ස්(statements) බාවිතා වෙනවා.මම මෙතැනදී ඒවා ගැන සවිස්තරව කියන්න යන්නේ නැහැ.ඒ මොකද ඕනෑම පරිගණක බාශාවක් ඉගෙනගන්නකොට මුලින්ම උගන්වන්නේ මේ ටික නිසා.අපේ මේ බලාපොරාත්තුව පරිගණක බාශවල පරිනාමයත් එක්ක වස්තු පාදක සංකල්පයන්ගේ ආගමනය පැහැදිලි කරගන්න.නැත්තම්  මාතෘකාව එහෙම්ම තියෙද්දී මේ  මොනවද කියන්නේ කියලා අපේ පාඨකයෝ කල්පනා කරනවා පුළුවන්.හරි.කරුණු වශයෙන් දැක්වුවොත් කියවන්න ලේසි වෙයි කියලා හිතනවා.
  • පලවෙනි පරම්පරාවේ පරිගණක බාෂා(1954-1958) බාවිතා කලේ සංඛ්‍යා සුලුකිරීම් වගේ සරල වැඩසටහන් හදන්න.ප.ප පරිගණක බාශාවන් බාවිතයෙන් ලියනු ලබන වැඩසටහන්වල සුවිශේශි ලක්ශනය වුනේ මේවයේ සබ්ප්රෝග්‍රම්ස්(subprograms) නැහැ.මේන්(main) ප්‍රෝග්‍රෑම් එකෙන් ග්ලෝබලි අවේලබල්(globally available) ඩේටා ඇක්සෙස්(access) කරනවා විතරයි.දත්ත සැගවීම්(data hiding) වැනි දෑ දකින්න ලැබෙන්නේ නැහැ.
  • දෙවෙනි පරම්පරාවේ පරිගණක බාශාවන්(1959-1961) තුල උක්ත සබ්ප්රෝග්‍රම්ස් දැකගන්න පුළුවන්(ෆන්ක්ෂන්ස්(functions),ප්‍රෝසිජර්ස්(procedures),සබ්රුටින්ස්(subroutines) කියන්නෙත් මෙවටමයි).මෙයින් සිදු වුනු මහගු මෙහෙය වුනේ නැවත නැවත වැඩසටහන තුල එකම කෝඩ් ලිවිය යුතු නොවීමයි.දෙ.ප. පරිගණක බාශාතුල තොරතුරු සැගවීම පළමුවරට දැකගත හැකිවුනා.එලෙස සගවනු ලැබුයේ  සබ්ප්රෝග්‍රම්ස්වල ඉම්ප්ලිමන්ටෙෂන් ඩිටේල්ස්(implementation details).නමුත් සබ්ප්රෝග්‍රම්ස් බාවිතායෙන් දත්ත ෂෙයාර් කිරීම දත්ත සැගවීමේ න්‍යාය බිඳිනු ලබනවා.එම නිසා දත්ත සැගවීමේ ක්‍රමවේදය සාර්ථක වෙන්නේ සම්පුර්ණයෙන්ම ආර්ථක කරගන්න ලැබෙන්නේ නැහැ.
  • තුන්වෙනි පරම්පරාවේ පරිගණක බාශාවන් (1962-1970)(උදාහරණ විදියට පැස්කල් ,C) තුල බාවිතා වෙන්නේ අනුක්‍රමිකව(sequential) ලියනු ලබන  කෝඩ් එකක්.මෙහි ග්ලෝබල් ඩේටා, ලෝකල් ඩේටා හා ෆන්ක්ෂන්ස් බාවිතා වෙනවා.සම්පුර්ණ වැඩසටහන මොඩියුල්(module) කිහිපයකට කඩා ව්‍යුහගත ලෙස ක්‍රමලේකනය කරනු ලබනවා.පළමුව ගැටලුව විසැදීමට අලෝගරිතමයක් සකස් කර ගන්නවා.තේරුම් ගැනීමට වැඩසටහනක් සදහා පහත සමීකරණය දක්වන්න පුළුවන්.alogarithm+data structures=program.දත්ත හා සබ්ප්රෝග්‍රම්ස් තියෙන්නේ වෙනම.මේන් ප්‍රෝග්‍රෑම් එකේදී සබ්ප්රෝග්‍රම්ස් වලට කෝල්(call) කරනවා.මෙම ස්ට්‍රක්චර්ඩ් ප්රෝග්‍රමින්ග් අප්රෝච්(structured programming approach) එකේ පහත ලක්ෂණ දැකගන්න පුළුවන්.
  1. හැම ෆන්ක්ෂන් එකකටම ඊට අදාල ලෝකල් ඩේටා හා අලෝගරිතම්(alogarithm) එකක් තියෙනවා.
  2. හැම ෆන්ක්ෂන් එකක්ම අනික් ෆන්ක්ෂන් එකෙන්  ස්වායත්තයි.
  3. ෆන්ක්ෂන් වල පැරාමිටර් පාසින්ග්(parameter passing) දකින්න පුළුවන්.
  4. යුසර් ඩිෆයින්ඩ් ඩේටා ටයිප්ස්(user defined datatypes) බාවිතා කරන්න පුළුවන්.
  5. දියුණු කරන ලද කන්ට්‍රෝල් ස්ට්‍රක්චස්(control structures-අනුක්‍රමික ගලායාම පාලනය කරන ඉෆ්,එල්ස්,ෆොර් ලුප්ස්  වයිල් ලුප්ස් මෙනමින් හැදින්වෙයි)දකින්න පුළුවන්.
වෙරියබල්ස් සදහා ස්කෝප්(scope) එකක්(ග්ලෝබල් හා ලෝකල් වෙරියබල්ස්) පවත්නා නිසා දත්ත සැගවීමට සහය දක්වනවා.නමුත් බහුල වශයෙන් පවතින සබ්ප්රෝග්‍රම්ස් නිසා වැඩසටහන නඩත්තුව ප්‍රායෝගිකව අපහසු වෙනවා.ඒ අනුව මෙම ව්‍යුහගත ක්‍රමලේකනයෙදී වඩා වැදගත් කමක් ලැබුනේ සබ්ප්‍ර්රෝග්රම් වලට.ඒවා සමග කාර්යක්ෂම ලෙස දියුනුකෙරුණු අලෝගරිතම බාවිතයෙන් වඩා උසස් වැඩසටහන් ලිවිය හැකි වුනා.මේ ගැටළු විසදීමට බහුලවම බාවිතා වුනේ ටොප්-ඩවුන් අප්රෝච්(top down approach)එකයි.පළමුව සංකීර්ණ ගැටලුව කුඩා ගැටළු සමුහයකට කඩා ගන්නවා.මෙම කුඩා ගැටළුවක් වරකට එක බැගින් විසදීම සදහා ක්‍රමලේකනය කරනු ලබනවා.
  • 1970-1980 වකවානුව තුල තවත් බොහෝ පරිගණක බාෂා පැමිණියද මෘදුකාංග සංවර්දනයට ඒවා බාවිතා වුයේ කිහිපයක් පමණයි.
මෘදුකාංගයක සංකීර්ණභාවය(complexity of softwares)

 1990 ට පෙර ලියවුනු බොහෝ පරිගණක වැඩසටහන් ලියවුනේ සරල ගැටළු විසදීමට.නමුත් අද අභ්‍යවකාශ 
 ගමන්(field of space),ආරක්ෂක(defense),පර්යේෂණ(research),ඉංජිනේරු(engieering),
වෛද්‍ය(medicine),කර්මාන්ත(industry),ව්‍යාපාර(business) අමතරව සංගීතය(music),පින්තාරු කලාව(painting) වැනි බොහෝ ක්ෂේත්‍රයන් වල වඩා සංකීර්ණ ගැටළු විසදීමට මෘදුකාංග යොදා ගනු ලබනවා.උදාහරණයක් විදියට චන්ද්‍රිකාවක් ගුවන්ගත කිරීම අද සන්පුර්නයෙන්ම පාහේ සිදු කෙරෙන්නේ පරිගණක මෘදුකාංග ආශ්‍රිත ගණනය කිරීම් වලින්.මෙම නිසා ලෝකය තුල මෙවැනි විවිද මෘදුකාංග නිපදවීම සදහා මෘදුකාංග සංවර්දන සමාගම් පවතී.මෙම සමාගම් වල සේවය කරනු ලබන්නේ ඉතා ඉහල සුදුසුකම් සහිත  මෘදුකාංග සන්වර්ධකයින්.ප්‍රායෝගිකව මෘදුකාංගයක් සංවර්දනය කිරීමේදී බොහෝ ගැටළු ඇතිවෙනවා.ඒ එහි පවතින සංකීර්ණත්වය හේතුවෙනි.මෙම සංකීර්ණත්වයට බලපාන සාධක කිහිපයක් මෙලෙස දක්වන්න පුළුවන්.
  • ගැටලුව පිළිබද නිසි අවබෝධයක් නොවීම-නිවැරදිව පරිශීලක අවශ්‍යතාවන්(user requirements) උකහා ගැනීම සාර්ථක මෘදුකාංගයක් නිපදවීමේදී අවශ්‍යයෙන්ම සිදුවිය යුත්තක්.මෘදුකාංග සන්වර්දකයින් හා පරිශීලකයන් අතර සන්නිවේදනය(communication) නිවැරදිව සිදු නොවුනොත් ඔවුන්ගේ අවශ්‍යතාව නිසි පරිදි තෘප්ත කල නොහැකි වෙනවා.
  • මෘදුකාංග සංවර්දන අවධිය තුලදී පරිශීලක අවශ්‍යතා වෙනස් වීම-සමහර රාජ්‍ය ප්‍රතිපත්ති(gavernment policies) හා කර්මාන්ත සංරෝධනයන්(industry constraints) මේ සදහා හේතුවෙනවා. 
  • පවතින පද්ධති(ලෙගසි-legacy පද්ධතීන්) සංරක්ෂණය-බොහෝ අවස්ථාවල සිදුවන්නේ පවතින පද්ධතිය නව අවශ්‍යතා වෙනුවෙන් දිගු කර යලි බාවිත කිරීමයි.මෙවෙන්නක් සෑම විටම කල නොහැක්කේ පවතින පද්ධතිය පිළිබද විශේෂඥ දැනුමක් ඇති අයගේ හිගකම නිසයි.තවද පවතින පද්ධති සමග අලුතෙන් දියුණු කල පද්ධති සම්බන්ද කිරීමෙදීද බොහෝ තාක්ෂණික ගැටළු උද්ගත වෙනවා.

  • සංවර්දන ක්‍රියාවලිය කළමනාකරණය(management)-පද්ධතීන් වඩාත් විශාල වන්නට වන්නට එම මොඩියුල කළමනා කරණය ,සම්බන්දීකරනය(coordination),සමෝදානය(integrate) කිරීමේ ප්‍රයෝගික ගැටළු පැනනැගී.

  • සම්මතයන්(standards) නොමැති වීම නිසා පවතින නම්‍යශීලිත්වය-මෘදුකාංග සංවර්දනයට නිශ්චිත ක්‍රියා පටිපාටියක් නැහැ.මෘදුකාංග සංවර්දනක්ෂේත්‍රය තුල ඇත්තේ ඉතා ස්වල්ප සම්මතයන් සමුහයක් පමණයි.මේ නිසා මෘදුකාංග සංවර්දනය වඩා සංකීර්ණ වෙනවා.
  • වියුක්ත පද්ධති(discrete systems) වල හැසිරීම-සතත පද්ධතියක(continuous systems) හැසිරීම පිළිබද අපට අනාවැකි අපල කරන්න පුළුවන්.උදාහරණයක් ලෙස චන්ද්‍රිකාවක් ගොඩබැස්සවීම සංකීර්ණ පද්දතියක් වුනත් සමීකරණ බාවිතයෙන් එය අපට නිශ්චිතව ප්‍රකාශ කරන්න පුළුවන් .නමුත්  සමහර මෘදුකාංග ක්‍රියාත්මක වීමේදී පද්ධතීන් ප්‍රභින්න(discrete) තත්වයකට පත්වෙයි.කුඩා කොටස් වලට කඩා තිබියදීත් සංක්‍රමණයන්(phase transitions) පුරෝකථනය කිරීමට නොහැකි වෙයි.සමහර විට අනපේක්ෂිත බාහිර සිද්ධින්(external events) මුළු පද්ධතියම විනාශ කරනවා.
  • මෘදුකාංග පරික්ෂාව(testing)-මෘදුකාංගයක බොහෝ විචල්‍යයන්,කන්ට්‍රෝල් ස්ට්‍රක්චර්ස් සහ ෆන්ක්ෂන්ස් බාවිත කරනවා.මේ නිසා සමහරවිට මෙය ක්‍රියාත්මක කිරීමේදී බලාපොරොත්තු නොවූ ප්‍රතිපල(unexpected outcomes) උද්ගත වෙන්න පුළුවන්.ප්‍රයෝගිකව ගොඩනැගු පද්ධතියේ සෑම කොටසක්ම පරික්ශාවට ලක් කරන්නත් බැහැ.මේ අනුව මෘදුකාංග පරීක්ෂාව හේතුකරගෙනත් මෘදුකාංග සංවර්දනය කිරීමේදී  සංකීර්ණතාවයක් පැනනගිනවා.
 ප.ලි.මෙහි සදහන් කරුණු පිලිබදව ගැටළුවක් ඇත්නම් කමෙන්ට් ලෙස අසන්න.කරුණු තවත් පැහැදිලි කරගැනීමට අතිරේක ලින්ක්ස් පහත දැක්වෙයි.
ලෝ ලෙවෙල් හා හයි ලෙවෙල් ඩිස්ක්රිප්ෂන්ස්
තවත් කොටසක් බලාපොරොත්තු වන්න.

Saturday, November 9, 2013

වස්තු පාදක පද්ධති සංවර්දනය-1

අපේ මාතෘකාව වස්තු පාදක පද්ධති සංවර්දනය(OOSD).පද්ධතියක් කිව්වම පරිගණක පාදක පද්දති(computer-based systems) වන හාඩ්වෙයාර් සොෆ්ට්වෙයාර් ප්‍රෝසේසස්(processes) කියන ඔක්කොම අයිති වෙනවා.නමුත් අපි මෘදුකාංග සංවර්දනය ,වස්තු පාදක ක්‍රමලේකනය(object-oriented programming) ඔස්සේ අද්‍යනය කිරීමටයි බලාපොරොත්තු වෙන්නේ.ඇත්තටම මේ පද්දති සංවර්දනය කියන මාතෘකාව අපේ පලවෙනි සිමෙස්ටර් එකේ තිබ්බේ සිස්ටම් ඇනලිසිස් ඇන්ඩ් ඩිසයිනින්ග්(SAD) කියලා.එතැනදී තොරතුරු පද්ධති ගැන හැදින්වීමක්,SDLC,ඉන්ට්‍රොඩක්ෂන් ටු ප්‍රොජෙක්ට් මැනේජ්මන්ට්(project management),රික්වයමන්ට්ස් අනලිසිස්(requirement analysis) ,මෝඩ්ලින්ග් විත් DFD(data flow diagrams) වගේ මාතෘකා ගැන ඉගෙනගත්තා.ඇත්තටම මේ සබ්ජෙක්ට් එක ඉගෙන ගනිද්දී මට දැනුනු දෙයක් තමයි මේක ඉතාම ප්‍රායෝගික විෂයක්.ටිකක් විතර බිස්නස් එන්වයමන්ට්(business envionment) වල වැඩ කෙරෙන හැටි ගැන දැනුමක් තියෙන්න ඕන.ඊට පස්සේ දෙවෙනි සිමෙස්ටර් එකේ තියෙන්නේ දැන් අපේ මාතෘකාව වන වස්තු පාදක පද්ධති සංවර්දනය.මේ ගැන ඇත්තටම මට ලොකු දැනුමක් නැහැ නමුත් මට වැටහෙන විදියට කරුණු ටිකක් දක්වන්නයි,මගේ බලාපොරොත්තුව.ඊලගට තවත් දෙයක්.මේ ලිපි වල අඩංගු කරුණු තේරුම් ගැනීමට කිහිපවරක් කියවන්න කියලා මුලින්ම කියන්න කැමතියි.ඒ මොකද මම මේවා ලියන්නේ නියම ශාස්ත්‍රීය වචන බාවිතා කරලා නෙවෙයි.උදාහරණයක් හැටියට දැන් මේ මාතෘකාවේ දක්වලා තියෙන්නේ object oriented system development කියන වචනයේ තේරුම ,එතනදී වස්තු පාදක කියලා යොදාගත්තත් එය වස්තු දිශානත කියන ඒකයි වඩා සුදුසු ඒ මොකද වස්තු පාදක(object based) කියලත් වෙනම සංකල්පයක්(concept) තියෙනවා .ඉදිරියේදී අපි ඒ ගැන කතා කරමු.ඔබට තොරතුරු පද්ධති පිලිබදව තව දුරටත් මුලික දැනුමක් මේ ලින්කුවෙන් ලබාගන්න පුලුවන්.ඔබට යම් කරුණක් ගැන ගැටළුවක් මතු වුනොත් ඒ ගැන කමෙන්ට් එකක් දාලා ඒ ගැන මම දැනුවත් කරන්න.යම් සංකල්පයක ස්වබාවය වැටහෙන වචනවලින් උදාහරණ ඇසුරෙන් තේරුම් කරන්න තමයි උත්සාහ කරන්නේ.හරි එහෙනම් දැන් වැඩේ පටන්ගනිමු. 
හැදින්වීම
ගැටළු වැඩ ඉක්මනින් හා නිවැරදිව(accurate) විසදගන්න පරිගණක වැඩසටහන්(computer programs) බාවිතා කරන බව ඔබ හොදටම දන්නා කරුණක්.මෙම ගැටළු විසදන ආකාරය පරිගණකයට ලබාදීම සදහා පරිගණක වැඩසටහන් බාවිතා කරනවා.සුවිශේෂ කාර්යක් ඉටුකර ගැනීමට එසේ ලියනු ලබන වැඩසටහන් සමුහයකට මෘදුකාංගයක් කියල කියනවා.පද්දති මෘදුකාංග කියල කියන්නේ මෙහෙයවීම ,පාලනය කිරීම,සැකසුම් ක්‍රියාවලින් කාර්යක්ෂමව ප්‍රයෝජනයට ගැනීම වැනි කාර්යන් කිරීම සදහා නිර්මාණය කරනු ලබන මෘදුකාංග.ඒ සදහා උදාහරණයක් තමයි මෙහෙයුම් පද්දති(operating systems).සැම මෙහෙයුම් පද්දතියක්ම පාහේ පරිශීලක කළමනාකරණය(user management),ගොනු පද්ධති කළමනාකරණය(file management),මතක කළමනාකරණය(memory management) වැනි කාර්යන් කරගත හැකි පරිගණක වැඩසටහන් අන්තර්ගත වෙනවා.
දෘඩාංග(hardware) කොටස් වලට හදුනා ගන්න පුළුවන් යාන්ත්‍රික කේත(machine codes) විතරයි.ඒ කියන්නේ 1 හා 0 සහිත කේත.ආරම්බයේ පවතී පහල මට්ටමේ පරිගණක බාශාවන්(low level computer languages) මෙම කේතයන් බාවිතයෙන් තමයි ලියුවේ.1,0  පමණක් බාවිතයෙන් ලියනු ලබන වැඩසටහන් අවබෝද කරගැනීමට අපහසු බැවින් ඉංග්‍රීසියට ආසන්න බාවිතයෙන් වැඩසටහන් කළහැකි පරිගණක බාෂ දියුණු වුන.ඒ වගේම මේ බශා  ගැටළු විසදීමට  අලෝගරිතමයක්(alogarithm) බාවිතා කරනවා.ඒ කියන්නේ පියවරෙන් පියවර(step by step) ඒ ගැටලුව විසදන ක්‍රමවේදයක්.අල්ගොරිතමයක් බාවිතයෙන් වඩාත් සංකීර්ණ ගැටළු විසදනවිට බොහෝ අපහසුතා මතුවුනා.මෙන්න මෙතනදී තමයි,සංකීර්ණ ගැටළු විසදන්න  වස්තු දිශානත පරිගණක ක්‍රමලේකනය(OOP) කියන සංකල්පය කලඑළි බැස්සේ.

ප්‍රශ්න වසම හා විසදුම් වසම(problem domain and solution domain)

ප්‍රශ්නයක් කියන්නේ කිසියම් අපේක්ෂිත ප්‍රතිපලයක් ලබා ගැනීම සදහා වන කාර්යාත්මක විශේෂීකරණයක්(functional specification).තව දුරටත් කිව්වොත් SDLC එකේ පළවෙනියට තියෙන්නේ අවශ්‍යතා විශේෂීකරණය හා විශ්ලේෂණය ,ඊට පස්සේ හදන ඩොකියුමන්ට් එක තමයි,SRS(Software Requirement Specification) කියන්නෙ.පහත උදාහරණය සලකා බලන්න.කොලබ ඉදලා මාතරට යන්න දුම්රිය ටිකට් එකක් ලබා ගැනීම ගැටලුව යැයි හිතුවොත් අදාළ දුම්රිය කවුන්ටරයට ගිහිල්ල ටිකට් පතක් මිලදී ගැනීම ඊට විසදුම ලෙසින් දක්වන්න පුළුවන්.මෙතන ප්‍රතිපලය(output) වෙන්නේ වෙන් කරන ලද ටිකට් පතක්.ප්‍රශ්නයට අදාළ වසම සලකද්දී දුම්රිය මාර්ග හා ගාස්තු පිළිබද දැනීමක් අවශ්‍ය වෙනවා.ප්‍රශ්නයක් මතුවෙන්නේ කිසියම් අවශ්‍යතාවයක් විශේෂීකරණය කර විටදී.ප්‍රශ්නයක් හා සම්බන්දව වසමක් පවතිනවා වගේම එහි විසදුම සදහාද යම් වසමක් පවතිනවා.එහි අන්තර්ගත වෙන්නේ අපේක්ෂිත ප්‍රතිපලය ලබා ගැනීම සදහා වන ක්‍රමවේද(procedures) හා උපක්‍රම(strategies).විසදුම හා සම්බන්ද වෙන පුද්ගලයෝ කව්ද කියලා දැන් සලකමු.තාර්කික විසදුම ලබා දෙන්නේ ඩොමේන් එක්ස්පර්ට්ලා(domain experts) .ඊලගට වැඩසටහන ඩිවෙලොප් කරන්නේ ඩිවෙලොපර්ස්ලා(developers) එහෙම නැත්තම් මේ අය සප්ලයර්(supplier), ප්රෝග්‍රමර්(programmer) ,ඉම්ප්ලිමන්ටර්(implementer) යන නම් වලින් හදුන්වනවා. ඒ අනුව ප්‍රශ්නයක් විසදීම කියන්නේ ප්‍රොබ්ලම් ඩොමේන් එක සොලුයුෂන් ඩොමේන් එකට මැප්කිරීම(mapping) ලෙස හදුන්වන්න පුළුවන්.සරල ගැටළුවක් විසදීමට මෙන් නෙවෙයි ගැටලුව සංකීර්ණ(complex) වෙනකොට එක විසදන්න යම් ක්‍රමානුකුල ප්‍රවේශයක් අවශ්‍ය වෙනවා. ගැටළුවක් විසදන්න තියෙන ප්‍රවේශයන් කිහිපයක් පහත දැක්වේ.
  • ප්‍රශ්න ඇසීම.(ask questions)
යම් ගැටළුවක් ගැන කුමක්ද,කොහොමද ඇයි වගේ ප්‍රශ්න ඇසීමෙන් ඊට විසදුම හොයා ගන්න පුළුවන්.
  • සමානතා සොයා බැලීම.(look for things similar)
යම් ගැටලුවකට අලුතෙන්ම විසදුමක් නොසොයා ඒ හා සමාන ගැටලුවකට ලද විසදුමක් ප්‍රයෝජනයට ගන්න පුළුවන්.උදාහරණක් හැටියට යම් සංක්‍යා කුලකයක වැඩිම අගය සෙවීම ,පන්තියේ සිසුන්ගෙන් ලබාගත් වැඩිම ලකුණ සෙවීම,දිනයේ උපරිම උෂ්ණත්වය සෙවීම කියන ගැටළු තුන සැලකුවහොත් ඒ තුනටම විසදුම් සොයන්න අවශ්‍ය වෙන්නේ එකම සංකල්පයක්.ඒ තමයි දී ඇති සංඛ්‍යා එකතුවක විශාලතම සංඛ්‍යාව සෙවීම කියන එක.
  • පසුපසට විසදාගෙන යාම හෙවත් බොටම්-අප් ඇප්රෝච්(work backwards or bottom-up approach)
ඒ කියන්නෙ අපි අපේ ගෝල්(goal) එකෙන් පටන් අරගෙන ස්ටාර්ටින්ග් පොයින්ට්(starting point) එකට විසදගෙන එනවා.උදාහරණයක් මතක් කලොත් අපි ගණිතයේදී සමහර ගැටළු දකුණෙන් පටන් අරගෙන වම් පෙත්තේ උත්තරේ දක්වා සුළු කරන්නේ,මේ අප්රෝච් එක අන්න ඒ වගේ.සමහර සංකීර්ණ ගැටළු විසදන්න ඇත්තටම මේක පහසු මගක්.නොදන්නා තෙනකින් පටන් අරගෙන දන්නා තෙනකොට මග සලකුණු කරගෙන යනඑක,දන්නා තෙනකින් පටන් අරගෙන නොදන්නතෙනකට එනවට වඩා පහසුයි.ඒකට හේතුව තමයි,දන්නා තැනක තියෙන සලකුණු වලින් අපට අවබෝදයක් ලැබෙනවා මේ ඇවිල්ල ඉන්නේ විසදුම කිට්ටුව කියලවත්.එහෙම නැති වුනොත් අපි නොදන්නා තැනක මග සලකුනුවත් අපි නොදන්නා නිසා ඒ කිට්ටුවට ආවත් අපි ඒ ගැන දන්නේ නැහැ.
  • ගැටලුව කොටස් වලට කඩා ගැනීම හෙවත් ටොප්-ඩව්න් අප්රෝච්(decomposition or top-down approach)
මෙහිදී ප්‍රශ්නය කුඩා කොටස් වලට කඩනවා.ඒ කොටස් තව දුරටත් කඩාගෙන යනවා,අන්තිමේදී හසුරවලියහැකි කුඩා එකක දක්වාම. දැන් සංකීර්ණ ප්‍රශ්නයක් වුනත් කුඩා පරශ්න ගොඩක් බවට පත්වෙනවා.මේකටම තමයි,ස්ටේප්වයිස් රිෆයින්මන්ට්(stepwise refinement),මොඩියුලර් ඩිකොම්පොසිෂන්(modular decomposition),ස්ට්‍රක්චර්ඩ් අප්රෝච්(structured approach)  නැත්තම් අලෝගරිතමික් අප්රෝච්(algorithmic approach) කියන්නෙත්.
ප.ලි.මෙහි අන්තර්ගත කරුණුවල නොගැලපෙන,සාවද්‍ය යමක් ඇත්නම් ඒ පිළිබද දැනුමැත්තෙකු විසින් පෙන්වාදෙනු ලබන නිවැරදිකිරීමක් කෘතඥපුර්වකව පිළිගන්නෙමි.
තවත් කොටසක් ඉදිරියේදී බලාපොරොත්තු වන්න.