Wednesday, May 17, 2017

சி-ஷார்ப்பில் ப்ராபர்டிகள்



நாம் பொதுவாக நிரல் எழுதும் பொழுது கிளாஸின் fields என்பதை private ஆகவும் மெதட்களை public ஆகவும் அறிவிப்போம்.கிளாஸிற்கு ஒரு டேட்டா மெம்பரை(fields) அணுக வேண்டுமானால் நேரடியாக முடியாது. மெத்தட்கள்  மூலம் தான் அணுக முடியும். இதுவே data hiding மற்றும் Encapsulation எனப்படுகின்றது.இதற்கு மாற்றாக ப்ராப்பர்டிகளை public ஆக அறிவித்து அதை fields என்பதை உபயோகிப்பது போல் உபயோகிக்கலாம்.
இதில் get மற்றும் set accessors மூலம் டேட்டா மெம்பர்களின் மதிப்புகளை பெறவோ அல்லது அதில் இருத்தலோ முடியும்.இப்பொழுது ப்ரொபெர்டிகளை fields –ஆனதை உபயோகிப்பது போல் உபயோகிக்கலாம். ஆனாலும் டேட்டா ஆனது encapsulate செய்யப் பட்டு தான் இருக்கும்.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace propertyImplementation
{
    class student
    {
        private int _id;
        private string _name;
        public int Id
        {
            get
            {
                return this._id;
            }
            set
            {
                this._id = value;
            }
        }
        public string Name
        {
            get
            {
                return this._name;
            }
            set
            {
                this._name = value;
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            student s1 = new student();
            s1.Id = 101;
            s1.Name = "karthikeyan";
            Console.WriteLine("Id= {0} && name= {1}", s1.Id, s1.Name);
            Console.ReadLine();
        }
    }
}

வெளியீடு:

 

மேலே உள்ள நிரலில் Id மற்றூம் Name எங்கின்ற இரண்டு ப்ரொப்பர்டிகளில் get மற்றும் set accessors மூலம் முறையே _id,_name ஆகியவற்றை ரீட் செய்யவும் மதிப்பிருத்தவும் பயன் படுகின்றன.

Read only properties


ஒரு கிளாஸில் ஒரு field –யை ரீட் ஒன்லியாக மாற்றுவதற்கு அதன் ப்ராப்பர்டியில் கெட் ஆக்சசர் மட்டும் அறிவிப்பதன் மூலம் செய்யலாம்.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace propertyImplementation
{
    class student
    {
        private int _id;
        private string _name;
        private int _passmark = 40;
        public int Passmark
        {
            get
            {
                return this._passmark;
            }
        }
           
            public int Id
        {
            get
            {
                return this._id;
            }
            set
            {
                this._id = value;
            }
        }
        public string Name
        {
            get
            {
                return this._name;
            }
            set
            {
                this._name = value;
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            student s1 = new student();
            s1.Id = 101;
            s1.Name = "karthikeyan";
            //s1.Passmark = 50;   //illegal can not set value for passmark.

            Console.WriteLine("Id= {0} && name= {1} && passmark={2}", s1.Id, s1.Name,s1.Passmark );
            Console.ReadLine();
        }
    }
}

வெளியீடு:



Auto implemented property.

Public int Id{get;set;}
Public int age {get;set;}
Fields-ன் பெயரை அறிவிக்காமல் வெறும் ப்ராபர்டிகளின் பெயரை நேரடியாக மேலும் கெட் மற்றும் செட் ஆக்சசர்களின் அறிவிப்பை கொடுத்து(அதன் டெஃபினிசன் வராது) செய்வதை auto mapped property எனப்படுகின்றது.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace propertyImplementation
{
    class student
    {
        public int Id { get; set; }
        public int Age { get; set; }

    }
    class Program
    {
        static void Main(string[] args)
        {
            student s1 = new student();
            s1.Id = 101;
            s1.Age = 18;
           

            Console.WriteLine("Id= {0} && age={1}",s1.Id,s1.Age);

            Console.ReadLine();
        }
    }
}

வெளியீடு:

 

மதிப்பை பரிசோதணை செய்தல்:

மெத்தட்களில் செய்வது போல் ப்ரொபெர்டிகளில் நாம் கொடுக்கும் இன்புட் பரிசோதணை (validate)  செய்ய முடியும்.குறிப்பிட்ட மதிப்பை மட்டும் அனுமதிப்பதற்கு இதனை உபயோக படுத்தல்லாம்.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace propertyImplementation
{
    class student
    {
        private int id;
        private int age;

        public int Id
        {
            get
            {
                return this.id;
            }
            set
            {
                this.id = value;
            }
        }
        public int Age
        {
            get
            {
                return this.age;
            }
            set
            {

                if (value < 16)
                {
                    Console.WriteLine("invalid student age");
                    this.age = 0;
                }
                else
                {
                    this.age = value;
                }


            }



        }
        class Program
        {
            static void Main(string[] args)
            {
                student s1 = new student();
                s1.Id = 101;
                s1.Age = 15;


                Console.WriteLine("Id= {0} && age={1}", s1.Id, s1.Age);

                Console.ReadLine();
            }
        }

    }
}

வெளியீடு:

 

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



ads Udanz

Tuesday, May 16, 2017

சி-மொழியில் ஸ்ட்ரக்சர்(structure)





சி மொழியில் அர்ரேயின் உபயோகம் பற்றி அறிவோம். அர்ரே என்பது பொறுத்த வரை அவை அணைத்தும் ஒரே டேட்டா டைப்பாக இருக்க வேண்டும்.
இப்போது ஒரு மாணவணைப் பற்றிய டேட்டாக்களை சேமிக்க விரும்புகின்றோம். Id ஆனது int டைப்பாக இருக்கும். Name ஆனது char array ஆக இருக்கும்.sex ஆனது char டைப்பாக இருக்கும்.இதை அர்ரே ஆக சேமிக்க இயலாது. இங்கு தான் ஸ்ட்ரக்சர் (structure)உபயொகப்படுத்தப் படுகின்றது.
ஸ்ட்ரக்சர் என்பது வெவ்வேறு டேட்டா டைப் மெம்பர்களின் தொகுப்பை ஒற்றை டேட்டா டைப்பாக காண்பித்தல் ஆகும்.
உதாரணம்.
struct student
{
int id;
char name[50];
char sex;
};
இதில் struct என்பது keyword ஆகும். student என்பது நாம் உருவாக்கியுள்ள ஸ்ட்ரக்டின் பெயர் ஆகும். இதில் id,name,sex என மூன்று மெம்பர்கள் உள்ளன.

அர்ரே மற்றும் ஸ்ட்ரக்டின் வித்தியாசங்கள்:

1.அர்ரே என்பது ஒரே டேட்டா டைப் எலெமெண்டுகளின் தொகுப்பாகும்.
ஸ்ட்ரக்ட் என்பது வெவ்வேறு டேட்டா டைப் மெம்பர்களின் தொகுப்பாகும்
2. அர்ரேயின் ஒவ்வொரு உறுப்பும் element எனப் படுகின்றது. ஸ்ட்ரக்டின் ஒவ்வொரு உறுப்பும் member எனப்படுகின்றது.

ஸ்ட்ரக்ட் வேரியபிள் அறிவிப்பு :

முதல் உதாரணம்:

struct student
{
int id;
char name[50];
char sex;
}s1,s2;

இரண்டாவது உதாரணம்.

struct student
{
int id;
char name[50];
char sex;
};
struct student s1,s2;
மேற்கண்ட இரண்டு வழிகளில் ஏதாவது ஒரு  வழியைப் பின் பற்றி ஸ்டரக்ட் வேரியபிள் உருவாக்கப்பட வேண்டும்.
ஸ்ட்ரக்ட் மெம்பர்களில் மதிப்பிருத்தல்
இதை மூன்று வழிகளில் செய்யலாம்.

முதல் வழி:

struct student s1={101,”karthikeyan”,’m’};

இரண்டாவது வழி:

struct student s1;
s1.id=101;
strcpy(s1.name,”karthikeyan”);
s1. Sex=’m’;

மூன்றாவது வழி:

printf(“enter student details : id,name,sex”);
scanf(“%d”,&s1.id);
scanf(“%s”,s1.name);
scanf(“%c”,&s1.sex);

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

#include <stdio.h>
int main()
{
    struct student
    {
        int id;
        char name[50];
        char sex;
    };
    struct student s1;
    printf("enter s1 id: ");
    scanf("%d",&s1.id);
    printf("Enter s1 name: ");
    scanf("%s",s1.name);
    fflush(stdin);
    printf("Enter s1 sex: ");
    scanf("%c",&s1.sex);
    printf("student s1 details:\n");
    printf("Id=%d\n",s1.id);
    printf("Name=%s\n",s1.name);
    printf("sex=%c\n",s1.sex);

        return 0;
}

}

வெளியீடு:

 

ஸ்ட்ரக்டின் அர்ரே.

ஒரிரு வேரிபிள்கள் உருவாக்காமல் அதிக எண்ணிக்கையில் உருவாக்கும் பொழுது ஸ்ட்ரக்ட் அர்ரே வேரியபிள்களாக உருவாக்கிக் கொள்ளலாம்.

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

#include <stdio.h>
int main()
{
    struct student
    {
        int id;
        char name[50];
        char sex;
    };
    struct student s[3];
    int i;
    for(i=0;i<3;i++)
    {


        printf("enter s id: ");
    scanf("%d",&s[i].id);
    printf("Enter s name: ");
    scanf("%s",s[i].name);
    fflush(stdin);
    printf("Enter s sex: ");
    scanf("%c",&s[i].sex);
    }
    for(i=0;i<3;i++){
    printf("student s details:\n");
    printf("Id=%d\n",s[i].id);
    printf("Name=%s\n",s[i].name);
    printf("sex=%c\n",s[i].sex);
    }
        return 0;
}

வெளியீடு:

 

நெஸ்டட்(Nested)ஸ்ட்ரகட்

ஒரு ஸ்ட்ரக்டுக்குள் மற்றொரு ஸ்ட்ரக்டை அறிவிப்பதை nested struct எனப்படுகின்றது.இதை பின் வரும் நிரல் மூலமாக அறியலாம்.
சான்று நிரல்:
#include <stdio.h>
#include<string.h>

int main()
{ struct hostel
         {
       int room_id;
        float fees;
         } ;

      struct student
    {
        int id;
        char name[50];
        char sex;

        struct hostel h1;

    };

    struct student s1;

    s1.id=101;
    strcpy(s1.name,"karthikeyan");
    s1.sex='m';
    s1.h1.room_id=567;
    s1.h1.fees=500;
        printf("student details: \n");
    printf("student id=%d\n",s1.id);
    printf("student name=%s\n",s1.name);
    printf("student sex=%c\n",s1.sex);
    printf("room id=%d\n",s1.h1.room_id);
    printf("room rent=%f\n",s1.h1.fees);
    return 0;
}

வெளியீடு:

 

ஸ்ட்ரக்டை ஃபங்க்சனுக்கு பராமீட்டராக அனுப்புதல்:

ஓரு ஸ்ட்ரக்டை எவ்வாறு ஒரு ஃபங்க்சனுக்கு பராமீட்டராக அனுப்பலாம் என்பதை பின் வரும் நிரல்  மூலமாக அறியலாம்.

சான்று நிரல்

#include <stdio.h>
#include<string.h>
struct student
    {
        int id;
        char name[50];
        char sex;
   };
    void printstructdetails(struct student);
int main()
{
   struct student s1;
     s1.id=101;
    strcpy(s1.name,"karthikeyan");
    s1.sex='m';
    printstructdetails(s1);
    return 0;

}
void printstructdetails(struct student s )
 {
       printf("student details: \n");
    printf("student id=%d\n",s.id);
    printf("student name=%s\n",s.name);
    printf("student sex=%c\n",s.sex);

}
வெளியீடு:-


----------------------முத்து கார்த்திகேயன்,மதுரை
ads Udanz