Data Encapsulation සංකල්පය ක්රියාවට නැංවීම සඳහා අනුගමනය කලයුතු නීතිරීති.
1 ) Encapsulate කරන ලද object එකක අභ්යන්තර දත්ත(internal data) කිසි විටෙකත් වෙනත් පරිභාහිර object එකක් මහින් සෘජුව මෙහෙයවීම වැළැක්විය යුතුය.
2 ) දත්ත මෙහෙයවීම(manipulate) සඳහා accessor methods හා mutator methods භාවිතා කල යුතුය.
- Accessor Methods - අභ්යන්තර දත්ත වලට අදාල අගයන් පිටතට ලබාදීමට යොදාගනී. එමෙන්ම අභ්යන්තර දත්ත(internal data) ප්රදර්ශනය කිරීමක් වැනි ක්රියාවලටද යොදාගනී. සාමාන්යයෙන් accessor method එකක නම ආරම්භ වනුයේ get යන උපසර්ගයෙනි(prefix).
- Mutator Methods - අභ්යන්තර දත්ත සඳහා අගයන් සෙට් කිරීම මෙම methods භාවිතයෙන් සිදුකෙරේ. මෙහිදී නව දත්ත වල වලංගු භාවය(validity) සහ සම්පූර්ණත්වය (integrity) සහතික කල හැකිය. සාමාන්යයෙන් mutator method එකක නම ආරම්භ වනුයේ set යන උපසර්ගයෙනි(prefix).
දැන් අපි data encapsulation/data hiding සංකල්පය හොඳින් අවබෝධ කරගැනීම සඳහා උදාහරණයක් බලමු.
Cylinder.java
/** *Author : Kanishka Dilshan *Purpose: Demonstrate encapsulation in Java *Blog : http://javaxclass.blogspot.com */ public class Cylinder{ //radius and height are private members private double radius,height; public Cylinder(double rad,double ht){ radius=rad; height=ht; } //mutator methods public void setRadius(double rad){ radius=rad; } public void setHeight(double ht){ height=ht; } //accessor methods public double getVolume(){ return (Math.PI*radius*radius*height); } public double getSurface(){ return (2*Math.PI*radius*(height+radius)); } }දැන් අපි ඉහත Cylinder class එක භාවිතා කිරීමට සරළ වැඩසටහනක් ලියමු.
EncapDemo.java
public class EncapDemo{ public static void main(String args[]){ Cylinder c1=new Cylinder(4.23,12.56); //invoking accessor methods double surf1=c1.getSurface(); double vol1=c1.getVolume(); System.out.println("Volume of c1 : " + vol1 ); System.out.println("Surface of c1 : " + surf1 ); //invoking mutator methods System.out.println("Modifying the cylinder object.."); c1.setRadius(23.11); c1.setHeight(5.46); double surf2=c1.getSurface(); double vol2=c1.getVolume(); System.out.println("Volume of c1 : " + vol2 ); System.out.println("Surface of c1 : " + surf2 ); } }Output :
Cylinder class එකෙහි data members සියල්ලම private ලෙසද පිටතින් invoke කරන methods සියල්ලම public ලෙසටද යොදා ඇත. එනිසා මෙහිදි Cylinder object එකක internal data භාහිරින් access(ප්රවේශනය) කල නොහැක. තවද අදාල දත්ත මෙහෙයවීම සඳහා accessor සහ mutator methods යොදා ඇත. එමනිසා මෙම Cylinder class එක encapsulate කරන ලද ඒකකයකි.
0 comments:
Post a Comment