OOP தொடர்பான கேள்விகள் IT நிறுவனத்தில் ஜாவா டெவலப்பர் பதவிக்கான தொழில்நுட்ப நேர்காணலின் ஒருங்கிணைந்த பகுதியாகும். இந்த கட்டுரையில், OOP இன் ஒரு கொள்கையைப் பற்றி பேசுவோம் - பாலிமார்பிசம். நேர்காணலின் போது அடிக்கடி கேட்கப்படும் அம்சங்களில் கவனம் செலுத்துவோம், மேலும் தெளிவுக்காக சில உதாரணங்களையும் தருவோம்.
ஜாவாவில் பாலிமார்பிசம் என்றால் என்ன?
பாலிமார்பிஸம் என்பது பொருளின் குறிப்பிட்ட வகை பற்றிய தகவல் இல்லாமல், அதே இடைமுகம் கொண்ட பொருட்களை அதே வழியில் கையாளும் ஒரு நிரலின் திறன் ஆகும். பாலிமார்பிசம் என்றால் என்ன என்ற கேள்விக்கு நீங்கள் பதிலளித்தால், நீங்கள் என்ன சொல்கிறீர்கள் என்பதை விளக்குமாறு கேட்கப்படுவீர்கள். கூடுதல் கேள்விகளைத் தூண்டாமல், நேர்காணல் செய்பவருக்கு மீண்டும் ஒருமுறை அதைத் தெரிவிக்கவும். OOP அணுகுமுறையானது, வகுப்புகளின் அடிப்படையிலான பொருள்களுக்கிடையேயான தொடர்புகளின் அடிப்படையில் ஒரு ஜாவா நிரலை உருவாக்குவதை உள்ளடக்கியது என்பதை நீங்கள் தொடங்கலாம். வகுப்புகள் முன்பு எழுதப்பட்ட வரைபடங்கள் (வார்ப்புருக்கள்) நிரலில் பொருள்களை உருவாக்கப் பயன்படுத்தப்படுகின்றன. மேலும், ஒரு வகுப்பில் எப்போதும் ஒரு குறிப்பிட்ட வகை உள்ளது, இது நல்ல நிரலாக்க பாணியுடன், அதன் நோக்கத்தை பரிந்துரைக்கும் பெயரைக் கொண்டுள்ளது. மேலும், ஜாவா வலுவாக தட்டச்சு செய்யப்பட்டுள்ளதால், மாறிகள் அறிவிக்கப்படும்போது நிரல் குறியீடு எப்போதும் ஒரு பொருளின் வகையைக் குறிப்பிட வேண்டும். கடுமையான தட்டச்சு குறியீட்டின் பாதுகாப்பையும் நம்பகத்தன்மையையும் மேம்படுத்துகிறது, மேலும் பொருந்தாத வகைகளால் ஏற்படும் பிழைகளைத் தடுக்க தொகுக்கும்போது கூட சாத்தியமாக்குகிறது (உதாரணமாக, ஒரு சரத்தை எண்ணால் வகுக்க முயற்சிப்பது). இயற்கையாகவே, தொகுப்பாளர் "தெரிந்திருக்க வேண்டும்" அறிவிக்கப்பட்ட வகை - இது JDK இன் வகுப்பாக இருக்கலாம் அல்லது நாமே உருவாக்கிய வகுப்பாக இருக்கலாம். எங்கள் குறியீடு பிரகடனத்தில் குறிப்பிடப்பட்டுள்ள வகைப் பொருட்களை மட்டும் பயன்படுத்தாமல் அதன் சந்ததியினரையும் பயன்படுத்த முடியும் என்பதை நேர்காணல் செய்பவருக்கு சுட்டிக்காட்டவும்.இது ஒரு முக்கியமான விஷயம்: நாம் பல வகைகளுடன் ஒரே வகையாக வேலை செய்யலாம் (இந்த வகைகள் அடிப்படை வகையிலிருந்து பெறப்பட்டவை எனில்). இதன் பொருள் ஒரு மாறியை நாம் சூப்பர் கிளாஸ் வகையாக அறிவித்தால், அந்த மாறிக்கு அதன் வழித்தோன்றல்களில் ஒருவரின் உதாரணத்தை ஒதுக்கலாம். நீங்கள் ஒரு உதாரணம் சொன்னால் நேர்காணல் செய்பவர் விரும்புவார். (அடிப்படை வகுப்பு) பல வகுப்புகளால் பகிரப்படக்கூடிய சில வகுப்பைத் தேர்ந்தெடுத்து, அவற்றில் இரண்டை மரபுரிமையாக மாற்றவும். அடிப்படை வகுப்பு:
public class Dancer {
private String name;
private int age;
public Dancer(String name, int age) {
this.name = name;
this.age = age;
}
public void dance() {
System.out.println(toString() + " I dance like everyone else.");
}
@Override
public String toString() {
Return "I'm " + name + ". I'm " + age + " years old.";
}
}
துணைப்பிரிவுகளில், அடிப்படை வகுப்பின் முறையை மேலெழுதவும்:
public class ElectricBoogieDancer extends Dancer {
public ElectricBoogieDancer(String name, int age) {
super(name, age);
}
// Override the method of the base class
@Override
public void dance() {
System.out.println(toString () + " I dance the electric boogie!");
}
}
public class Breakdancer extends Dancer {
public Breakdancer(String name, int age) {
super(name, age);
}
// Override the method of the base class
@Override
public void dance() {
System.out.println(toString() + " I breakdance!");
}
}
பாலிமார்பிஸத்தின் உதாரணம் மற்றும் ஒரு நிரலில் இந்த பொருள்கள் எவ்வாறு பயன்படுத்தப்படலாம்:
public class Main {
public static void main(String[] args) {
Dancer dancer = new Dancer("Fred", 18);
Dancer breakdancer = new Breakdancer("Jay", 19); // Widening conversion to the base type
Dancer electricBoogieDancer = new ElectricBoogieDancer("Marcia", 20); // Widening conversion to the base type
List<dancer> disco = Arrays.asList(dancer, breakdancer, electricBoogieDancer);
for (Dancer d : disco) {
d.dance(); // Call the polymorphic method
}
}
}
முக்கிய முறையில் , வரிகளைக் காட்டவும்
Dancer breakdancer = new Breakdancer("Jay", 19);
Dancer electricBoogieDancer = new ElectricBoogieDancer("Marcia", 20);
ஒரு சூப்பர் கிளாஸின் மாறியை அறிவித்து, அதன் வழித்தோன்றல்களில் ஒருவரின் நிகழ்வான ஒரு பொருளை ஒதுக்கவும். அசைன்மென்ட் ஆபரேட்டரின் இடது மற்றும் வலது பக்கங்களில் அறிவிக்கப்பட்ட வகைகளின் முரண்பாட்டின் போது கம்பைலர் ஏன் புரட்டவில்லை என்று உங்களிடம் கேட்கப்படும் - எல்லாவற்றிற்கும் மேலாக, ஜாவா வலுவாக தட்டச்சு செய்யப்பட்டுள்ளது. விரிவடையும் வகை மாற்றம் இங்கு வேலை செய்கிறது என்பதை விளக்குக - ஒரு பொருளின் குறிப்பு அதன் அடிப்படை வகுப்பின் குறிப்பு போல கருதப்படுகிறது. மேலும் என்னவென்றால், குறியீட்டில் அத்தகைய கட்டமைப்பை எதிர்கொண்டதால், கம்பைலர் தானாகவே மற்றும் மறைமுகமாக மாற்றத்தை செய்கிறது. அசைன்மென்ட் ஆபரேட்டரின் ( டான்சர் ) இடது பக்கத்தில் அறிவிக்கப்பட்ட வகை பல வடிவங்களைக் (வகைகள்) கொண்டிருப்பதை மாதிரிக் குறியீடு காட்டுகிறது, அவை வலது பக்கத்தில் அறிவிக்கப்படுகின்றன ( பிரேக்டான்சர் , எலக்ட்ரிக்பூகி டான்சர்) ஒவ்வொரு வடிவமும் சூப்பர் கிளாஸில் ( நடன முறை) வரையறுக்கப்பட்ட பொதுவான செயல்பாடுகளைப் பொறுத்து அதன் தனித்துவமான நடத்தையைக் கொண்டிருக்கலாம் . அதாவது, ஒரு சூப்பர் கிளாஸில் அறிவிக்கப்பட்ட ஒரு முறை அதன் வழித்தோன்றல்களில் வித்தியாசமாக செயல்படுத்தப்படலாம். இந்த விஷயத்தில், நாங்கள் முறை மேலெழுதலைக் கையாளுகிறோம், இது பல வடிவங்களை (நடத்தைகள்) உருவாக்குகிறது. முக்கிய முறையில் குறியீட்டை இயக்குவதன் மூலம் இதைக் காணலாம்: நிரல் வெளியீடு: நான் பிரெட். எனக்கு 18 வயது. நான் எல்லோரையும் போல நடனமாடுகிறேன். நான் ஜெய். எனக்கு 19 வயது ஆகின்றது. நான் உடைக்கிறேன்! நான் மார்சியா. எனக்கு 20 வயது ஆகிறது. நான் மின்சார போகி நடனமாடுகிறேன்! துணைப்பிரிவுகளில் உள்ள முறையை நாம் புறக்கணிக்கவில்லை என்றால், நாம் வேறுபட்ட நடத்தையைப் பெற மாட்டோம். உதாரணத்திற்கு,ElectricBoogieDancer வகுப்புகள், நிரலின் வெளியீடு இதுவாக இருக்கும்: நான் ஃப்ரெட். எனக்கு 18 வயது. நான் எல்லோரையும் போல நடனமாடுகிறேன். நான் ஜெய். எனக்கு 19 வயது ஆகின்றது. நான் எல்லோரையும் போல நடனமாடுகிறேன். நான் மார்சியா. எனக்கு 20 வயது ஆகிறது. நான் எல்லோரையும் போல நடனமாடுகிறேன். இதன் பொருள், பிரேக்டான்சர் மற்றும் எலக்ட்ரிக்பூகி டான்சர் வகுப்புகளை உருவாக்குவதில் அர்த்தமில்லை . பாலிமார்பிஸத்தின் கொள்கை குறிப்பாக எங்கே வெளிப்படுகிறது? நிரலில் ஒரு பொருள் அதன் குறிப்பிட்ட வகையை அறியாமல் எங்கே பயன்படுத்தப்படுகிறது? எங்கள் எடுத்துக்காட்டில், டான்ஸர் டி பொருளில் நடனம்() முறை அழைக்கப்படும்போது இது நிகழ்கிறது . ஜாவாவில், பாலிமார்பிசம் என்பது பொருள் a என்பதை நிரல் அறிய வேண்டியதில்லை பிரேக்டான்சர் அல்லது எலக்ட்ரிக் பூகி டான்சர் . முக்கியமான விஷயம் என்னவென்றால், இது டான்சர் வகுப்பின் வழித்தோன்றல் . நீங்கள் சந்ததியினரைக் குறிப்பிட்டால், ஜாவாவில் பரம்பரை நீட்டிக்கப்படுவது மட்டுமல்ல , செயல்படுத்துகிறது என்பதையும் நீங்கள் கவனிக்க வேண்டும்.. ஜாவா பல மரபுரிமைகளை ஆதரிக்கவில்லை என்பதைக் குறிப்பிட வேண்டிய நேரம் இது - ஒவ்வொரு வகைக்கும் ஒரு பெற்றோர் (சூப்பர் கிளாஸ்) மற்றும் வரம்பற்ற எண்ணிக்கையிலான சந்ததிகள் (துணைப்பிரிவுகள்) இருக்கலாம். அதன்படி, வகுப்புகளுக்கு பல செட் செயல்பாடுகளைச் சேர்க்க இடைமுகங்கள் பயன்படுத்தப்படுகின்றன. துணைப்பிரிவுகளுடன் (பரம்பரை) ஒப்பிடும்போது, இடைமுகங்கள் பெற்றோர் வகுப்போடு குறைவாக இணைக்கப்பட்டுள்ளன. அவை மிகவும் பரவலாகப் பயன்படுத்தப்படுகின்றன. ஜாவாவில், ஒரு இடைமுகம் ஒரு குறிப்பு வகையாகும், எனவே நிரல் இடைமுக வகையின் மாறியை அறிவிக்க முடியும். இப்போது ஒரு உதாரணம் கொடுக்க நேரம் வந்துவிட்டது. ஒரு இடைமுகத்தை உருவாக்கவும்:
public interface CanSwim {
void swim();
}
தெளிவுக்காக, நாங்கள் பல்வேறு தொடர்பற்ற வகுப்புகளை எடுத்து அவற்றை இடைமுகத்தை செயல்படுத்துவோம்:
public class Human implements CanSwim {
private String name;
private int age;
public Human(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public void swim() {
System.out.println(toString()+" I swim with an inflated tube.");
}
@Override
public String toString() {
return "I'm " + name + ". I'm " + age + " years old.";
}
}
public class Fish implements CanSwim {
private String name;
public Fish(String name) {
this.name = name;
}
@Override
public void swim() {
System.out.println("I'm a fish. My name is " + name + ". I swim by moving my fins.");
}
public class UBoat implements CanSwim {
private int speed;
public UBoat(int speed) {
this.speed = speed;
}
@Override
public void swim() {
System.out.println("I'm a submarine that swims through the water by rotating screw propellers. My speed is " + speed + " knots.");
}
}
முக்கிய முறை:
public class Main {
public static void main(String[] args) {
CanSwim human = new Human("John", 6);
CanSwim fish = new Fish("Whale");
CanSwim boat = new UBoat(25);
List<swim> swimmers = Arrays.asList(human, fish, boat);
for (Swim s : swimmers) {
s.swim();
}
}
}
ஒரு இடைமுகத்தில் வரையறுக்கப்பட்ட பாலிமார்பிக் முறையை அழைக்கும் முடிவுகள், இந்த இடைமுகத்தைச் செயல்படுத்தும் வகைகளின் நடத்தையில் உள்ள வேறுபாடுகளைக் காட்டுகிறது. எங்கள் விஷயத்தில், இவை நீச்சல் முறையால் காட்டப்படும் வெவ்வேறு சரங்கள். எங்கள் எடுத்துக்காட்டைப் படித்த பிறகு, இந்த குறியீட்டை ஏன் பிரதான முறையில் இயக்க வேண்டும் என்று நேர்காணல் செய்பவர் கேட்கலாம்
for (Swim s : swimmers) {
s.swim();
}
எங்கள் துணைப்பிரிவுகளில் வரையறுக்கப்பட்ட மேலெழுந்தவாரியான முறைகள் என்று அழைக்கப்படுகிறதா? நிரல் இயங்கும் போது முறையின் விரும்பிய செயலாக்கம் எவ்வாறு தேர்ந்தெடுக்கப்படுகிறது? இந்தக் கேள்விகளுக்குப் பதிலளிக்க, தாமதமான (டைனமிக்) பிணைப்பை நீங்கள் விளக்க வேண்டும். பிணைப்பு என்பது ஒரு முறை அழைப்புக்கும் அதன் குறிப்பிட்ட வகுப்பைச் செயல்படுத்துவதற்கும் இடையே ஒரு மேப்பிங்கை நிறுவுதல். சாராம்சத்தில், வகுப்புகளில் வரையறுக்கப்பட்ட மூன்று முறைகளில் எது செயல்படுத்தப்படும் என்பதை குறியீடு தீர்மானிக்கிறது. ஜாவா இயல்பாகவே லேட் பைண்டிங்கைப் பயன்படுத்துகிறது. அதாவது கம்பைலர் இந்தக் குறியீட்டை தொகுக்கும்போது
for (Swim s : swimmers) {
s.swim();
}
எந்த வகுப்பில் ( மனிதன் , மீன் அல்லது உபோட் ) நீந்தும்போது செயல்படுத்தப்படும் குறியீடு உள்ளது என்று தெரியவில்லைமுறை அழைக்கப்படுகிறது. டைனமிக் பைண்டிங் மெக்கானிசம் (இயங்கும் நேரத்தில் ஒரு பொருளின் வகையைச் சரிபார்த்து, இந்த வகையைச் சரியாகச் செயல்படுத்துவதைத் தேர்ந்தெடுப்பது) நன்றி, நிரல் செயல்படுத்தப்படும்போது மட்டுமே இது தீர்மானிக்கப்படுகிறது. இது எவ்வாறு செயல்படுத்தப்படுகிறது என்று உங்களிடம் கேட்டால், பொருட்களை ஏற்றும் மற்றும் துவக்கும் போது, JVM நினைவகத்தில் அட்டவணைகளை உருவாக்குகிறது மற்றும் மாறிகளை அவற்றின் மதிப்புகள் மற்றும் பொருள்களுடன் அவற்றின் முறைகளுடன் இணைக்கிறது என்று நீங்கள் பதிலளிக்கலாம். அவ்வாறு செய்யும்போது, ஒரு வகுப்பு மரபுரிமையாக இருந்தால் அல்லது ஒரு இடைமுகத்தை செயல்படுத்தினால், வணிகத்தின் முதல் வரிசையானது மேலெழுதப்பட்ட முறைகள் இருப்பதை சரிபார்க்க வேண்டும். ஏதேனும் இருந்தால், அவர்கள் இந்த வகைக்கு கட்டுப்பட்டவர்கள். இல்லையெனில், பொருந்தக்கூடிய முறைக்கான தேடல் ஒரு படி மேலே உள்ள வகுப்பிற்கு நகர்கிறது (பெற்றோர்) மற்றும் பல நிலை படிநிலையில் ரூட் வரை. OOP இல் பாலிமார்பிஸம் மற்றும் குறியீட்டில் அதன் செயலாக்கம் என்று வரும்போது, அடிப்படை வகுப்புகளின் சுருக்க வரையறைகளை வழங்க சுருக்க வகுப்புகள் மற்றும் இடைமுகங்களைப் பயன்படுத்துவது நல்ல நடைமுறை என்பதை நாங்கள் கவனிக்கிறோம். இந்த நடைமுறையானது சுருக்கத்தின் கொள்கையிலிருந்து பின்பற்றப்படுகிறது - பொதுவான நடத்தை மற்றும் பண்புகளை அடையாளம் கண்டு அவற்றை ஒரு சுருக்க வகுப்பில் வைப்பது அல்லது பொதுவான நடத்தையை மட்டுமே அடையாளம் கண்டு இடைமுகத்தில் வைப்பது. பாலிமார்பிஸத்தை செயல்படுத்த இடைமுகங்கள் மற்றும் வர்க்க மரபு அடிப்படையில் ஒரு பொருள் படிநிலையை வடிவமைத்து உருவாக்குவது அவசியம். ஜாவாவில் பாலிமார்பிசம் மற்றும் புதுமைகளைப் பொறுத்தவரை, ஜாவா 8 இல் தொடங்கி, சுருக்க வகுப்புகள் மற்றும் இடைமுகங்களை உருவாக்கும்போது, பயன்படுத்த முடியும் என்பதை நாங்கள் கவனிக்கிறோம் அல்லது பொதுவான நடத்தையை மட்டும் அடையாளம் கண்டு அதை ஒரு இடைமுகத்தில் வைப்பது. பாலிமார்பிஸத்தை செயல்படுத்த இடைமுகங்கள் மற்றும் வர்க்க மரபு அடிப்படையில் ஒரு பொருள் படிநிலையை வடிவமைத்து உருவாக்குவது அவசியம். ஜாவாவில் பாலிமார்பிசம் மற்றும் புதுமைகளைப் பொறுத்தவரை, ஜாவா 8 இல் தொடங்கி, சுருக்க வகுப்புகள் மற்றும் இடைமுகங்களை உருவாக்கும்போது, பயன்படுத்த முடியும் என்பதை நாங்கள் கவனிக்கிறோம் அல்லது பொதுவான நடத்தையை மட்டும் அடையாளம் கண்டு அதை ஒரு இடைமுகத்தில் வைப்பது. பாலிமார்பிஸத்தை செயல்படுத்த இடைமுகங்கள் மற்றும் வர்க்க மரபு அடிப்படையில் ஒரு பொருள் படிநிலையை வடிவமைத்து உருவாக்குவது அவசியம். ஜாவாவில் பாலிமார்பிசம் மற்றும் புதுமைகளைப் பொறுத்தவரை, ஜாவா 8 இல் தொடங்கி, சுருக்க வகுப்புகள் மற்றும் இடைமுகங்களை உருவாக்கும்போது, பயன்படுத்த முடியும் என்பதை நாங்கள் கவனிக்கிறோம்அடிப்படை வகுப்புகளில் சுருக்க முறைகளுக்கான இயல்புநிலை செயலாக்கத்தை எழுத இயல்புநிலை முக்கிய சொல். உதாரணத்திற்கு:
public interface CanSwim {
default void swim() {
System.out.println("I just swim");
}
}
சில நேரங்களில் நேர்காணல் செய்பவர்கள் பாலிமார்பிஸத்தின் கொள்கையை மீறாமல் இருக்க அடிப்படை வகுப்புகளில் முறைகள் எவ்வாறு அறிவிக்கப்பட வேண்டும் என்று கேட்கிறார்கள். பதில் எளிது: இந்த முறைகள் நிலையானதாகவோ , தனிப்பட்டதாகவோ அல்லது இறுதியானதாகவோ இருக்கக்கூடாது . தனிப்பட்ட ஒரு முறையை வகுப்பிற்குள் மட்டுமே கிடைக்கச் செய்கிறது, எனவே நீங்கள் அதை துணைப்பிரிவில் மேலெழுத முடியாது. நிலையானது எந்த பொருளையும் காட்டிலும் ஒரு முறையை வகுப்போடு தொடர்புபடுத்துகிறது, எனவே சூப்பர் கிளாஸின் முறை எப்போதும் அழைக்கப்படும். மற்றும் இறுதியானது ஒரு முறையை மாறாததாகவும் துணைப்பிரிவுகளிலிருந்து மறைக்கவும் செய்கிறது.
பாலிமார்பிசம் நமக்கு என்ன தருகிறது?
பாலிமார்பிசம் நமக்கு எவ்வாறு பயனளிக்கிறது என்பது குறித்தும் நீங்கள் பெரும்பாலும் கேட்கப்படுவீர்கள். கூந்தல் விவரங்களில் தலையிடாமல் சுருக்கமாக இதற்குப் பதிலளிக்கலாம்:- இது வகுப்பு செயலாக்கங்களை மாற்றுவதை சாத்தியமாக்குகிறது. சோதனை அதன் மீது கட்டப்பட்டுள்ளது.
- இது விரிவாக்கத்தை எளிதாக்குகிறது, எதிர்காலத்தில் கட்டமைக்கக்கூடிய அடித்தளத்தை உருவாக்குவதை எளிதாக்குகிறது. ஏற்கனவே உள்ளவற்றின் அடிப்படையில் புதிய வகைகளைச் சேர்ப்பது OOP நிரல்களின் செயல்பாட்டை விரிவாக்குவதற்கான பொதுவான வழியாகும்.
- ஒரு பொதுவான வகை அல்லது நடத்தையைப் பகிர்ந்து கொள்ளும் பொருட்களை ஒரு சேகரிப்பு அல்லது வரிசையாக இணைத்து அவற்றை ஒரே மாதிரியாகக் கையாள இது உங்களை அனுமதிக்கிறது (எங்கள் உதாரணங்களில், அனைவரையும் நடனம்() அல்லது நீந்துமாறு கட்டாயப்படுத்தினோம்() :)
- புதிய வகைகளை உருவாக்குவதில் வளைந்து கொடுக்கும் தன்மை: ஒரு முறையை பெற்றோர் செயல்படுத்துவதை நீங்கள் தேர்வு செய்யலாம் அல்லது துணைப்பிரிவில் மேலெழுதலாம்.
சில பிரிக்கும் வார்த்தைகள்
பாலிமார்பிசம் என்பது மிக முக்கியமான மற்றும் விரிவான தலைப்பு. ஜாவாவில் உள்ள OOP பற்றிய இந்தக் கட்டுரையின் கிட்டத்தட்ட பாதியின் தலைப்பு இது மற்றும் மொழியின் அடித்தளத்தில் ஒரு நல்ல பகுதியை உருவாக்குகிறது. ஒரு நேர்காணலில் இந்தக் கொள்கையை வரையறுப்பதை உங்களால் தவிர்க்க முடியாது. உங்களுக்குத் தெரியாவிட்டால் அல்லது புரியவில்லை என்றால், நேர்காணல் முடிவடையும். எனவே சோம்பேறியாக இருக்காதீர்கள் - நேர்காணலுக்கு முன் உங்கள் அறிவை மதிப்பிட்டு, தேவைப்பட்டால் அதைப் புதுப்பிக்கவும்.
மேலும் வாசிப்பு: |
---|
GO TO FULL VERSION