6/24/11

object oriented programming | වස්තු පාදක ක්‍රමලේකනය II

පසු ගිය පාඩමින් අපි class හා object ගැන අදුනා ගත්තා ..මේ පාඩමින් අපි OOP වල මූලික සංකල්ප 4 ගැන කතා කරමු


  1. Encapsulation (සංවෲත හාවය)
  2. Inheritance (පැවත ඒම)
  3. Abstraction (උකහා ගැනීම)
  4. Polymorphism (බහුරූපි භාවය)
Encapsulation (සංවෲත හාවය)

Encapsulation වල මූලිකම අරමුන තමා දත්ත ආරක්ශාකාරීව භාවිතය හා දත්ත වලට අනවශ්‍ය බලපෑම් සිදුවීමට ඇති ඉඩ කඩ අවම කිරීම 
අපේ කලින් table lamp උදාහරනේ ගත්තොත් එහි තිබෙන switch එකේ ක්‍රියාකාරිත්වයත් හරියට මේ වගේ ..අපිට බල්බ් එකේ statues මාරුකිරීනට වඩා ආරක්ශාකාරි ක්‍රමයක්  switch  එක මගින් ලැබෙනවා

පරිගනක භාශාවක් තුලදි මේ සදහා පහසුකම් ලැබෙන්නේ access specifiers නමින් හැදින්වෙන keywords මගිනුයි
මෙහිදී සියලුම variables වලට private access specifiers ලබා දෙන අතර functions සියල්ල public ආකාරයට සපයනවා

Inheritance (පැවත ඒම)

මෙතනදි is-A  has-A සම්බන්දය තමා බලපාන්නේ ඒ කියන්නේ car is-A vehicle ,van is-A vehicle , jeep is-A vehicle නම් vehicle and car has-An engine කියලා කියන්න පුලුවන් 

මෙතනදි vehicle කියන්නේ super class එකත් car කියන්නේ sub class එකත් කියලා කියනවා
vehicle වලින් තමා car , van  , jeep  තුනම පැවතගෙන එන්නේ ඉහලින් ඉන්නේ vehicle  ඊට යටින් තමා car , van  , jeep  වගේ එව්වා තියෙන්නේ 

vehicle class එකේ තියෙන  වත්කම් (state ) හා හැසිරීම (behavior)   car , van  , jeep  තුනේම දකින්න ලැබෙනවා ඒ වගේම jeep  කියන එකට ආවේනික වෙච්ච 4WD  වගේ විශේෂ behaviors අපිට ඒ අදාල class එකට විතරක් යොදන්න පුලුවන්

මෙහි විශේෂ වාසිය තමා එකම කේත නැවත නැවත ලිවීමට සිදුවීම අඩුවීම

Abstraction (උකහා ගැනීම)
වාහන ගැන කතා කරපු නිසා වාහනයකම උදාහරනයක් ගම්මුකෝ
වාහනයක gearbox එකේ අපිට පෙනෙන ක්‍රියාකාරීත්වය ගත්තොත් ලීවරය යම්කිසි පිහිටුමකට ගත්තොත් අදාල ගියරයට එන්ජිම සම්බන්ද වෙනවා
නමුත් ඇතුලතින් ඒ ගියරය  අදාල දැතිරෝද සැකසුම වෙනස් වීම බල තුලනය වගේ සංකීර්න ක්‍රියා රාශියක් වෙනවා නමුත් ඒ කිසිවක් අපිට පෙනෙන් නෑ 

Abstraction වලදිත් අපිට ලබා දෙන්නේ මේවගේ දෙයක් .. අපි යම් කිසි behavior එකක් සමග වැඩකරනවා නමුත් ඒ පිටුපස තිබෙන සංකීර්න ක්‍රීයාවලි අපට පේන් නෑ .. එය අපෙන් වෙන් වෙලයි තියෙන්නේ 
මෙහි තියෙන ලොකුම වාසිය තමා  සංකීර්න ක්‍රියාවලියේ වෙනසක් සිදුවුනා කියලා අපි ඒක පාවිච්චි කරලා තියෙන තැන් වල වෙනසක් සිදු නොවීම

gearbox එකේ දැතිරෝද සෙට් එක අපි අලුතින් දැම්මා කියලා අපි ගියර්ලීවරය පාලනය කරන හැටි වෙනස් වෙන් නෑ නෙ :D

Polymorphism (බහුරූපි භාවය)

එකම object එක විවිදාකාරයෙන් පැවතීම තමා Polymorphism කියන්නේ  ..ඒ කියන්නේ යම්කිසි object එකක් Inheritance හි is-A කියන සම්බන්දතාවට එක අවස්තාවකට වඩා තෘප්ත කරනවානම් එය Polymorphism    
විදහා දක්වන්නක්

අපි උදාහරනයකට double-cab එකක් ගත්තොත් එහි car හා jeep යන දෙකේම ලක්ෂන තියෙනවා 

එතකොට
 double-cab is-A vehicle 
 double-cab is-A car
 double-cab is-A jeep

ඔය අවස්තා තුනටම ඕක සත්‍යක් වෙනවා .. එතකොට   double-cab කියන object එක car එකක් විදියටත් පවතිනවා jeep විදියටත් පවතිනවා car එකත් jeep  එකත්   vehicle වලින් Inherit වුන නිසා vehicle එකකුත් වෙනවා 

අනිත් බහුලම අවස්තාව තමා method overloading අවස්තාව 

මෙය මම gearbox එක සම්බන්ද උදාහරනෙන් පෙන්වන්නම්
මෙහි changeGear() කියලා   method  එකක් තියෙනවා යැයි සිතන්න

අපිට changeGear()  වලදි අපි කියන ලද ඒ කියන්නේ 1st ,2nd ,3rd වගේ අපි specify කරන Gear එකක්ට මාරු කරන්නත් පුලුවන් නැත්නම් දැනට ඉන්න Gear එකෙ ඉදලා ඉහලට හෝ පහලට ගියරය මාරු කරන්නත් පුලුවන් 

අපිට මෙය මෙහෙම ලියන්න පුලුවන් සරලව

void changeGear(int gear) {
// move gear to given number
}

void changeGear(String shift) {
            // move gear according to given   shift
    }

හැබැයි Polymorphism කියන්නේ  method overloading කරන එකටම නෙවෙයි  method overloading කියන්නේ Polymorphism වල එක් අවස්තාවක් විතරයි

ප\ලී : Encapsulation සහ abstraction වෙනස පැහැදිළි කරන ලදී .. ලිංකුව

================================================
තව sub කොටස් කිහිපයක් තියෙනවා ඒ තමා  dynamic binding, overloading
 ,overriding casting coupling , access specifiers, හා cohesion ..
 මේ ටික  language depend වෙන දේවල්  කීප දෙනෙක් ඉල්ලලා තිබ්බ නිසා
JAVA යොදාගෙන පැහැදිලි කරන්නයි අදහස
================================================

13 comments:

Pushpe Ayya[Real MB] said...

Maxza Macho Issarahatath Karagena Yanna

අමිල said...

උඹ කොහෙන්ද ඔය සිංහල වචන ටික හොයාගත්තේ? :D

Confiuzd ප්‍රෝග්‍රැමර් said...

@Pushpe : එල එල

@අමිල : සිංහලෙන් කිව්වම තමා බොක්කට වදින්නේ ..හරියට "ව්‍යාපාරික ජාවා බෝන්චි"(c) වගේ

Anonymous said...

Encapsulationයි abstractionයි දෙකම එක වගේ කියලයි මට හිතෙන්නෙ.......

K_ZONE said...

real world ගැටලුවන් නිරාකරනය කරන්න real world object ම පාවිච්චි කරලා කරන හැටි real world example වලින්ම කියලා දෙන එකනම් මාරම වටිනවා සහෝ .. keep it up !

Saranga said...

පට්ට වැඩක්, දිගටම ලියන්න... මෙව්ව හරියට තේරෙන්නෙ නැතිව කොච්චර කට්ටක් කෑවද, දැන් තේරෙනව ගින්දර වගේ...

budhajeewa said...

Anonymous June 24, 2011 11:57 PM ගෙ ගැටළුව මටත් තියනවා. Encapsulation සහ abstraction වෙනස පැහැදිළි කරන්න.

Networkදිසා said...

මරු මචෝ පට්ට තේරුනා.දිගටම ලියපන්.java යොදාගෙන පැහැදිලි කරන්න ගත්තු අදහසනම් ගෙිඩක් හොදයි.

Confiuzd ප්‍රෝග්‍රැමර් said...

@budhajeewa & Anonymous : ඔන්න වැඩිදුර පැහැදිලි කිරීමක් කලා
http://www.confiuzdprogrammer.info/2011/06/object-oriented-programming-iii.html

@all : බොහොම ස්තූතීයි රැදී සිටිනවාට
@Networkදිසා : එක ලිපියකට සීමාවේවි .. :D

budhajeewa said...

@Confiuzd ප්‍රෝග්‍රැමර්: තැංකූ වේවා!

Anonymous said...

good work.keep it up

සාරංග said...

Polymorphism වලට method overloading අයිති නෑ නේද ?

Confiuzd ප්‍රෝග්‍රැමර් said...

language depend වෙන දෙයක් ...නමුත් method overloading,constructors overloading,operator overloading C++ \c වලදි pointers පවා Polymorphism යටතේ තමා උගන්වන්නේ නමුත් java වගේ multiple inheritance නැති language එකකදි method overloading වලට වැඩි බරක් දෙන් නෑ

Polymorphism කියන්නේ method overloading කරන එකටම නෙවෙයි method overloading කියන්නේ Polymorphism වල එක් අවස්තාවක් විතරයි

Post a Comment