Sunday, May 16, 2010

Java වස්තු පාදක ක්‍රමලේඛනය II (objects)

  • Objects
සැයු: මෙම පාඩම කලින් පාඩම(Java classes) සමග සම්බන්ද බව සලකන්න. 

Object එකක් යනු data සහ method වල එකතුවක් ලෙස හඳුන්වන්න පුලුවන්. සැබෑ ලෝකයේ වස්තූන් Java තුල නිරූපණය ක‍රන්නේ objects භාවිතයෙන්. classes තමයි object එකේ design එක පිලිබඳ තීරණය ක‍රන්නේ.
class එක භාවිත ක‍ර objects සෑදූ පසු ඒවා එක එකක් වෙන වෙනම පරිගණකයේ ප්‍රධාන මතකයේ(RAM) තැන්පත් වීම සිදුවනවා. ඉන්පසු අදාල කාර්යය ඉටුකර ගැනීම සඳහා අපට ඒවා යොදාගන්න පුලුවන්.


අපි බලමු පසුගිය පාඩමේදී අපි යොදාගත් Radio class එක භාවිතයෙන් objects සකසා ගන්නා ආකාරය.
ඔබගේ පහසුව සඳහා මම Radio class එකේ කේතය නැවත මෙම පාඩමේ ඉදිරිපත් ක‍රනවා.

Radio class 
class Radio {
 //Attributes Declarations
 String Band;
 int Volume;
 float Frequency;
 
 //Constructors
 public Radio(){
  Band="FM";
  Volume=13;
  Frequency=90.5f;
 }
 
 //Methods
 public void tuneUp(){
  if(Frequency < 108.0 )
   Frequency=Frequency+1;
 }
 
 public void tuneDown(){
  if(Frequency > 88.0 )
   Frequency=Frequency-1;
 }
 
 public void increaseVol(){
  if(Volume < 48 )
   Volume=Volume+2;
 }
 
 public void decreaseVol(){
  if(Volume > 2 )
   Volume=Volume-2;
 }
}
අපි දැන් බලමු class එකකින් objects සාදාගැනීමට අදාල Java syntax මොනවාද කියලා.උදාහ‍රණ සඳහා ඉහත Radio class එකම යොදා ගනිමු.

class එකකින් object එකක් සාදා ගැනීම සඳහා new Keyword එක භාවිතා කෙරෙනවා.
Syntax 01:
ClassType ObjectName;
ObjectName=new ClassType(); //default constructor
//or 
ClassType ObjectName;
ObjectName=new ClassType(parameter-list);
Example :
Radio rad1;
rad1=new Radio();

Syntax 02:
ClassType ObjectName=new ClassType();
//or
ClassType ObjectName=new ClassType(parameter-list);
Example :
Radio rad1=new Radio();


දැන් අපි බලමු අපි සකසාගත් object එක පරිගණකයේ ප්‍රධාන මතකයේ(RAM) තැන්පත් වීම සිදුවන්නේ කොහොමද කියලා.
මුනින්ම new keyword එක ගැන බලමු.
new keyword එක මගින් සිදුවන්නේ දී ඇති class type එකෙන් object එකක් RAM එක තුල සාදා එයට reference එකක් (යොමුවක්) අදාල variable එක වෙත යැවීමයි. 
ඉහත උදාහ‍රණය අනුව ගතහොත්,unique(අනන්‍ය) Radio object එකක් RAM එක තුල සාදා එයට reference එකක් rad1 නමැති variable එකට assign කිරීම සිදුක‍රයි.
මෙහිදී ඔබ තේරුම් ගත යුතු කරුණ වන්නේ ඇති Java හි භාවිතා වන variable දරාගෙන(hold) සිටින්නේ object එකක් නොව object එක සඳහා reference එකකි. තව දුරටත් පැහැදිලි ක‍රන්නේ නම් Java variable එකක් තුල ඇත්තේ object එක RAM එක තුල පවතින ස්ථානයට අදාල memory address එකකි. memory address එකක් සඳහා උදාහ‍රණ : Ox23FF50 එනම් object එක හඳුනා ගැනෙනුයේ අදාල memory address එකෙනි.

දැන් අපි බලමු object එක කොහොමද RAM එක තුල තිබෙන්නේ කියලා.
object එකක් RAM එකේ heap නමැති විශේෂ කලාපය තුල විසිරී පවතිනවා. ඉහත rad1 නමැති object එක සෑදීමෙන් පසුව rad1 object එක RAM එකේ පවතින ආකාරය පහත දැක්වෙන සටහන අනුව බලමු.

දැන් object එකක් RAM එකේ තිබෙන ආකාරය ගැන පැහැදිලි ඇතියි සිතනවා.
ඔබ දකින්න ඇති rad2 කියලා තිබුන Radio object එකේ තිබුනෙ null කියලා value එකක්. null කියන්නේ Java තුල භාවිතාවන literal value එකක් ඇතැම් තැන් වල manifest constant එකක් කියලත් හඳුන්වනවා.නමුත් මෙය ජාවා keyword එකක් නොවෙයි.
හොඳයි මොකක්ද මේ null value එකෙන් වෙන්නෙ.?
මෙමගින් object එකක් memory location එකක් refer නොක‍රන බව එනම් එය අභිශුන්‍ය බව දක්වනවා. rad2 යනු null object එකක් නිසා එය කිසිදු memory location එකක් සමග බැඳී නැහැ කිව්වොත් නිවැරදියි.


ජාවා ප‍රිගණක භාෂාවේ ඇති සුවිශේෂ වාසියක් වන්නේ සාදන ලද objects සඳහා වෙන් ක‍රන ලද memory ප්‍රමාණයන් නැවත නිදහස් කිරීම සඳහා වෙහෙස වීමට අවශ්‍ය නොවීමයි. එය සිදුකිරීම සඳහා JVM එක මගින් ක්‍රියාත්මක වන සුවිශේෂ thread එකක් වන "Garbage Collector" බැඳී සිටිනවා. අපගේ වැඩසටන මගින් සකසන ලද කිසියම් object එකක් තවදුරටත් භාවිතා නොවන තත්වයට පත්වූ විට "Garbage Collector" විසින් එම object එක සඳහා වෙන් ක‍රන ලද memory ප්‍රමාණය නිදහස් කිරීම සිදුක‍රනවා.
මෙහි ඇති වාසිය ස‍රළ ජාවා වැඩසටහන් වලදී එත‍රම් නොපෙනුනද සංකීර්ණ data structures භාවිතාවන වැඩසටහන් වලදී හොඳින් කැපී පෙනෙනවා. C/C++ යොදාගෙන එවැනි වැඩසටහන් ලිවීමේදී අනිවාර්‍යයෙන්ම වෙන්ක‍රන ලද (allocate) memory ප්‍රමාණය තව දුරටත් අවශ්‍ය නොවන තත්වයට පත්වූ විට release කල යුතුයි. එසේ release නොකිරීම නිසා ඇතිවන තත්වය "memory leak" එකක් ලෙස හැඳින්වේ. එය ප‍රිගණක වැඩසටහනක ඇති දෝෂ තත්වයකි.

ක්‍රියාකාරී ජාවා වැඩසටහනක process එකට අදාල heap කොටස ගැන පහත රූප සටහන ආධාරයෙන් නිරීක්ෂණය කරන්න. 
 
අපි ඊලඟ පාඩමෙන් constructors සහ methods ගැන අධ්‍යයනය කරමු.
objects ගැන මට කියවන්න ලැබුනු ඉතාම හොඳ පාඩමක් තියනවා. මේ ලින්ක් එකෙන් ගිහින් ඒකත් කියවලා බලන්න.

4 comments:

  1. Ela wadak ayye.idiriyata tiyena padam tikath sarthakawa present karannna puluwan venna kiyala prarthana karanawa.

    ReplyDelete