Friday, June 2, 2017

Abstract class மற்றும் interface என்ன வேறுபாடு?




இந்த கட்டுரையில் சி ஷார்ப்பில்  அப்ஸ்ட்ராக்ட் கிளாஸ் மற்றும் இன்டர்ஃபேஸ்க்கு உள்ள வேறுபாடுகளைக் காண்போம்.

அப்ஸ்ராக்ட் கிளாஸ்.

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

இன்டர்ஃபேஸ்:

இது கிளாஸ் அல்ல. இதில் மெத்தட், ப்ராப்பர்ட்டீஸ், ஈவண்ட்ஸ் போன்ற வற்றின் அறிவிப்பு மட்டும் இருக்கும் ஆனால் implementation இருக்காது.இதனை ஒரு கிளாஸ் இன்ஹெரிட் செய்தால் இதில் அறிவிக்கப்பட்டுள்ள எல்லாவற்றிற்கும்(மெத்த்ட், ஈவண்ட், ப்ராபர்டீஸ் போன்றவை) implementation அந்த கிளாஸில் இருக்க வேண்டும். அப்ஸ்ட்ராக்ட் கிளாஸ் என்றால் ஒரு கிளாஸ் ஆனது ஒரே ஒன்றவற்றை மட்டும் தான் இன்ஹெரிட் செய்ய முடியும். ஆனால் ஒரு கிளாஸ் ஆனது எத்தனை இண்டர்ஃபேஸை வேண்டுமானாலும் இன்ஹெரிட் செய்யலாம்.இன்டர்ஃபேஸில் எந்த உறுப்பிற்காவது செயல் படுத்துதல் இருந்தால் அதற்கு கம்பைல் டைம் பிழை சுட்டப்படும். இண்டர்ஃபேஸில் fields இருக்க முதியாது. ஒரு இண்டர்ஃபேஸ் ஆனது மற்றொரு இன்டர்ஃபேஸை இன்ஹெரிட் செய்யலாம். அந்த இண்டர்ஃபேஸை ஒரு கிளாஸ் ஆனது இன்ஹெரிட் செய்தால் அதில் அந்த இண்டர்ஃபேஸ் இன்ஹெரிட் வரிசையில் உள்ள எல்லாவற்றிற்கும் செயல்படுத்துதல் இருக்க வேண்டும்.

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

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

namespace interface_example
{
    interface Iinterface1
    {
        void print1();
    }
    interface Iinterface2
    {
        void print2();
    }
    class example : Iinterface1, Iinterface2
    {
        public void print1()
        {
            Console.WriteLine("print1 method");
        }
        public void print2()
        {
            Console.WriteLine("print2 method");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            example e1 = new example();
            Iinterface1 i1 = e1;
            Iinterface2 i2 = e1;
            i1.print1();
            i2.print2();
            e1.print1();
            e1.print2();

            Console.ReadLine();


        }
    }
}

Output:


அப்ஸ்ட்ராக்ட் கிளாஸ்.
அப்ஸ்ட்ராக்ட் கிளாஸ் முழுமையடையாத கிளாஸ் ஆகும். அப்ஸ்ட்ராக்ட் கிளாஸை பேஸ் கிளாஸ் ஆக மட்டும் தான் உபயோகிக்க முடியும். அப்ஸ்ராக்ட் கிளாஸ் sealed class ஆக இருக்க முடியாது. அப்ஸ்ட்ராக்ட் கிளாஸில் அப்ஸ்ட்ராக்ட் மெம்பர்கள் இருக்கலாம். ஆனால் கட்டாயம் கிடையாது. அப்ஸ்ட்ராக்ட் கிளாஸில் எல்லா அப்ஸ்ட்ராக்ட் மெம்பர்களுக்குமான செயல்படுத்துதல் அதை இன்ஹெரிட் செய்ய்ம் கிளாஸில் இருக்க வேண்டும்.

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

namespace Abstract_example
{
    abstract class customer
    {
        abstract public  void print();
    }
    class Example : customer
    {
        public override void print()
        {
            Console.WriteLine("print method");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Example e1 = new Example();
            e1.print();
            Console.ReadLine();

        }
    }
}

வெளியீடு:

வேறுபாடுகள்:

1.   அப்ஸ்ட்ராக்ட் கிளாஸ் மற்றும் இன்டெர்ஃபேஸ் இரண்டும் முழுமையடையாதாகும். இரண்டிற்கும் ஆப்ஜெக்ட் உருவாக்க முடியாது.
2.   அப்ஸ்ட்ராக்ட்கிளாஸில் ஃபியல்ட்ஸ் (fields) இருக்கலாம் . ஆனால் இன்டெர்ஃபேஸில் இருக்க முடியாது.
3.   அப்ஸ்ட்ராக்ட் கிளாஸில் சில மெம்பர்களுக்கு செயல்பாடு இருக்கலாம். ஆனால் இன்டெர்ஃபேஸில் முடியாது.
4.   ஒரு இன்டெர்ஃபேஸ் ஆனது மற்றொரு இன்டெர்ஃபேஸை இன்ஹெரிட் செய்யலாம். ஆனால் அப்ஸ்ட்ராக்ட் கிளாஸை இன்ஹெரிட் செய்ய இயலாது.
ஒரு அப்ஸ்ட்ராக்ட் கிளாஸ் ஆனது ஒரு இன்டெர்ஃபேஸ் மற்றும் அப்ஸ்ட்ராக்ட் கிளாஸ் இரண்டையும் இன்ஹெரிட் செய்யலாம்.
5.   ஒரு கிளாஸ் ஆனது மல்டிபிள் இன்டர்ஃபேஸை இன்ஹெரிட் செய்ய்லாம்.ஆனால் மல்டிபிள் அப்ஸ்ட்ராக்ட் கிளாஸை இன்ஹெரிட் செய்ய இயலாது.
6.   அப்ஸ்ட்ராக்ட் கிளாஸில் ஆக்சஸ் மாடிஃபையர் இருக்கலாம். இன்டர்ஃபேஸில் இயலாது.
                                            ----முத்து கார்த்திகேயன்,மதுரை
ads Udanz

No comments:

Post a Comment