බත් උයමුද සොෆ්ට්වෙයාර් එකෙන් ( design patterns )

DooA

Well-known member
  • Jun 22, 2011
    5,202
    773
    113
    ආගිය අතක් නැත
    බත් උයමුද සොෆ්ට්වෙයාර් එකෙන් ( design patterns )

    ඉස්සෙල්ලම කියන්න ඕනේ මගේ මතය හැටියට කෝඩ් කරනවා කියන්නේ programming නෙමේ. කරන එක පිළිවෙලකට ලස්සනට තේරුම් ගන්න පුළුවන් වෙන්න කරන්න ඕනේ නැත්නම්
    අපි එක්ක වැඩ කරන අනික් අයගෙන් කුණුහරප එහෙම අහගන්න පුළුවන්. මම කියලා දෙන්න යන්නේ programming කරන හැටි නෙමෙයි. ටිකක් විතර advance ටිකක්.
    ඉස්සෙල්ලම කියන්න ඕනේ මේවා මම class ගිහින් ඉගෙන ගත්ත ඒවා නෙමෙයි. තනියම ඉගෙන ගත්ත ඒවා , එක නිසා කිසිම stranded එකක් නැතුව ඇති. වැරදි ඇත්නම් හදන මෙන් ඉල්ලා සිටිමි.

    මෙන්න ප්‍රශ්නේ ,

    කඩයක් තියෙනවා . මේක ඇවිත් කෑම කඩයක්. වෙන කෑම කඩයක් වගේ නෙමෙයි. බත් වර්ග ගොඩක් තියෙනවා, එළවලු වර්ග ගොඩක් තියෙනවා.
    ඔයා මේකට හදනවා සොෆ්ට් එකක්. ඔයාගේ සොෆ්ට් එක කරන්නේ බිල හදලා ප්‍රින්ට් කරන එක.
    මේකේ ගාන හැදෙන්නේ ඔයා ගන්න බත් වර්ගයයි , එළවලු වර්ග ගනනටයි. එකෙත් එක එක එළවලු වර්ගේ එක එක ගණන්.


    දැන් හදන්න සොෆ්ට් එක.

    හරි දැන් කොහොමද හරියටම මේක හදන්නේ. මේකට කියන්නේ The Decorator Pattern එක කියලා . මුල ඉදන් අගටම කියවන්න හිමින්. නොතේරෙන තැන් අහන්න

    මම හදා ගන්නවා Items කියලා interface එකක් එකේ තියෙන්නේ method දෙකයි . එකක් cost අනික getDescription.

    a_zps3d6e3b91.png


    ඊට පස්සේ මම හදා ගන්නවා බත් වර්ග වලට classes. සම්බා , බාස්මති , කැකුළු මේ බත් වර්ග වලට මම classes තුනක් හදාගන්නවා. මේ හැම එකක් ම
    Items interface එක implements කරලා. ඒ කියන්නේ මේ බත් වර්ග හැම class එකකම cost & getDescription method දෙක තියෙනවා.
    ඊළගට මම කරන්නේ cost method එකයි getDescription method දෙක override කරනවා තමන්ට ඕන විදියට.

    b_zpse196565c.png


    මේ class එකේ බත් ජාතිය සම්බනේ ඒකනිසා getDescription එකේදී සම්බා කියල return කරනවා. cost method එකේදී රුපියල් 40යි කියලා return කරනවා.
    දැක්කනේ පොඩි සින් එකක් කරේ.
    දැන් තියෙන්නේ මේ වගේම තව class දෙක තුනක් හදාගන්න එක.

    c_zpsa99c41b9.png


    හරි නේ මේ තියෙන්නේ මගේ class තුන. මේවගේ වෙනස් වෙන්නේ cost එකේදී return කරන ගානයි getDescription එකේදී return කරන value එකයි වෙනස් එච්චරයි.


    දැන් හදාගන්න යන්නේ එළවලු ටික . මේකත් කලින් වගේමයි. පොඩි වෙනසයි තියෙන්නේ
    කලින් බත් වර්ග class වලට අමතරව තව Items කියන interface එකේ object එකකුත් තියෙනවා. තව constructor එකේදී මම ඒ object එකට parameter එකේ තියෙන value එක assign කරනවා.
    දැන් cost එක method override කරන කොට එලවලුවට අදාළ මිල return කරනවා බත් වල වගේම Items කියන object එකේ තියෙන cost method එකත් call කරනවා.

    getDescription එකත් එහෙමම තමයි .

    මේ බලන්න

    d_zps5b318244.png


    මන් මේ වගේ තව එළවලු වරිග 4k හදාගන්න යන්නේ.
    ඒ හතරේ කලින් වගේම තමයි cost එකයි getDescription එකයි විතරයි වෙනස්.

    e_zps109d0c8d.png




    හරි දැන් බත් ටික බෙදන්න යන්නේ.

    මුලින්ම කරන්නේ ඕන කරන බත් ජාතියේ object එකක් හදාගන්නවා .

    ඊට පස්සේ ඕන කරන එළවලු ජාති ටිකේ objectහදනවා . එත් මතකයි නේ එළවලු වල constructor එකේ parameter එකක් තියෙනවා . අපි කරන්න ඕනේ ඒ parameter එකට අපි හදාගත්ත
    බත් ජාතියේ object එක pass කරනවා . එකෙන් return කරන value එක assign කර ගන්නේ ඒ object එකට මයි. තේරුනේ නැත්නම් code එක බලන්න .

    අන්තිමට කරන්නේ object එකේ cost method එක call කරන එක .එතකොට ඔයාගේ බත් එකේ ගානයි ඔයාදාපු එළවලු වල ගානයි ඔක්කොම එකතු වෙලා උත්තරේ එනවා. getDescription එක
    call කරොත් විස්තරේ එයි.


    f_zpsd48ed2a6.png


    output

    g_zps383f4be2.png



    project link :: Download

    මමයි ලිව්වේ , ෆොටෝ ගැහුවේ . කෝඩ් ගැහුවේ , upload කරේ :yes:
     
    Last edited:

    Ayeshlive

    Well-known member
  • Jul 1, 2011
    10,570
    943
    113
    *̶͑̾̾​̅ͫ͏̙̤g͛͆̾ͫ̑͆&
    මේකනම් නියම වැඩක් මහත්මයා.
    ඔබ තුමා අකමැත්තක් නැත්තම් මම මගේ අදහස ඉදිරිපත් කරන්නම්.

    1. coding කියන්නේ programming newei. මේකට සැහෙන දුරකට එකග වෙනවා මම, සහ ඔබ තුමා අදහස් කරන දේ තේරෙනවා.
    2. බත් = rice. දැක්ක ගමන් පොඩි upset එකක් තේරුණා :)
    3. implement කරනවට වඩා extend කරන එක වඩා හොදයි කියල හිතනවා ආධුනිකයන්ට, මොකද interface, abstract classes තේරුම් ගන්න කලින් class එකක් කියන්නේ මොකක්ද, override කරනවා කියන්නේ මොකක්ද වගේ දේවල් කියල දුන්නොත් ඇහෙයි.
    4. ඔබ තුමා අරගෙන තියෙන උදාහරණය විශිෂ්ටයි!
     

    DooA

    Well-known member
  • Jun 22, 2011
    5,202
    773
    113
    ආගිය අතක් නැත
    මේකනම් නියම වැඩක් මහත්මයා.
    ඔබ තුමා අකමැත්තක් නැත්තම් මම මගේ අදහස ඉදිරිපත් කරන්නම්.

    1. coding කියන්නේ programming newei. මේකට සැහෙන දුරකට එකග වෙනවා මම, සහ ඔබ තුමා අදහස් කරන දේ තේරෙනවා.
    2. බත් = rice. දැක්ක ගමන් පොඩි upset එකක් තේරුණා :)
    3. implement කරනවට වඩා extend කරන එක වඩා හොදයි කියල හිතනවා ආධුනිකයන්ට, මොකද interface, abstract classes තේරුම් ගන්න කලින් class එකක් කියන්නේ මොකක්ද, override කරනවා කියන්නේ මොකක්ද වගේ දේවල් කියල දුන්නොත් ඇහෙයි.
    4. ඔබ තුමා අරගෙන තියෙන උදාහරණය විශිෂ්ටයි!

    බත් = rise මට පොඩි බාහිර බලපෑමක් ආවා ඕක ලියද්දි. ( ගැනු සින් ) එකයි

    මම මේක කලේ මචං programming ටිකක් දන්නා කට්ටිය. මුකුත්ම දන්නේ නැති යට ඕව වැඩක් නෑනේ බන් ;)
    අදහස් දැක්වීමට ගොඩක් ඉස්තුත්හි බං

     

    IronRox

    Well-known member
  • Oct 23, 2013
    1,633
    614
    113
    niyama vadak.mamat java igana ganna dagalanava me dawas tike.mata hoda site tikak hari e book tikak hari denna puluvanda.
     

    Error365!

    Well-known member
  • Jun 27, 2012
    13,009
    9,596
    113
    එක තැනක නෑ
    එල එල ඩුවෝ!! නියමෙට පැහැදිලි කරලා තියනවා! :yes: :)
    ටියුෂන් ක්ලාස් එකක් දාපන් :P
    හි හි ඔන්න සැලකුවා ;) +
     

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,936
    1
    9,732
    113
    Gampaha
    TFS
    ඕක කොහොමද දැන් අපි හිතමු බත් වර්ග 30 ක් විතරයි එලවලු වර්ග 100ක් විතර, තියෙනකොට කරන්නෙ, පොඩ්ඩක් පැහැදිලි කරනවද? තව price එහෙම sql query එකකින් ගන්නකොට ඒකද රිටර්න් කරන්නෙ?
     

    DooA

    Well-known member
  • Jun 22, 2011
    5,202
    773
    113
    ආගිය අතක් නැත
    TFS
    ඕක කොහොමද දැන් අපි හිතමු බත් වර්ග 30 ක් විතරයි එලවලු වර්ග 100ක් විතර, තියෙනකොට කරන්නෙ, පොඩ්ඩක් පැහැදිලි කරනවද? තව price එහෙම sql query එකකින් ගන්නකොට ඒකද රිටර්න් කරන්නෙ?

    මේ උදාහරනේ දැම්මේ තේරෙන්න කරන්න මචෝ.

    real world එකේදී මේ pattern එක use කරන්නේ අපි හදන instance වලට additional වැඩ කැලි එකතු කරන්න.

    Realworld example එකක් තමයි java වල තියෙන Stream classes.

    Code:
    FileInputStream fis = new FileInputStream("/objects.gz");
    BufferedInputStream bis = new BufferedInputStream(fis);
    GzipInputStream gis = new GzipInputStream(bis);
    ObjectInputStream ois = new ObjectInputStream(gis);
    SomeObject someObject = (SomeObject) ois.readObject();

    ඇත්තටම බත් උයන එකක් හදනවනම් database එකක් එක්ක sql වලින් යන්න ඕනේ.
     

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,936
    1
    9,732
    113
    Gampaha
    මේ උදාහරනේ දැම්මේ තේරෙන්න කරන්න මචෝ.

    real world එකේදී මේ pattern එක use කරන්නේ අපි හදන instance වලට additional වැඩ කැලි එකතු කරන්න.

    Realworld example එකක් තමයි java වල තියෙන Stream classes.

    Code:
    FileInputStream fis = new FileInputStream("/objects.gz");
    BufferedInputStream bis = new BufferedInputStream(fis);
    GzipInputStream gis = new GzipInputStream(bis);
    ObjectInputStream ois = new ObjectInputStream(gis);
    SomeObject someObject = (SomeObject) ois.readObject();
    ඇත්තටම බත් උයන එකක් හදනවනම් database එකක් එක්ක sql වලින් යන්න ඕනේ.
    එලz.. ඒත් මට ඔය design patterns හරියට තේරුමක් නෑ, මම 8ක් ද කොහෙද ඉගෙන ගත්ත ඒ උනාට පාවිච්චි කරන්නෙ දෙකයි. singleton and command අනික් ඒව ගැන තේරුමක් නෑ. :eek::(
     

    keshara

    Well-known member
  • Sep 20, 2006
    2,039
    418
    83
    කියලා දීලා තියෙන විදිහට නම් ඔනෙම කෙනෙක්ටතෙරුම් ගන්න පුලුවන් මුලික දැනුමක් තියෙනවා නම් ඔයාගේ teaching technique එක නම් සුපර්
    Good Luck