header

header
Showing posts with label වස්තු පාදක පද්ධති සංවර්දනය. Show all posts
Showing posts with label වස්තු පාදක පද්ධති සංවර්දනය. Show all posts

Friday, January 24, 2014

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

ක්ලාසස් සහ ඔබ්ජෙක්ට්ස්(classes and objects)
OOP විසින් අබ්ස්ට්‍රක්ෂන් හා එන්කැප්සියුලේෂන්(OO සංකල්ප) නිරුපනය කිරීම සදහා ක්ලාසස් හා ඔබ්ජෙක්ට්ස් යොදාගනියි.රියල් වර්ල්ඩ් එකේ අපි දකින යම් එන්ටිටි එකක්(අබ්ස්ට්‍රක්ෂන් එකක්) OOP සමග මැප්(map) කරන ආකාරය රුප සටහනෙන් දැක්වේ.මේ අනුව ගත්තම ක්ලාස් එකක් කියන්නෙ ඔබ්ජෙක්ට්ස් ගණනාවක් හදාගන්න පුළුවන් ස්ට්‍රක්චර්(structure) එකක්.ක්ලාස් එකක් තුල දත්ත(ඩේටා වෙරියබ්ල්ස් වලින්) හා ඔපරේෂන්ස් අන්තර්ගත වෙනවා.ජාවා වස්තු පාදක ක්‍රමලේකනය ගැන අපේ සහෝදරයෙක් ලියපු හොද සටහනක් තියෙනවා මේ ලින්ක් එකේ.ඒකත් කියවලා බලන්න.
http://javaxclass.blogspot.com/2010/05/java-i.html
ක්ලාස් එකක් කියන්නෙ ඩේටා ටයිප් එකක් නිසා ඒක කෙලින්ම මැනිපියුලේට්(manipulate) කරන්න බැහැ.පහත උදාහරණය බලන්න.
"ඇපල් කියන්නෙ පළතුරක්"
එතකොට මෙතන  පලතුර කියන්නෙ ක්ලාස් එකක් හැටියට ගන්න පුළුවන්.ඇපල් කියන්නෙ  ඔබ්ජෙක්ට් එකක් වගේ.ඇපල් කියන්නෙ එක පලතුරු වර්ගයක් විතරයි.ඒවගේම ඔබ්ජෙක්ට් එකක් කියන්නෙත් ක්ලාස් එකේ එක අවස්ථාවක්(instance)එකක් විතරයි.
හරි මන් හිතනවා ක්ලාස් හා ඔබ්ජෙක්ට් අතර වෙනස දැන් පැහැදිලි ඇති කියලා.
ඔබ්ජෙක්ට් එකකට තියෙනවා විශේෂ ලක්ෂණ තුනක්.පලවෙනි එක තමයි ගතිගුණ(properties).එකෙන් ඔබ්ජෙක්ට් එකේ අභ්‍යන්තර තත්වය(internal state) පවත්වාගෙන යනු ලබනවා.ඊලගට ඔපරේෂන්ස්.ඔබ්ජෙක්ට් එකට අවශ්‍ය ක්‍රියාකාරිත්වය ලබා දෙන්නේ එමගින්.අවසානෙට ඕනෙම ඔබ්ජෙක්ට් එකට යුනික් අයිඩන්ටිටි(unique identity) එකක් තියෙනවා.ප්‍රොපටීස් හා ෆන්ක්ෂන්ස අතර තියෙන සම්බන්දය මේ විදියට අදුනගන්න පුළුවන්.ෆන්ක්ෂන්ස් මගින් එහි ප්‍රොපටීස් පාලනය(control) කරනු ලබනවා.ෆන්ක්ෂන් එකක ප්‍රතිපලය රදා පවතින්නේ ඔබ්ජෙක්ට් එකක ප්‍රොපටීස් මත.ඒවගේම ප්‍රොපටීස් මගින් ඔබ්ජෙක්ට් එකේ හැසිරීම තීරණය කරනු ලබනවා.උදාහරණයක් විදියට කාර් කියන ක්ලාස් එකේ තිරිංග තත්වය කියන ප්‍රොපටි එක ගනිමු.තිරිංග හරියට වැඩ කරන්නේ නැත්තම් ප්‍රතිපලය ගැන තීරණයක් ගන්න බැහැ.

පසුවදන.......................
වස්තු පාදක පද්ධති සංවර්දනය පිලිබදව ගෙන ආ ලිපි මාලාව මෙයින් නිම කිරීමටයි,මේ සුදානම.අපේ මාතෘකාව අයත් වෙන්නේ රුහුණු විශ්වවිද්‍යාලයේ පරිගණක උපාධි පාඨමාලාවේ පළමු වසර දෙවන සිමෙස්ටරයට.එතනදී අප මේ කතාකල OOA/OOD අමතරව UML/UP වල මුලික කරුනුත් සාකච්චා කළා.ඇත්තටම අපි මෙතනදී කතාකලේ ඉතාම කෙටියෙන් මුලිකම කරුණු ටිකක්.නමුත් මම
හිතනවා,නවකයෙකුට ආරම්බයක් හැටියට මේ ටික වුනත් ලොකු හයියක් වේවි කියලා.මේ කොර්ස් යුනිට් එකේදී අපිට රෙකමන්ඩ් කරපු අතිරේක පොත් දෙක තමයි,
Grady Booch - Object-Oriented Analysis and Design With Applications, 2nd EDITION
Applying UML and Patterns by Craig Larman
මේ පොත් ගැනත් යමක් සදහන් කලොත් පලවෙනි පොත නම් ටිකක් අමාරුයි තේරුම් ගන්න.දෙවෙනි පොත නම් ගැටළුවක් නැහැ,සාමාන්‍ය ඉංග්‍රීසි දැනුමකිනුත් තේරුම් ගන්න පුළුවන්.හරි එහෙනම් ගිහින් එන්නම්.තවත් පරිගණක පාඩමකින් යලි හමුවෙමු.

Thursday, January 16, 2014

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

අපි පහුගිය ලිපියේ OO වල පළමු ෆීචර්(feature) එක ගැන කතා කළා.හරි දැන් අපි මේකේ ප්‍රයෝජනය මොකක්ද කියලා බලමු.කෙටියෙන් කිව්වොත් අබ්ස්ට්‍රක්ෂන්(abstraction) එකෙන් බලා පොරොත්තු වෙන්නේ ඉන්ටර්ෆේස්(interface) එක ඉම්ප්ලිමන්ට්(implementation) එකෙන් වෙන්කරලා අදුන ගන්න එක.අපි ඒ ගැන සවිස්තරව බලමු.

ඉන්ටර්ෆේස්  හා ඉම්ප්ලිමන්ටේෂන් එක අතර වෙනස


උදාහරණයක් විදියට අපි කලින් කතා කරපු ඩ්‍රයිවර්ට ස්ටියරින්ග් වීල්(steering wheel) එක ක්‍රියාත්මක කරන්නේ කොහොමද කියලා දැනගත්තම ප්‍රමාණවත්,එහෙම නැතුව ඒකෙ අභ්‍යන්තර මැකැනිසම්(mechanism) එක ඒ කියන්නෙ  වීල් එක සම්බන්ද වෙන එක එක කොම්පොනන්ට්ස්(components) හා ජෝයින්ට්ස්(joints) ගැන දැනුමක් අවශ්‍ය වෙන්නේ නැහැ.ඉන්ටර්ෆේස් එක කියන්නෙ අදාල දේත් එක්ක මොනවද කරන්න පුළුවන්(what can be done) කියන එක යුසර් ගේ වීව්(view) එකින්.ඉම්ප්ලිමන්ටෙෂන් කියන්නෙ යුසර්ට වැදගත් නැති අදාල දේ ගොඩනගද්දී අවශ්‍ය වෙන අභ්‍යන්තර ක්‍රියාවලි(internal operations).

එන්කැප්සියුලේෂන්(encapsulation)
යුසර්ගේ වීව් එකට අනුව ෆීචර්ස් ගණනාවක් එන්ටිටි(entity) එකක(අබ්ස්ට්‍රක්ෂන් කිව්වත් වැරදි නැහැ) කැප්සියුල්(capsule) කරලා තියෙන්නේ.එක හරියට අපි හොදටම දන්නා බෙහෙත් කරලක අදාළ රසායනික සංයෝගය අන්තර්ගත කරලා තියෙනවා.එන්ටිටි එකෙන් යුසර්ට සර්විසස්(services) සපයන්නේ ඉම්ප්ලිමන්ට් ඩිටේල්ස්(implement details) සගවලා ඉන්ටර්ෆේස් එකක් හරහා.මෙලෙස  එන්කැප්සියුලේෂන් හරහා තොරතුරු සැගවීම සිදුකරනු ලබනවා.
කලින් අප බාවිතා කල උදාහරණයම සැලකුවොත් ඩ්‍රයිවර් ස්ටීරින්ග් මැකැනිසම් එක දන්නේ නැහැ.එක තොරතුරු සගවීමක් ලෙස දක්වන්න පුළුවන්.මොන වර්ගයේ ස්ටීරින්ග් වීල් එකක් වුනත්(කාර් එකක,බස් එකක,වැන් එකක මොක වුනත්) කරකවන විදිය එකයි.ඒ අනුව ස්ටීරින්ග් වීල් එක කැරකැවීම ඉන්ටර්ෆේස් එක හැටියට සලකන්න පුළුවන්.යුසර්ට(මෙතැනදී නම් ඩ්‍රයිවර්ට) පෙනෙන ස්ටීරින්ග් වීල්  එක(ඉන්ටර්ෆේස් එක)  වෙනස් වෙන්නේ නැහැ ස්ටීරින්ග් මැකැනිසම් එක මොක වුනත්(පවර් ස්ටීරින්ග් වගේ).මේ අනුව අපිට පැහැදිලි වෙන දෙයක් තමයි අපිට පුළුවන් වෙනවා,ඉම්ප්ලිමෙන්ටේෂන් එක වෙනස් කරන්න ඉන්ටර්ෆේස් එකට වෙනසක් වෙන්නේ නැතුව.මේකට තමයි කියන්නෙ ඉම්ප්ලිමන්ටෙෂන් ඉන්ඩිපෙන්ඩන්ස්(independence) කියලා.
ව්‍යුහගත ක්‍රමලේකනයේදී(structured programming) පළමුවෙන්ම ගැටළුවක් විසදීම සදහා අලෝගරිතමයක් සකස් කරනු ලබනවා.අපේ වැඩසටහනෙහි ෆන්ක්ෂන්ස්(functions) තීරණය කරනු ලබන්නේ එම අලෝගරිතමයට අනුව.එලෙස ලබාගත් ෆන්ක්ෂන්ස් දත්ත කොටසක් මත ක්‍රියාත්මක වෙනවා.මෙම ක්‍රමලේකනයේදී අලෝගරිතමය සංවර්දනය කිරීමට සුවිශේෂ තැනක් හිමිවෙනවා.දත්ත සදහා සුවිශේෂී තැනක් හිමිවෙන්නේ නැහැ.මෙයින් ඇතිවන අවාසනාවන්ත තත්වය නම් යම් තීරණාත්මක දත්ත වලට පවා ග්ලෝබලි ඇක්සෙස්(globally access) කරන්න පුළුවන් වීමයි.
නමුත් රියල් වර්ල්ඩ්(real world) එකේදී ගැටළුවක් විසදන්නේ වගකීම ඔස්සේ දිවෙන ප්‍රවේශයකින්.ටිකක් විතර තේරුනේ නෑ නේද?කමක් නැ කියවගෙන යන්න දිගටම.හරි,මම කිව්වේ රියල් වර්ල්ඩ් එකේ ගැටළුවක් විසදන ස්වබාවික ක්‍රමය(natural method) ගැන.එහි පහත ලක්ෂණ දකින්න පුළුවන්.
1.පණිවිඩ හුවමාරුව(message communication).
2.වියුක්ත දැකීම(abstraction).
3.දත්ත සැගවීම(data hiding).
මෙලෙස අප නොදැනුවත්වම ගැටළු විසදීමේ සාමාන්‍ය ක්‍රමවේදය තුල අප අවදානය යොමු කරලා තියෙන්නේ අපි කලින් OO වලදී ඉගෙන ගත්ත සංකල්ප වලට නේද?මෙතනදී ව්‍යුහගත ක්‍රමලේකනයෙදී අපි විශේෂ තැනක් නොදීපු දත්ත(data) වලට සුවිශේෂී තැනක් දෙනවා.මොකක්හරි ක්‍රියාවක් අරබන්නේ මැසේජ් එකක ආයාචනයකින්(invoke).දත්ත හා ෆන්ක්ෂන්ස් එකට බන්ඩ්ල්(bundle) කරලා හදාගත්ත ඔබ්ජෙක්ට්ස් සමුහයක ආදාරයෙන් තමයි ගැටලුව විසදන්නේ.මෙලෙස වස්තු පාදක ක්‍රමලේකන බාශාවන්  දියුණු කරලා තියෙන්නේ වස්තු පාදක සංකල්ප බාවිතා කරලා.


වස්තු පාදක ක්‍රමලේකන සුසමාදර්ශන(object-oriented programming paradigms).
මේ දක්වා අපි Object-Oriented කියන වචනෙට බාවිතා කරේ වස්තු පාදක කියන වචනේ.නමුත් මම මේ ලිපි පෙළ ආරම්බයේදීම කිව්වා මෙතනදී වඩා හොදම වචනේ වස්තු දිශානත කියන එක.ඒ මොකද වස්තු පාදක(Object-based) කියන තැනදී ඉස්මතු වෙන්නේ ඩේටා අබ්ස්ට්‍රක්ෂන්(data abstraction) කියන එක විතරයි.වස්තු දිශානත කියන තැනදී ඊට එහා ගිය ඉන්හෙරිටන්ස්(inheritance) හා පොලිමොෆිස්ම්(polymorphism) කියන තවත් ලක්ෂණ දෙකක් ඉස්මතු වෙනවා.ඒ අනුව වස්තු යොදාගෙන කරනු ලබන ක්‍රමලේකනය කොටස් දෙකකට බෙදන්න පුළුවන්.
1.object-based programming languages
2.object-oriented programming languages
එතකොට object-based ක්‍රමලේකනයේදී  එන්කැප්සියුලේෂන් වැනි ලක්ෂණ දක්නට ලැබුණත් ඉන්හෙරිටන්ස් ,පොලිමොෆිස්ම් හා පණිවිඩ හුවමාරුව හුගක් දුරට දකින්න ලැබෙන්නේ නැහැ.
object-based languages=Encapsulation+Object Identity
මෙවෙනි පරිගණක බාෂා සදහා උදාහරණ ලෙස Ada,C,Haskell යන්න දැක්විය හැකිය.
object-oriented languages=Object based features+Inheritance+Polymorphism
Object-Oriented languages වල මොන සේවකයාසයිස් එකේ ප්‍රොජෙක්ට් එකකට වුනත් වැඩසටහනක බිල්ඩින්ග් බ්ලොක්ස් වෙන්නේ මොඩියුල කියල දෙයක්.මොඩියුලයක් කියන්නෙ එකිනෙක සම්බන්ද වෙන(logically) ඔබ්ජෙක්ට්ස්,ෆන්ක්ෂන්ස් එක් කරලා හදපු දෙයක්.කලින් අපි බාවිතා කරේ මේකට සබ්ප්රෝග්‍රම්ස් කියන වචනේ බව මතක ඇතිනේ.
මෙතනදී අවසාන වශයෙන් තවත් කරුණු කීපයක් මෙලෙස ගොනු කරන්න පුළුවන්.ක්ලාසස් හා ඔබ්ජෙක්ට්ස්(object-model) මොනවද කියන එක පිලිබදව හොද පැහැදිලි අවබෝදයක් මෙතනදී අවශ්‍ය වෙනවා.ඔබ්ජෙක්ට් එකක් කියන්නෙ සරලව කිව්වොත් මනාව විස්තර කෙරුණු සීමාවක්(crisp-defined boundary) ඇති සංකල්පයක්.ඒ කියන්නෙ පොත,පෑන,ශිෂ්‍යයා,සේවකයා වගේ උදාහරණ ඔබ්ජෙක්ට්ස් වලට දෙන්න පුළුවන්.දැන් මේ එන්ටිටි ටික බලන්න.ලස්සන,ගංගාව,අහස...ඒවායේ සීමාව පිළිබද අදහසක් නැහැ.ඒ නිසා ඒවා ඔබ්ජෙක්ට්ස් හැටියට ගන්නේ නැහැ.සත්‍ය ලෝකයේ ගැටළු විසදන්න අපි ඔබ්ජෙක්ට්ස් හා ක්ලාසස් වලින් යුක්ත ආකෘතියක් හදාගන්නවා,මේක තමයි ඔබ්ජෙක්ට් මොඩ්ල් කියලා හැදින්වෙන්නේ.
 
තවත් විස්තර රැගත් ලිපියකින් නුදුරේදීම හමුවෙමු.

Thursday, January 9, 2014

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

මෘදුකාංග අර්බුදය(software crisis)

පසුගිය ලිපියේ අපි කතා කලේ මෘදුකාංග සංවර්දනය සංකීර්ණ වීමට හේතු.එකේ ප්‍රතිපලය වෙන්නේ මෘදුකාංග අර්බුදය.ප්‍රමාද වී බාරදීම්(late delivery),අපේක්ෂිත අයවැය ඉක්මවීම්(exceeding the budget),අඩු තත්වය(low quality),ඉල්ලුම් තෘප්ත කිරීමට අසමත් වීම්,විශ්වාසදායක බව අඩුවීම්(less reliability) වැනි  දේ මෘදුකාංග අර්බුදයේ ලක්ෂණ ලෙස දක්වන්න පුළුවන්.නිසි ලෙස ව්‍යුහගත(structured) හා සංවිදානාත්මක ක්‍රමවේදයක්(organized approach) මගින් මීට බොහෝ දුරට පිළියම් සෙවිය හැකි වෙනවා.නමුත් මෘදුකාංග සංවර්දනය හා නඩත්තුව සදහා වැය වන මුදල දෘඩාංග සංවර්දනය(hardware development) සදහා වන මුදලට වඩා සැලකිය යුතු ලෙස වැඩිවන බව වසර කිහිපයක් පසුපසට බලද්දී විශ්ලේෂකයන්ට පෙනී ගිය කරුණක් වුනා.SDLC හි එක් එක් ෆේසස්(phases) වලට වැයවන මුදල් සැලකුවහොත් නඩත්තුව(maintenance) සදහා 60% ක් පමණ වුනා.එතකොට අනිත් සියලු ෆේසස්  වලට ගියේ 40% විතර මුදලක්.ඒ කියන්නෙ එතෙක් නිර්මාණය වෙලා තිබුණු මෘදුකාංග ඉංජිනේරු සංකල්පයන්(software engineering concepts) එතරම් මේ අර්බුදයට විසදුම් ලෙස බල නොපාන බව පෙනී ගියා.එතෙක් පැවති ක්‍රමලේකන බාශාවන් වල තිබු මුලික අඩුපාඩු දෙකක් හදුනා ගත හැකිවුනා.එනම්,මෘදුකාංග නඩත්තුව හා ප්‍රතිබාවිතයක්(re-usability) නොවීම යි.මෙනිසා වඩා විශ්වාසදායක හා ප්‍රතිබාවිතයට ඉඩදෙන පද්ධති නිපදවීමට අදාළ මුලදර්ම(concepts) හා මෙවලම්(tools) නිර්මාණය කිරීමට පෙළඹුනා.අපි දන්න විදියට පසුගිය කාල වකවානුව තුල ප්‍රමිතිගත දෘඩාංග  උපාංග(standard hardware components) (සිලිකන් චිප් වැනි) ඉතා ශීග්‍රයෙන් දියුණු වුනා.කිසියම් දෘඩාංග බිදවැටිමකදී  පහසුවෙන් එහි පැවති ක්‍රියාකාරිත්වයට බාදාවක් නොවන විදියට එය යලි ප්‍රතිස්ථාපනය(replacement) කරන්න පුළුවන්. මෙම ප්‍රමිතිගත කොම්පොනන්ට් බාවිතය වෙනත් ප්‍රොඩක්ට් වලදීත් බාවිතයට ගැනෙනවා.එතෙක් මෘදුකාංග සංවර්දන ක්ෂේත්‍රය  ස්පර්ශ නොකළ මෙම රියුසබල් කම්පනන්ට් බාවිතය  මෘදුකාංග සන්වර්දන ක්ෂේත්‍රයට නව මගක් එක්කලා. 1980 දී පමණ පැමිණි OOP සංකල්ප මගින් ක්‍රමලේකනය සිදුකිරීමේදී තාර්කික බුද්ධියත්(logical intelligence),නිර්මානශීලිබවත්(creativity),ටැලන්ට් එකත්  බෙහෙවින් වැදගත් වෙනවා.එසේම 
ව්‍යුහගත ක්‍රමලේකනය වැනි පුර්ව ක්‍රමලේකන සංකල්පවලින් පරිබාහිරව චින්තනය මෙයෙහවීමත් ඉතා වැදගත් වෙනවා.

ගැටළුවක් විසදන සාමාන්‍ය ක්‍රමය උදාහරණයක් ඇසුරෙන් පැහැදිලි කරගනිමු.

කළමනාකරුවෙකුට තමන්ගේ පාරිබෝගිකයා සේවා කරන ස්ථානයට ගිහින් ලියුමක් අත්සන් කර ගැනීමට අවශ්‍ය යයි සිතමු.ඉතින් මේ සදහා පළවෙනියටම මැනේජර්ට ලියුම් ටයිප් කරන්නා ගාවට ගිහින් ලියුමක් ලියව ගන්න ඕන.ඉතින් ඔහු ගිහිල්ලා තමන් ගේ ෂෝර්ට් හෑන්ඩ් රයින්ටින්ග් එක දෙනවා.එක බලාගෙන ලියුම් ලියන්නා පරිගණකයත් මුද්‍රණ යන්ත්‍රයත් බාවිතයෙන් ලියුම සකස් කරලා මැනේජර්ට දෙනවා.ඊලගට ඔහු එකත් අරගෙන ඩ්‍රයිවර් හමුවෙන්න යනවා, කස්ටමර් ගාවට යන්න.ඩ්‍රයිවර් ගමනාන්තයට යන්න යොදාගන්නේ කාර් එක.
දැන් අපි මේ සිද්දිය පොඩ්ඩක් විමසලා බලමු.මැනේජර් ගැටලුව විසදන්න ඔබ්ජෙක්ට්ස්(objects) දෙකක් යොදාගත්තා.එකක් ලියුම් ලියන්නා,අනෙකා ඩ්‍රයිවර්.මෙහිදී මැනේජර්ට වැදගත් නැහැ ,ලගුලේකඛයා ලිපිය සකස් කරන්නේ කොහොමද කියලවත්,ඩ්‍රයිවර් කාර් එක ගෙනියන්නේ කොහොමද කියලවත් .ඒක වෙන වෙනම පුද්ගලයන් දෙන්නෙකුට පවරලයි(assigned) තියෙන්නේ ,ඊලගට තව දුරටත් විමසුවහොත් ඩ්‍රයිවර් තමන්ට පැවරුණු කාර්යය(task) කරන්නේ කාර් කියන object එක බාවිතයෙන්,ඒ වගේම ලගුලේඛකයා ලිපිය සකස් කරන්නේ කම්පියුටරය හා ප්‍රින්ටරය බාවිතයෙන්.මැනේජර් ස්වායත්තව එකිනෙකාට ටාස්ක්ස් පවරපු ඒකයි මෙහිදී වෙලා තියෙන්නේ,එකිනෙකාගේ වගකීම්(responsibilities) අවබෝදයෙන් කටයුතු කරාම සංකීර්ණ කටයුත්තක් වුනත් මේ විදියට සරල විදියට බෙදන්න පුළුවන්.තවද මැනේජර් එක එක ඔබ්ජෙක්ට් වැඩ පවරන්නේ මැසේජ් එකක් මගින්.ඒ වගේම පවරපු වැඩේ කරන්න ඒ ඒ ඔබ්ජෙක්ට් එක මෙතඩ් එකක් බාවිතා කරනවා.සීක්වන්ෂල් ලැන්වේජ්(sequential language) එකක නම් අපි මෙතඩ් එකක්වෙනුවට බාවිතා කරේ ෆන්ක්ෂන්ස් ,ෆන්ක්ෂන්ස්වලට කෝල් කරලා තමයි වැඩක් කරගත්තේ.

ෆන්ක්ෂන් කෝල් කිරීම(function calling) හා මැසේජ් පාසිංග්(massage passing) අතර ඇති වෙනස පැහැදිලි කරගනිමු.
  • ෆන්ක්ෂන්ස් ආර්ග්යුමන්ට්ස්(arguments) නැතිව හෝ කිහිපයක් බාවිතා කරන්න පුළුවන්.නමුත් මැසේජ් පාසිංග් වලදී අඩු වශයෙන් එක් ආර්ග්යුමන්ට් එකක් හෝ බාවිතා කරනවා.
  • ෆන්ක්ෂන් එකක් සෑම විටම විශේෂ කාර්යයක් හා බද්දව පවතිනවා.නමුත් මැසේජ් එකක් යනු ඩේටා වලට පිවිසීම(access) සදහා බාවිතා කරනු ලබන්නකි.එමගින් object එකෙන් කිසියම් ක්‍රියාකාරිත්වයක් අයැද සිටිනු ලබනවා.

මීලගට OOSD වල මුලික සංකල්ප ටික අප පැහැදිලි කර ගනිමු.එනම්,
  •     abstraction
  •     encapsulation
  •     modularity
  •     hierarchy යන ඒවා දක්වන්න පුළුවන්.
මේවාට අමතරව තවත් ලක්ෂණ දෙකක් ලෙස ,
  •       inheritance
  •       polymorphism යන ඒවා දක්වන්න පුළුවන්.

abstraction-වියුක්ත දැකීම

ගැටළු වක් විසදීම සදහා අත්‍යවශ්‍ය අවශ්‍යතාවයක් ලෙස  දක්වන්න පුළුවන්.කලින් උදාහරණයට අනුව මැනේජර් විසින් තමන් ගමනාන්තයට ගෙන යන මෙන් පණිවිඩයක් දෙනු ලබනවා.වාහනය පැදවීම යන ක්‍රියාව කරනු ලබන්නේ ඩ්‍රයිවර්(driver) විසින්.ඩ්‍රයිවර්ට එම කාර්ය කල හැකිබව පමණක් මැනේජර් දනී.ඒ අනුව මනේජර්ගේ දෘෂ්ටිකෝණයෙන්(manager's perspective) ඩ්‍රයිවර් යනු තමන් ගමනාන්තයට ගෙන යන සේවකයා.එම වියුක්ත තොරතුර මැනේජර්ට ප්‍රමාණවත්.ඒ අනුව තම කාර්යාලයේ සේවය කරන්නෙකු ලෙස ඩ්‍රයිවර්ගේ නම  මැනේජර් විසින් දැනගන්න ඕන.ඊලගට ඩ්‍රයිවර්ගේ දෘෂ්ටිකෝණයෙන් මේ වැඩට පාවිච්චි කරන්නේ කාර් එක.එතනදී කාර් එකේ ප්‍රොපටීස්(properties) වන බ්‍රෑන්ඩ් නේම්(brand name),රෙජිස්ටර් නම්බර්(registration number) ,කලර්(color),ඉන්දන වර්ගය(fuel type) හා ෆන්ක්ෂන්ස් වන පැදවීම-drive(),ස්ටාර්ට් කිරීම-start(),පදවන වේගය-currentSpeed()යන ඒවා දත යුතු වෙනවා.එහෙම නැතුව කාර් එකේ අබ්යන්තර ක්‍රියාකාරිත්වය(internal implementation) ගැන විස්ටර ඩ්‍රයිවර්ට වැදගත් නැහැ.ඒ වගේම මනේජර්ගේ පර්ස්පෙක්ටිව් එකෙන් කාර් එක ගැන දැනගන්න ඕන ,එක A/C ද නැද්ද ,කාර් එකේ ටයිප් එක වගේ දේවල්.ඒ අනුව අපිට පැහැදිලි වෙන්නේ එකම එන්ටිටි එකක් ගැන වියුක්ත තොරතුරු විවිද පුද්ගලයන්ගේ දෘෂ්ටිකෝණ අනුව වෙනස් වන වග.
සරලවම කිව්වොත් ඇබ්ස්ට්‍රැක්ශන් කියන්නෙ මොකක් හරි වස්තුවක තියෙන්න ඕන අත්‍යාවශ්‍යම තොරතුරු(essential features) ටික.එක ඒ වස්තුව ගැන ගුණයක් හෝ ක්‍රියාකාරිත්වයක් වෙන්න පුළුවන්.ඒ අනුව හොද ඇබ්ස්ට්‍රැක්ශන් එකක පහත ලක්ෂණ තියෙන්න ඕන.
1.තේරුමක් තියෙන නමක්(අපේ උදහරනේදී නම් ඩ්‍රයිව් කරන ක්‍රියාව කරන්න ඩ්‍රයිවර් කියල ගත්ත).
2.අවම තොරතුරු (ඒ එක්කම සම්පුර්ණත්වයත් තියෙන්න ඕන).
3.ඒවා එකට ගැලපෙන තොරතුරු වෙන්න ඕන.

තවත් විස්තර රැගත් ලිපියකින් නුදුරේදීම හමුවෙමු.

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) කියන්නෙත්.
ප.ලි.මෙහි අන්තර්ගත කරුණුවල නොගැලපෙන,සාවද්‍ය යමක් ඇත්නම් ඒ පිළිබද දැනුමැත්තෙකු විසින් පෙන්වාදෙනු ලබන නිවැරදිකිරීමක් කෘතඥපුර්වකව පිළිගන්නෙමි.
තවත් කොටසක් ඉදිරියේදී බලාපොරොත්තු වන්න.