Showing posts with label Pattern. Show all posts
Showing posts with label Pattern. Show all posts

Saturday, 9 March 2019

Design Pattern වර්ගීකරණය


Design Pattern ඒවායේ සංකීර්ණතාවය, විස්තර වල මට්ටම හා යොදුම් පරාසය(ආදේශ කළ හැකි අවස්ථාවන් ප්‍රමාණය) අනුව වෙනස් වේ. එය හරියට මාර්ග ඉදිකීරීමේ ව්‍යුහය වගේ. මාර්ගයේ මගී හා රථවාහන අරාක්ෂාව  සදහා කඩ ඉරි සමග Traffic light පද්ධතියක් ස්ථාපිත කිරීම හෝ මගී ගුවන් පාලම්(හෝ භූගත උමං) සෑදීම යන දෙකෙන්  එකක් යොදා ගත හැක. ඒ දෙකම එකම ගැටලුවට විසදුම් ලබා දුන්නත් විසදුම් දෙක එකිනෙකට වෙනස් ය.

ගොඩක්ම මූලික හා පහල මට්ටමේ Pattern  හදුන්වන්නේ idioms(ඉංගිසියේදී රූඩි, වාග සම්පදාය හා පිරුඑ යන අර්ථය ලබා දේ) කියාය. මේවා තනි ක්‍රමලේඛ භාශාවකට පමණක්ම යෙදේ.

ගොඩක්ම universal(සර්වත්‍ර) හා ඉහළ මට්ටමේ Pattern  එක architectural patterns වේ. මේවා තනි ක්‍රමලේඛ භාශාවකට පමණක්ම යෙදේ. Developers ලට මෙම patterns  තාත්විකව ඕනෑම භාෂාවකින් ගොඩනැංවිය හැක. අනෙක් Pattern මෙන් නොව මේවා සම්පූර්ණ application එකේ architecture  එක design කිරීමට යොදා ගැනේ.

මීට අමතරව patterns, ඒවායේ අරමුණු හා බලාපොරොත්තු(intent එක) අනුව බෙදේ. ඒ අනුව මූලික කොටස් 3කී.
ඒවා

  • Creational patterns
  • Structural patterns
  • Behavioral patterns


Creational patterns

මෙම pattern වර්ගය class එකකින් object නිර්මාණය වීම පිළිබදව වේ. මේවා තවදුරටත්  කොටස් දෙකකට බෙදේ. ඒවා class-creation patterns හා object-creational patterns වේ. class-creation patterns වලදී instantiation ක්‍රියා වලියේදී inheritance එක එලදායිව යොදාගැනීම ගැන සලකා බැලෙන අතර object-creational patterns වලදී කාර්ය අවසන් කර ගැනීමට එලදායි ලෙස delegation (පැවරීම් ) සිදුකිරීම සලකා බැලේ.

Structural patterns

මෙම pattern වර්ගය class එකේ හා object එකේ සංයුතිය පිළිබදව වේ. මෙය ද ඉහත  patterns එක මෙන් කොටස් දෙකකට බෙදේ. එවා Structural class-creation patterns එක හා Structural object-patterns. අතුරුමුණත් තනා ගැනීමට  inheritance භාවීතා කිරීම Structural class-creation patterns වලින් සිදුකරන අතර අලුත් functionality ලබා ගැනීමට objects තනා ගන්නා විදිහ Structural object-patterns වලදී සලකා බැලේ.

Behavioral patterns

මෙම pattern වර්ගය class එකේ  object වල සන්නීවේදනය පිළිබදව වේ. ඒ කියන්නේ object අතර එලදායි ලෙස සන්නීවේදනය  කරන ආකාරය හා ඒවා අතර වගකීම් පැවරීම් ආදීය ගැන සලකා බැලේ.

Design Pattern හි වැදගත්කම



ඇත්ත නම් ඔබට Design Pattern එකක් වත් නොදැන වසර ගණනාවක් ක්‍රමලේඛකරුවකු ලෙස වැඩ කළමනාකරණ කරනවා විය හැක. දැනටත් බොහෝමයක් මිනිසුන් එසේමයි. එවැනී අවස්ථා වලදී ඔබ කෙසේ හෝ Design Pattern ගැන නොදැන වුවත් සමහර Pattern ගොඩනගා ගන්නවා.ඉතින් ඇයි ඔවුන්(ක්‍රමලේඛකරුවන්) වේලාවන් වැයකරමින් මේවා හදාරන්නේ?

පළමු වැන්න නම්, Design Pattern කියනනේ අත්හදා බලා පරික්ෂාවට ලක් කෙරූ ක්‍රමලේඛ Design කරන විට එන ගැටලු විසදන මෙවලම් කට්ටලයකි. එවැනී ගැටලු මුණනොගැසුනත් එය දැන සිටීම ප්‍රයෝජනවත් මන්ද එය උගන්වනවා අපට object-oriented design හි මූලධර්ම යොදා ගනිමින් සියලූම ගැටලු විසදන ආකාරය.

දෙවැනි කාරණය නම්, Design patterns එක ඔබට හා ඔබේ කණ්ඩායමේ සමාජිකයන් අතර වඩා කර්යක්ෂමව සන්නිවේදනය කිරීමේ භාෂාවක් ලෙස භාවිතා කළ හැකි වීම. ඒ කියන්නේ solution(විසදුම) එක ගැන විස්තර කර කර දෙනවට වඩා patterns නම විතරක් කිවීමෙන් පමණක්  ප්‍රමණවත් වීම. 
උදාහරණයක් ලෙස ඔබ කියන්නේ "මෙයට singleton pattern එක දැම්මානම් හොදයි" කියාය. මෙය මීට වඩා විස්තර කරන්න අවශ්‍ය නැහැ. එවිට අනෙක් සමාජිකයන් ඔබේ යෝජනාව පිළිබදව අදහස ඉන් ලැබෙනවා.

Friday, 8 March 2019

Design Pattern හි ඉතිහාසය


මෙම Pattern සංකල්පය මුලින්ම පෙන්වා දුන්නේ Christopher Alexander විසින් 1977/78 දී රචිත A Pattern Language: Towns, Buildings, Construction නම් කෘතියෙනි. මෙම ග්‍රන්ථයෙන් නාගරික පරිසර නිර්මාණය පිළිබද භාෂාවක් ගැන කියැවේ. මෙම භාෂාවේ එක් එක් ඒකකයන් Pattern නම් වේ. මෙම කෘතියෙන් ගොඩනැගිල්ලේ ජනේල කොපමණ උස් විය යුතුද, ගොඩනැගිල්ලේ තට්ටු කීයක් විය යුතුද,  වටපිටා වේ තණකොළ කොටස කොපමණ විශාල විය යුතුද ආදී විය යුතු දේ ගැන කියැවේ.

මෙම අදහස ලබාගත් Erich Gamma, John Vlissides, Ralph Johnson, හා Richard Helm විසින්  Design Patterns: Elements of Reusable Object-Oriented Software නම් ග්‍රන්ථය 1995 දී ප්‍රකාශයට පත් කරන ලදී. මෙහිදී ඔවුන් design patterns සංකල්පය programming වලට යොදා ගෙන තිබුණි. මෙම ග්‍රන්ථයේ Pattern වර්ග 23 ක් ගැන කියැවේ. මෙය සීග්‍රයෙන්  ජනතාව අතර විකිණි තිබු අතර එය “the book by the gang of four” නමින් හැදින්විය. පසුව එය “the GOF book” යන කෙටි නමින් ද හැදින්විය.

Design pattern හදුනාගනිමු


Design pattern යනු  software design කරද්දී පොදුවේ ඇතිවන ගැටලු සදහා වන විසදුම් වේ. මේවා  ක්‍රමලේඛ design කරද්දී ඔබේ කේත වල  නිතර නිතර ඇතිවන ගැටලු වලදී වෙනස්කම් කර විසැදිය හැකි පෙර නිර්මිත සැලසුම් මෙන් පවති.

ඔබට ගැලපෙන pattern එක සොයා ගැනීමට හෝ සොයාගත් විසදුම ක්‍රමලේඛයට උකහා ගැනීමට නොහැකි වුවහොත් එයට විසදුමක් ලෙස off-the-shelf functions හෝ libraries යොදාගත නොහැක. Design pattern යනු කොඩ් කෑල්ලක් නොවේ සුවිශේෂි ගැටලුවක් විසදා ගැනීමට ඇති පොදු සංකල්පයකී. ඔබට pattern එකේ විස්තර අනුගමනය කර ඔබට ඔබේම ක්‍රමලේඛයට ඔබින විසදුමක් ගොඩනැංවිය හැක.

මෙහි pattern හා algorithms දෙක පටලවා නොගන්න.  මේ සංකල්ප දෙකම programming වලදී හදුනාගත් ගැටලු සදහා solutions ලබා දේ. algorithms සෑම විටම අරමුණක් සපුරා ගැනීමට පැහැදිලි action සමූහයක් ලබා දෙන අතර pattern එකක් කියන්නේ විසදුම පිළිබද වඩා ඉහළ මට්ටමේ(high level) විස්තරයක් වේ. කමලේඛයන් වෙනස් වුවත් ඒවායේ කේතයන්හි pattern එක සමාන විය හැක.

algorithms එක හරියට cooking recipe එකක් වගේ එහි goal එක achieve කරන්න පියවරයන් පැහැදිලිව දක්වා තිබේ. අනෙක් අතට pattern එක blueprint එක වගේ, එහි ප්‍රතිඑලයන් හා අංගයන්  මොනවාද කියා අපට දකින්න පුලුවන් නමුත් එය ගොඩානැංවීමේ නිවැරදී පියවරයන් ඔබට බාර වේ.

Pattern එකක අඩංගු වන දෑ

බොහෝමයක් pattern විධිමත් ලෙස විස්තර කෙරුණූ නිසා මිනිසුන්ට විවිධ තත්ව යටතේ ඒවා ප්‍රතිනිෂ්පාදනය කළ හැක.
මෙහි ඇත්තේ pattern එකේ විස්තර නිරූපනය කරන අංශ කිහිපයකි


  • Intent- මෙහිදී problem එකයි solution එකයි පුලුල්ව විස්තර කරයි.
  • Motivation - මෙහිදී තවදුරටත් problem එකයි solution එකයි පුලුල්ව වැඩිපුර විස්තර කරයි.
  • Structure - මෙහිදී pattern එකේ class වල ආකෘතියන් හා ඒවා එකිනෙක සම්බන්ධ වන ආකාරය පෙන්වයි.
  • Code example- මෙහිදී  වඩා ධාරණය වීම පිණිස solution  එක ප්‍රකට(සෑම දෙනකුම බාවිතා කරන) ක්‍රමලේඛකයකින් නිරූපනය කරයි.