Showing posts with label தொழில்நுட்பம்(?). Show all posts
Showing posts with label தொழில்நுட்பம்(?). Show all posts

Friday, April 2, 2010

பதிவர் சங்கமும், OOPS ம்

கொஞ்ச நாளைக்கு முன்னே குடுகுடுப்பையார் ஊப்ஸ் பிரயாணி என்று ஒரு இடுகை இட்டார், அதையே நடப்பு நிலைக்கேற்ப மாற்றி அதிலே சங்கத்தையும்(இன்னுமா சங்கம் முடியலை) நுழைத்து மென் பொருள் துறை வல்லுநர்(?) என்ற முறையிலே சங்கத்தையும், ஊப்ஸ்சையும் இணைத்து இந்த கொலை வெறி இடுகை.இதுவே சங்கத்தை பற்றிய கடைசி இடுகை, இதற்கு மேல சங்கத்தைப் பத்தி பேசினா என்னை சங்கத்தை விட்டு நீக்கலாம்.இந்த இடுகையிலே ஆங்கிலம் நிலை தடுமாறி கரை புரண்டு ஓடும் என்பதை சொல்ல வேண்டிய கடமை, அதற்காக தமிழ் அன்னையிடம் மன்னிப்பு கேட்டு விடுகிறேன்,கணனி வல்லுனர்களும் பிழைகளை பொறுத்தருள்க.


Object orientated  programming என்பதையே சுருக்கி நாம் OOP என்று 
சொல்லுகிறோம் என்று நான் சொல்லத்தேவை இல்லை.object என்பது வெவ்வேறான பணிகளை விதிமுறைகளின் படி செய்வது, இந்த பணிகள் functions and procedures வழியாக செய்யப்படுகிறது.அதை போலவே தமிழ் பதிவர்களும் வெவ்வேறான துறைகளைச் சார்ந்த(கதை,கவிதை, கட்டுரை, இலக்கியம், மொக்கை) வற்றை எழுத்துகிறார்கள்.


அடுத்து class,  ஒரு object ன் பண்புகளை குறிப்பதே class என்று சொல்லலாம், வலைப் பதிவர் என்பது object என்று சொன்னால், அவருடைய பண்புகள் எல்லாம் class க்குள் இருக்கும், பதிவரின் பண்புகள் என்பது, எழுதும் மொழி, துறை, பெயர், இருப்பிடம்(ஆட்டோ அனுப்ப வசதிக்காக).


பதிவுலகம் என்பது தனி மனிதன் சார்ந்தது அல்ல, ஆகவே பதிவரின் பண்புகள் பதிவருக்கு, பதிவர் வேறுபடும், ஒவ்வொரு பதிவருக்கும் தனியாக class வேண்டும்,  ஆனால் அவர்களிடம் உள்ள பொதுவான பண்புகளை "abstract class" என்று குறிப்பிடலாம், அனைத்து பதிவர்களும் இந்த "abstract class" ன் பண்புகள் இருக்கும், ஆகையால் பதிவர் என்ற தனிமனிதன் must inherit "abstract class". உதாரணமாக "தமிழ்ப் பதிவர்" என்பது "abstract class" என்றால் குடுகுடுப்பை என்ற பதிவர் inherit "தமிழ்ப் பதிவர்" என்ற "abstract class". இந்த "abstract class" ன் பண்புகள் தவிர குடுகுடுப்பையின் தனி தனித்தன்மைகளாகிய "எதிர் கவுஜை", "என்னை மாதிரி மொக்கை" போன்ற அவர் சார்ந்த குணநலன்கள் "குடுகுடுப்பை" class ல் இருக்கும்.


பதிவர்கள்  எல்லோரும் ஒரே இடத்திலே இருந்து பொட்டி தட்டிகிட்டு கும்மி அடிக்கிறத்தில்லை, உலகெங்கும் பறந்து விரிந்து இருக்கிறார்கள். இவங்களை எல்லாம் இணைப்பது எப்படி கிளை சங்கம் முலமாக செய்யலாம், எப்படி கிளை ஆரமிக்கிறது. ஒரு அமைப்பின் செயல்பாடுகள் படிவம் அதன் கிளைகளிலும் அப்படியே இருக்கும், இதை எப்படி OOP ல் இணைப்பது என்றால் "Interface" வழியாக, இதை "abstract class"  மூலமாகவே செய்யலாம் என்றாலும், "interface"  வைத்து இணைக்க வேண்டும் என்ற நல்ல எண்ணத்திலே(?)  
(கொ)சொல்கிறேன். ஒரு பதிவர் "interface" சை "implement" செய்யும் போது கிளைகளிலே ௬ட்டம் சொம்பை எடுத்து கிட்டு போறது, கருத்துக்கு எதிர் சொம்பு அடிக்கிறது உட்பட பல விசயங்களிலே ஒப்பந்தம் செய்கிறார். அப்படி ஒப்பந்தம் செய்யாத program கீழே இருப்பது மாதிரி இருக்கும். 




public void Thundu()
    {
        int Thamna = 0; //தாம்னா 
        bool usarakalai; //உஷார்ஆகலை 
        bool pickup;
        while (usarakalai)
        {
            // துண்டு போடும் வழி முறைகளை எல்லாம் விளக்கி எழுதி, துண்டு கிடைத்தவுடனே 
            usarakalai = false; 
            pickup = true;
            Thamna = 1;
        }
    }



ஒரு பதிவர் எத்தனை "interface" வேண்டுமானாலும் "implement" பண்ணலாம், உதரணாம நெல்லை மாவட்டத்துக்கு ஒரு கிளை இருந்தால், மாவட்டத்தின் கீழ் வரும் அனைத்து கிளைகளின் கீழ்  "interface" சையும் implement பண்ணலாம். மாவட்டத்தை விட்டு வேறு மாவட்டம் போகும் போது,பதிவர் எல்லா interface சையும் கழட்டி விட்டுட்டு, புது இடத்தோட "interface" சை "implement" பண்ணிக்குவார். இதைதான் decoupling என்று சொல்வார்கள்(?).பதிவர் class, interface and its implementation  எல்லாம் தகவல் அடங்கியவற்றை encapsulation என்று சொல்லலாம். 
 
பதிவர், கிளைகள் இதையெல்லாம் வைத்து தனியாக செயல் படலாம், ஆனால் ஒரு ஒருகிணைந்த கட்டமைப்பு உருவாக்க முடியாது, கணனியிலே அதைப் போல class,abstract class, interface பயன் படுத்தினாலும், அதை செயல்பட வைப்பது "Application", சங்கம் தான் அந்த "Application". முட்டி மோதி கடைசியா வச்ச தலைப்புக்கு விடை கிடைத்து விட்டது.

இன்னும் இப்படி நிறைய பேசிகிட்டே இருக்கலாம், படிக்கிற கொஞ்ச பேரோட நல்ல எண்ணம் கருதி இத்துடன் முடித்து கொள்கிறேன்.




கீழே உள்ளது  C# language உதாரணம்
--------------------------------------------------------------------------------------------------------------
  public abstract class Blogger
    {
       public abstract string GetName();
       public abstract string GetAddress();
       public abstract string Getfield();
        //....
        //....
        //....
    }

   public interface IBranch
    {
        string name
        {
            get;
            set;
        }
        //...
        //......


    }

    public class Kudukudppai : Blogger, IBranch 
    {


        public override string GetName()
        {
            throw new Exception("The method or operation is not implemented.");
        }


        public override string GetAddress()
        {
            throw new Exception("The method or operation is not implemented.");
        }


        public override string Getfield()
        {
            throw new Exception("The method or operation is not implemented.");
        }




        #region IBranch Members


        public string name
        {
            get
            {
                throw new Exception("The method or operation is not implemented.");
            }
            set
            {
                throw new Exception("The method or operation is not implemented.");
            }
        }


        #endregion
    }
------------------------------------------------------------------------------------------------------------