வணக்கம்! OOP இன் கொள்கைகள் குறித்த தொடர் பாடங்களை இன்று முடிக்கிறோம். இந்த பாடத்தில், ஜாவா பாலிமார்பிசம் பற்றி பேசுவோம். பாலிமார்பிசம் என்பது பல வகைகளுடன் ஒரே வகையைப் போல வேலை செய்யும் திறன் ஆகும். மேலும், பொருட்களின் நடத்தை அவற்றின் வகையைப் பொறுத்து மாறுபடும். இந்த அறிக்கையை இன்னும் விரிவாகப் பார்ப்போம். முதல் பகுதியிலிருந்து தொடங்குவோம்: 'பல வகைகளுடன் ஒரே வகையைப் போல வேலை செய்யும் திறன்'. வெவ்வேறு வகைகள் எப்படி ஒரே மாதிரியாக இருக்க முடியும்? இது கொஞ்சம் விசித்திரமாகத் தெரிகிறது :/ உண்மையில், எல்லாம் மிகவும் எளிமையானது. உதாரணமாக, இந்த நிலைமை பரம்பரை சாதாரண பயன்பாட்டின் போது எழுகிறது. அது எப்படி வேலை செய்கிறது என்று பார்க்கலாம். ஒற்றை ரன்() முறையைக் கொண்ட எளிய பூனை பெற்றோர் வகுப்பு உள்ளது என்று வைத்துக்கொள்வோம் :
இந்த 'பொதுமைப்படுத்தல்' தேவையற்றதாக இருக்கும் போது, ஒவ்வொரு இனமும் வித்தியாசமாக நடந்து கொள்ள வேண்டும் என்றால், ஒவ்வொரு வகையும் அதன் சொந்த காரியத்தைச் செய்கிறது. பாலிமார்பிஸத்திற்கு நன்றி, நீங்கள் பரந்த அளவிலான வகுப்புகளுக்கு ஒற்றை இடைமுகத்தை (முறைகளின் தொகுப்பு) உருவாக்கலாம். இது நிரல்களை சிக்கலாக்குகிறது. 40 வகையான பூனைகளை ஆதரிக்கும் வகையில் நிரலை விரிவுபடுத்தினாலும், எங்களிடம் இன்னும் எளிமையான இடைமுகம் இருக்கும்: அனைத்து 40 பூனைகளுக்கும் ஒரே
ரன்() முறை.
public class Cat {
public void run() {
System.out.println("Run!");
}
}
சிங்கம் , புலி மற்றும் சிறுத்தை ஆகிய மூன்று வகைப் பூனைகளை இப்போது உருவாக்குவோம் .
public class Lion extends Cat {
@Override
public void run() {
System.out.println("Lion runs at 80 km/h");
}
}
public class Tiger extends Cat {
@Override
public void run() {
System.out.println("Tiger runs at 60 km/h");
}
}
public class Cheetah extends Cat {
@Override
public void run() {
System.out.println("Cheetah runs at up to 120 km/h");
}
}
எனவே எங்களுக்கு 3 வகுப்புகள் உள்ளன. அவங்களோட ஒரே கிளாஸ்ல இருந்த மாதிரி வேலை செய்யற சூழ்நிலை மாதிரி இருக்கு. எங்கள் பூனைகளில் ஒன்று உடல்நிலை சரியில்லாமல் உள்ளது மற்றும் டாக்டர் டோலிட்டில் உதவி தேவை என்று கற்பனை செய்து பாருங்கள். சிங்கங்கள், புலிகள் மற்றும் சிறுத்தைகளை குணப்படுத்தக்கூடிய டோலிட்டில் வகுப்பை உருவாக்க முயற்சிப்போம் .
public class Dolittle {
public void healLion(Lion lion) {
System.out.println("Lion is healthy!");
}
public void healTiger(Tiger tiger) {
System.out.println("Tiger is healthy!");
}
public void healCheetah(Cheetah cheetah) {
System.out.println("Cheetah is healthy!");
}
}
பிரச்சனை தீர்ந்தது போல் தெரிகிறது: வகுப்பு எழுதப்பட்டு செல்ல தயாராக உள்ளது. ஆனால் எங்கள் திட்டத்தை நீட்டிக்க விரும்பினால் என்ன செய்வோம்? எங்களிடம் தற்போது 3 வகைகள் மட்டுமே உள்ளன: சிங்கங்கள், புலிகள் மற்றும் சிறுத்தைகள். ஆனால் உலகில் 40 க்கும் மேற்பட்ட வகையான பூனைகள் உள்ளன. மானுல், ஜாகுவார், மைனே கூன்ஸ், வீட்டுப் பூனைகள் மற்றும் மற்ற அனைத்திற்கும் தனித்தனி வகுப்புகளைச் சேர்த்தால் என்ன நடக்கும் என்று கற்பனை செய்து பாருங்கள். நிரல் தானாகவே செயல்படும், ஆனால் ஒவ்வொரு வகை பூனைகளையும் குணப்படுத்த டோலிட்டில் வகுப்பில் தொடர்ந்து புதிய முறைகளைச் சேர்க்க வேண்டும். இதன் விளைவாக, இது முன்னோடியில்லாத அளவுக்கு வளரும். இங்குதான் பாலிமார்பிசம் - "பல வகைகளில் ஒரே மாதிரியாக வேலை செய்யும் திறன்" - வருகிறது. அதையே செய்ய எண்ணற்ற முறைகளை நாம் உருவாக்க வேண்டியதில்லை - பூனையை குணப்படுத்த. அனைவருக்கும் ஒரு முறை போதும்:
public class Dolittle {
public void healCat(Cat cat) {
System.out.println("The patient is healthy!");
}
}
ஹீல்கேட் () முறை சிங்கம் , புலி , மற்றும் சீட்டா பொருட்களை ஏற்றுக்கொள்ள முடியும் - அவை அனைத்தும் பூனையின் நிகழ்வுகள் :
public class Main {
public static void main(String[] args) {
Dolittle dolittle = new Dolittle();
Lion simba = new Lion();
Tiger shereKhan = new Tiger();
Cheetah chester = new Cheetah();
dolittle.healCat(simba);
dolittle.healCat(shereKhan);
dolittle.healCat(chester);
}
}
கன்சோல் வெளியீடு: நோயாளி ஆரோக்கியமாக இருக்கிறார்! நோயாளி நலமாக இருக்கிறார்! நோயாளி நலமாக இருக்கிறார்! எனவே எங்கள் டோலிட்டில்வர்க்கம் வெவ்வேறு வகைகளில் ஒரே மாதிரியாக வேலை செய்கிறது. இப்போது இரண்டாவது பகுதியைச் சமாளிப்போம்: "மேலும், பொருட்களின் நடத்தை அவற்றின் வகையைப் பொறுத்து மாறுபடும்". இது எல்லாம் மிகவும் எளிமையானது. இயற்கையில், ஒவ்வொரு பூனையும் வெவ்வேறு வழிகளில் இயங்குகின்றன. குறைந்தபட்சம், அவை வெவ்வேறு வேகத்தில் இயங்குகின்றன. எங்கள் மூன்று பூனைகளில், சிறுத்தை வேகமாக ஓடுகிறது, புலி மற்றும் சிங்கம் மெதுவாக ஓடுகிறது. வேறு வார்த்தைகளில் கூறுவதானால், அவர்களின் நடத்தை வேறுபட்டது. பாலிமார்பிசம் வெவ்வேறு வகைகளை ஒன்றாகப் பயன்படுத்துவதை விட அதிகமாகச் செய்கிறது. இது அவர்களின் வேறுபாடுகளை நினைவில் வைத்துக் கொள்ளவும், அவை ஒவ்வொன்றிற்கும் குறிப்பிட்ட நடத்தையைப் பாதுகாக்கவும் உதவுகிறது. பின்வரும் உதாரணம் இதை விளக்குகிறது. எங்கள் பூனைகள், வெற்றிகரமான மீட்புக்குப் பிறகு, ஒரு சிறிய ஓட்டத்தை அனுபவிக்க முடிவு செய்தன என்று வைத்துக்கொள்வோம். இதை எங்கள் டோலிட்டில் வகுப்பில் சேர்ப்போம் :
public class Dolittle {
public void healCat(Cat cat) {
System.out.println("The patient is healthy!");
cat.run();
}
}
மூன்று விலங்குகளுக்கு சிகிச்சையளிக்க ஒரே குறியீட்டை இயக்க முயற்சிப்போம்:
public static void main(String[] args) {
Dolittle dolittle = new Dolittle();
Lion simba = new Lion();
Tiger shereKhan = new Tiger();
Cheetah chester = new Cheetah();
dolittle.healCat(simba);
dolittle.healCat(shereKhan);
dolittle.healCat(chester);
}
முடிவுகள் எப்படி இருக்கும் என்பது இங்கே: நோயாளி ஆரோக்கியமாக இருக்கிறார்! சிங்கம் மணிக்கு 80 கிமீ வேகத்தில் ஓடுகிறது. நோயாளி நலமாக இருக்கிறார்! புலி மணிக்கு 60 கிமீ வேகத்தில் ஓடுகிறது. நோயாளி நலமாக இருக்கிறார்! சீட்டா 120 கிமீ/மணி வேகத்தில் ஓடுகிறது, மூன்று விலங்குகளையும் பூனைக்கு 'பொதுவாக' மாற்றிய பிறகு, அந்த முறைக்கு நாம் அனுப்பினாலும், பொருட்களின் குறிப்பிட்ட நடத்தை பாதுகாக்கப்படுவதை இங்கே தெளிவாகக் காண்கிறோம் . பாலிமார்பிஸம் காரணமாக, இவை மூன்று பூனைகள் அல்ல என்பதை ஜாவா நன்றாக நினைவில் வைத்திருக்கிறது. அவை சிங்கம், புலி மற்றும் சிறுத்தை, ஒவ்வொன்றும் வித்தியாசமாக இயங்கும். இது பாலிமார்பிஸத்தின் முக்கிய நன்மையை விளக்குகிறது: நெகிழ்வுத்தன்மை. பல வகைகளால் பகிரப்படும் சில செயல்பாடுகளை நாம் செயல்படுத்த வேண்டியிருக்கும் போது, சிங்கங்கள், புலிகள் மற்றும் சிறுத்தைகள் வெறுமனே 'பூனைகள்' ஆகிவிடும். எல்லா விலங்குகளும் வித்தியாசமானவை, ஆனால் சில சூழ்நிலைகளில் பூனை அதன் இனத்தைப் பொருட்படுத்தாமல் பூனையாகவே இருக்கும் :) உங்களுக்காக சில வீடியோ உறுதிப்படுத்தல் இங்கே.
மேலும் வாசிப்பு: |
---|
GO TO FULL VERSION