Showing posts with label java. Show all posts
Showing posts with label java. Show all posts

Tuesday, February 9, 2021

ஜாவாவில் என்கேப்சுலேசன்.

 



ஆப்ஜெக்ட் ஒரியண்டட் நிரலாக்கத்தில் மொத்தம் நான்கு கருத்துக்கள் உள்ளன.

அவையாவன:

1.      என்கேப்சுலேசன்

2.      அப்ஸ்ட்ராக்சன்

3.      பாலிமார்பிசம்

4.      இன்ஹெரிடன்ஸ்

 

இவற்றில் இந்த கட்டுரையில் என்கேப்சுலேசன் எவ்வாறு ஜாவாவில் பயன்படுகின்றது என்று பார்க்க  இருக்கின்றோம்.

என்கேப்சுலேசன் என்றால் என்ன?

என்கேப்சுலேசன் என்பது டேட்டா மெம்பர்களை(வேரியபிள்,மெத்தட்கள்) ஹைட் செய்தல் அல்லது  டேட்டாவையும் மெத்தட்களையும் wrap  செய்து ஒற்றை யுனிட் ஆக எழுதுதல் ஆகும்.

டேட்டா ஹைடிங்க் vs என்கேப்சுலேசன்.

என்கேப்சுலேசன் இம்ப்ளிமென்ட்  செய்யுப் பொழுது ஒரு கிளாசிற்க்குள் இருக்கின்ற வேரியபிள்களை அந்த கிளாசில் மட்டுமே ஆக்சஸ் செய்ய முடியும்.என்வே இது டேட்டா ஹைடிங்க் எனப்படுகின்றது. ஆனால் உண்மையில் இரண்டும் வெவ்வேறு ஆகும்.

டேட்டா ஹைடிங்க் என்பது வேரியபிள்களை இல்லீகல் ஆக்சஸ் செய்யாமல் தடுக்கின்றது.

என்கேப்சுலேசன் ஆட்டோமேட்டிக் ஆக வேரியபிள்களை privateஆக எடுத்துக் கொளவதன் மூலம் நடத்தப்படுகின்றது.

\சான்று நிரல்.

package Encapsulation;  

//Use of POJO (Plain Old Java Object) class  

public class Employee {  

    //Member Variables  

    String name;  

    int age;  

    String address;  

    void code() {}  

    void role() {}  

    void employer() {}  

}  

 

இங்கே ஒரு எம்ப்ளாயின் காமன் பெஹேவியர் மற்றும் கேரக்டரிடிஸ்க் ஒற்றை யுனிட் ஆக என்கேப்சுலேட் செய்யப்பட்டுள்ளது.

ஒரு எம்ப்ளாயி ஆப்ஜெக்ட் இவற்றை வெளியுலக்கிற்கு காட்டுகின்றது.

 Employee emp = new Employee();  

  emp.name = "Aman";  

  emp.role(); 

இதே போல் இன்டெர்ஃபேஸ் உபயோகப்படுத்தியும் என்கேப்சுலேட் செய்யலாம்.

package Encapsulation;  

interface Employee {  

    void code();  

    void role();  

    void employer();  

}

என்கேப்சுலேசனை அடைவது எப்படி?

ஜாவாவில் என்கேப்சுலேசன் ஆனது இன்டெர்ஃபேஸ், கிளாஸ், ஆக்சஸ்மாடிஃபையர்ஸ், கெட்டெர்ஸ் மற்றும் செட்டர்ஸ் மூலம் அடையப்படுகின்றது.

இன்டெர்ஃபேசும் கிளாசும் ஒரு ஆப்ஜெக்டின் தேவையான முக்கிய தகவல்களை என்கேப்சுலேட் செய்கின்றது.

ஆக்சஸ் மாடிஃபையர்ஸ் ஆன public, private & protected ஆகியவை டேட்டா மெம்பர்களை   வெவ்வேறு லெவல்களில் ஆக்சஸ்செய்யப்படுவதை தடுக்கின்றது.

கெட்டெர்ஸ் மற்றும் செட்டெர்ஸ் மெத்தட் டேட்டா மெம்பர்களை தவறுதலுக்கான பயன்பாட்டிற்க்கு பயன்படுத்துவதை தடுக்கின்றது.

ஜாவாவில் என்கேப்சுலேசன் ஆனது வேரியபிள்களை பிரைவேட் செய்வதன் மூலம் தடுக்கப்படுகின்றது.அவற்றை கிளாசிற்க்கு வெளியே ஆக்சஸ் செய்ய இயலாது. கெட்டர்ஸ் மற்றும் செட்டெர்ஸ் மெத்தட் மூலமே அனுக முடியும்.

இப்பொழு எம்ப்ளாயி கிளாசை பின் வருவது போல மாற்றுவோம்.

package Encapsulation;  

//Use of POJO (Plain Old Java Object) class  

public class Employee {  

    private String name;  

    private int age;  

    private String address;  

இப்பொழுது name, age, address ஆகியவற்றை Employee கிளாஸிற்கு வெளியே ஆக்சஸ் செய்ய முடியாது.

அப்படி ஆக்சஸ் செய்ய முடிந்தால் பிழை சுட்டப்படும்

சான்று

 

Employee emp = new Employee();  

emp.name = "Aman" ; //Compile Time Error 

ஆனால் டேட்டாவை பாதுகாப்புடன் அனுக மற்றும் எடிட் செய்ய கெட்டெர்ஸ் மற்றும் செட்டெர்ஸ் மெத்தட்களை  பயன்படுத்தலாம்.

public void setAge(int age) {  

    if (age < 18 || age > 58) {  

        throw new IllegalArgumentException("Age must belong to 18 to 58 only");  

    }  

 

    this.age = age;  

}  

 

 மேலே  உள்ள சான்றி ஏஜ் டேட்டாவை ஒரு குறிப்பிட்ட ரேஞ்சிற்க்குள் மட்டுமே அசைன் செய்ய முடியும்.

public void setName(String name) {  

    if (name.equals(null)) {  

        throw new IllegalArgumentException("name cannot be null");  

    }  

    this.name = name;  

}  

மேலே உள்ள நிரலில் நேம் ஆனது நல் ஆக இருக்க முடியாது.அவ்வாறு இருந்தால் பிழை சுட்டப்படும்.

இது தேவையற்ற அனுகுதலில் இருந்து டேட்டாவை பாதுகாக்கின்றது.

Employee emp = new Employee();  

emp.setName("");//IllegalArgumentException will be thrown  

emp.setName("Aman");//Correct form  

இது வரை என்கேப்சுலேசன் என்றால் என்ன என்று பார்த்தோம். இப்பொழுது என்கேப்சுலேசனை எவ்வாறு அடைவது என்று பார்ப்போம்.

அதற்கு முன்னால் கெட்டர், செட்டெர் பற்றி பார்ப்போம்.

இதற்கு ஒரு கிளாசில் உள்ள வேரியபிளை பிரைவேட் என அறிவிக்க வேண்டும்.அவற்றை அந்த கிளாசில் மட்டுமே ஆக்சஸ் செய்ய முடியும்.

package Encapsulation;  

class Employee {  

    private String name;  

    private int age;  

    private String address;  

    public String getName() {  

        return name;  

    }  

    public void setName(String name) {  

        if (name.equals(null)) {  

            throw new IllegalArgumentException("name cannot be null");  

        }  

        this.name = name;  

    }  

    public int getAge() {  

        return age;  

    }  

    public void setAge(int age) {  

        if (age < 18 || age > 58) {  

            throw new IllegalArgumentException("Age must belong to 18 to 58 only");  

        }  

        this.age = age;  

    }  

    public String getAddress() {  

        return address;  

    }  

    public void setAddress(String address) {  

        if (address.equals(null)) {  

            throw new IllegalArgumentException("Address cannot be null");  

        }  

        this.address = address;  

    }  

    // if not done will result in returning hashcode of the object  

    @Override  

    public String toString() {  

        return "Employee [name=" + name + ", age=" + age + ", address=" + address + "]";  

    }  

}  

public class employeeSet {  

    public static void main(String[] args) {  

        Employee emp = new Employee();  

        emp.setName("Aman");  

        emp.setAge(22);  

        emp.setAddress("Meerut");  

        //to print object details  

        System.out.println(emp);  

    }  

}  

OUTPUT

 

Employee [name=Aman, age=22, address=Meerut] 

மேலே உள்ள நிரலில் வேரியபிள்கள் பிரைவேட் ஆகவும் மெத்தட்கள் பப்ளிக் ஆகவும் அறிவிக்கப்பட்டுள்ளதை கவனிக்கவும்.

என்கேப்சுலேசன் ஏன் தேவை.

இதன் மூலம் ரியுசபிளிட்டி, கோட் ஃப்ளெக்ஸ்பிளிடி ஆகியவற்றிற்காக பயன்படுகின்றது.

ஆப்ஜெக்ட் டேட்டாவயும் இம்ப்லிமென்டேசையும் என்கேப்சுலேட்செய்கின்றது.

ஒரு நிரலின் செயற்பாடு ஒரு இடத்தில் டிஃபைன் செய்யப்பட்டுள்ளது.

ஆப்ஜெட்டிற்குள் உள்ள டேட்டாவை எதிர்பாராத விதமாய் மாறுதல் செய்யாமல் இருக்கின்றது.

நன்றி.

முத்து கார்த்திகேயன்,மதுரை.

 

 

 

 

 

 

 

ads Udanz

Thursday, February 4, 2021

ஜாவாவில் கன்ஸ்ட்ரக்டர்.

 


 

கன்ஸ்ட்ரகடர்கள் ஒரு ஆப்ஜெக்டின் ஸ்டேட்டை தொடக்குவிக்கப்பயன்படுகின்றது. மெத்த்ட்களை இவையும் ஒன்று அல்லது ஒன்றுக்கு மேற்பட்ட கட்டளை வரிகளைக் கொண்டிருக்கும். இந்த வரிகள் அந்த கிளாசிற்கு ஆப்ஜெக்ட் உருவாக்கும் போது இயக்கப்படுகின்றன.

கன்ஸ்ட்ரக்டரின் தேவை.

இப்பொழுது ஒரு பெட்டியை எடுத்துக்ன் கொள்வோம். அதற்கு நீளம்,அகலம்,உயரம் என வெவ்வேறு பிராப்பர்டிகள் இருக்கும். இப்பொது இந்த பெட்டியானது ஆப்ஜெக்டாக  உருவாக்கும் பொழுது மெமரியில் இதன் டைமென்சன்கள் இல்லாமல் இருக்க முடியாது. அவ்வாறு ஒரு ஆப்ஜெக்டை உருவாக்கும் பொழுது அதன் தொடக்க மதிப்புகளை இருத்த கன்ஸ்ட்ரக்டர்கள் தேவைப் படுகின்றன.

 

அவ்வாறு மதிப்பிருத்தப்படுவது நிரலாளர் களால் கன்ஸ்ட்ரக்டர் எழுதி செய்யப்படலாம் அல்ல்து ஜாவாவே டிஃபால்ட் கன்ஸ்ட்ரக்டர் மூலம் மதிப்பிருத்தும்.

எப்பொழுது கன்ஸ்ட்ரக்டர்கள் அழைக்கப்படுகின்றன.

ஒவ்வொரு தடவை ஒரு ஆப்ஜெக்ட் உருவாக்கப்படும் பொழுது கன்ஸ்ட்ரக்டர்கள் அழைக்கப்படுகின்றன.ஒரு கிளாசானது குறைந்த பட்சம் ஒரு கன்ஸ்ட்ரக்டரை கொண்டிருக்கும். அது டிஃபால்ட் கன்ஸ்ட்ரக்டர் ஆகக்கூட இருக்கலாம்.இது அழைக்கப்படும் பொழுது அதன் டேட்டா மெம்பர்கள் தொடக்க மதிப்பிருத்தப்பட பயன்படுகின்றன..

சான்று

class Geek

{  

  .......

 

  // A Constructor

  new Geek() {}

 

  .......

}

 

// We can create an object of the above class

// using the below statement. This statement

// calls above constructor.

Geek obj = new Geek();

 

கன்ஸ்ட்ரக்டர் எழுதும் விதி முறைகள்.

1.      கன்ஸ்ட்ரக்டர் ஆனது அந்த கிளாசின் பெய்ரையே கொண்டிருக்கும்.

2.      இது abstract, static மற்றும் final ஆக இருக்க முடியாது.

3.      ஆக்சஸ் மாடிஃபையர் இருத்தப்படலாம்.

கன்ஸ்ட்ரக்டர் வகைகள்.

இரண்டு வகையான கன்ஸ்ட்ரக்டர்கள் இருக்கின்றன.

 

ஆர்க்கியூமெண்ட் இல்லாத கன்ஸ்ட்ரக்டர்கள் அல்லது ஆர்க்கியூமென்டுடன் கூடிய கன்ஸ்ட்ரக்டர்கள்.

 

ஆர்க்கியூமெண்ட் இல்லாத கன்ஸ்ட்ரக்டர்கள் டிஃபால்ட் கன்ஸ்ட்ரக்டர் என அழைக்கப்படுகின்றன. நிரலாளர் ஒரு கன்ஸ்ட்ரக்டர் எழுதாத பொழுது ஜாவானது அதுவே டிஃபால்ட் கன்ஸ்ட்ரக்டரை உருவாக்குகின்றது.

டிஃபால்ட் கன்ஸ்ட்ரக்டர் டிஃபால்ட் மதிப்பிருத்த பயன்படுகின்றது உதாரணமாக 0, null போன்றவை.

 

// Java Program to illustrate calling a

// no-argument constructor

import java.io.*;

  

class Geek

{

    int num;

    String name;

  // this would be invoked while an object

    // of that class is created.

    Geek()

    {

        System.out.println("Constructor called");

    }

}

  

class GFG

{

    public static void main (String[] args)

    {

        // this would invoke default constructor.

        Geek geek1 = new Geek();

  

        // Default constructor provides the default

        // values to the object like 0, null

        System.out.println(geek1.name);

        System.out.println(geek1.num);

    }

}

வெளியீடு

Constructor called

null

0

1.    ·  Parameterized Constructor: பாராமீட்டர்களுடன் கூடிய கன்ஸ்ட்ரக்டர்கள் இவை. எந்த பாரா மீட்டர்கள் பாஸ் செய்யபடுகின்றனவோ அவை அந்த ஆப்ஜெக்டின் டேட்டா மெம்பர்களுக்கு மதிப்பிருத்தப்படுகின்றன.

// Java Program to illustrate calling of

// parameterized constructor.

import java.io.*;

class Geek

{

    // data members of the class.

    String name;

    int id;

  

    // constructor would initialize data members

    // with the values of passed arguments while

    // object of that class created.

    Geek(String name, int id)

    {

        this.name = name;

        this.id = id;

    }

}

class GFG

{

    public static void main (String[] args)

    {

        // this would invoke the parameterized constructor.

        Geek geek1 = new Geek("adam", 1);

        System.out.println("GeekName :" + geek1.name +

                           " and GeekId :" + geek1.id);

    }

}

வெளியீடு:

GeekName :adam and GeekId :1

 

கன்ஸ்ட்ரகடர்கள் எந்த மதிப்பையும் ரிடர்ன் செய்யாது.ஆனால் இதன் ரிடர்ன் டைப்பான void என்றும் குறிப்பிடக் கூடாது.

கன்ஸ்ட்ரக்டர் ஓவர் லோடிங்க்.

மெத்தட்க்ளை போன்றே கன்ஸ்ட்ரக்டர்களையும் ஓவர்  லோட் செய்யலாம். இது ஒரு குறிப்பிட்ட் கன்ஸ்ட்ரக்டரை அதன் பாரா மீட்டரகளின் எண்ணிக்கையை வைத்தோ அல்லது அதன் டேட்டா டைப்பை வைத்தோ அழைக்கப்படுகின்றன.

சான்று நிரல்.

 

// Java Program to illustrate constructor overloading

// using same task (addition operation ) for different

// types of arguments.

import java.io.*;

  

class Geek

{

    // constructor with one argument

    Geek(String name)

    {

        System.out.println("Constructor with one " +

                      "argument - String : " + name);

    }

  

    // constructor with two arguments

    Geek(String name, int age)

    {

System.out.println("Constructor with two arguments : " +

                " String and Integer : " + name + " "+ age);

  

    }

  

    // Constructor with one argument but with different

    // type than previous..

    Geek(long id)

    {

        System.out.println("Constructor with one argument : " +

                                            "Long : " + id);

    }

}

  

class GFG

{

    public static void main(String[] args)

    {

        // Creating the objects of the class named 'Geek'

        // by passing different arguments

 // Invoke the constructor with one argument of

        // type 'String'.

        Geek geek2 = new Geek("Shikhar");

  

        // Invoke the constructor with two arguments

        Geek geek3 = new Geek("Dharmesh", 26);

  

        // Invoke the constructor with one argument of

        // type 'Long'.

        Geek geek4 = new Geek(325614567);

    }

}

வெளியீடு

Constructor with one argument - String : Shikhar

Constructor with two arguments - String and Integer : Dharmesh 26

Constructor with one argument - Long : 325614567

கன்ஸ்ட்ரக்டர்கள் மெத்தட்களில் இருந்து எவ்வாறு மாறுபடுகின்றன..

1.      இது கிளாசின் பெயரிலேயே இருக்க்கும்

2.      கன்ஸ்ட்ரக்டர் எதையுன் ரிடர்ன் செய்யாது. Void எனவும் குறிப்பிடக்கூடாது.

3.      ஒரு கன்ஸ்ட்ரக்டர் ஆனது அதன் ஆப்ஜெக்ட் உருவாக்கும் பொழுதே அழைக்கபடுகின்றது. மெத்தட்களை எத்தனை தடவை வேண்டுமானாலும் அழைக்கலாம்.

 

முத்து கார்த்திகேயன்,மதுரை.

ads Udanz