අතුරු මුහුණතක් සහ වියුක්ත පන්තියක් අතර වෙනස හරියටම කුමක්ද?
අතුරු මුහුණතක් සහ වියුක්ත පන්තියක් අතර වෙනස හරියටම කුමක්ද?
Answers:
අතුරුමුහුණතක් යනු කොන්ත්රාත්තුවකි : අතුරුමුහුණත ලියන පුද්ගලයා " ඒයි, මම ඒ ආකාරයට පෙනෙන දේවල් පිළිගනිමි " යනුවෙන් පවසන අතර අතුරු මුහුණත භාවිතා කරන පුද්ගලයා " හරි, මම ලියන පන්තිය ඒ ආකාරයෙන් පෙනේ " යනුවෙන් පවසයි.
අතුරු මුහුණතක් යනු හිස් කවචයකි . ක්රමවල ශරීරයක් නොමැති බව අඟවන ක්රමවල අත්සන් පමණක් ඇත. අතුරු මුහුණතට කිසිවක් කළ නොහැක. එය රටාවක් පමණි.
උදාහරණයක් ලෙස (ව්යාජ කේතය):
// I say all motor vehicles should look like this:
interface MotorVehicle
{
void run();
int getFuel();
}
// My team mate complies and writes vehicle looking that way
class Car implements MotorVehicle
{
int fuel;
void run()
{
print("Wrroooooooom");
}
int getFuel()
{
return this.fuel;
}
}
අතුරුමුහුණතක් ක්රියාත්මක කිරීම ඉතා සුළු CPU ප්රමාණයක් පරිභෝජනය කරයි, මන්ද එය පංතියක් නොවන අතර නම් පොකුරක් පමණක් වන අතර ඒ නිසා මිල අධික පෙනුමක් නොමැත. කාවැද්දූ උපාංග වැනි වැදගත් වන විට එය විශිෂ්ටයි.
වියුක්ත පන්ති, අතුරුමුහුණත් මෙන් නොව පන්ති වේ. ඒවා භාවිතා කිරීමට වඩා මිල අධිකය, මන්ද ඔබ ඔවුන්ගෙන් උරුම වූ විට කළ යුතු දේ සොයා බැලීමක් ඇති බැවිනි.
වියුක්ත පංති අතුරුමුහුණත් මෙන් පෙනේ, නමුත් ඒවාට තවත් යමක් තිබේ: ඔබට ඔවුන් සඳහා හැසිරීමක් අර්ථ දැක්විය හැකිය. " මෙම පංති ඒ හා සමාන විය යුතුය. ඔවුන්ට එය පොදු ය, එබැවින් හිස් තැන් පුරවන්න! "
උදාහරණයක් වශයෙන්:
// I say all motor vehicles should look like this:
abstract class MotorVehicle
{
int fuel;
// They ALL have fuel, so lets implement this for everybody.
int getFuel()
{
return this.fuel;
}
// That can be very different, force them to provide their
// own implementation.
abstract void run();
}
// My teammate complies and writes vehicle looking that way
class Car extends MotorVehicle
{
void run()
{
print("Wrroooooooom");
}
}
වියුක්ත පංති සහ අතුරුමුහුණත් විවිධ සංකල්ප විය යුතු වුවත්, ක්රියාත්මක කිරීම් එම ප්රකාශය සමහර විට අසත්යය කරයි. සමහර විට, ඒවා ඔබ යැයි සිතන දේ පවා නොවේ.
ජාවා හි, මෙම නියමය දැඩි ලෙස බලාත්මක වන අතර, PHP හි අතුරු මුහුණත් වියුක්ත පංති වන අතර කිසිදු ක්රමයක් ප්රකාශයට පත් නොකෙරේ.
පයිතන්හි, වියුක්ත පංති යනු ඔබට ABC මොඩියුලයෙන් ලබා ගත හැකි ක්රමලේඛ උපක්රමයක් වන අතර ඇත්ත වශයෙන්ම මෙටාක්ලාස් භාවිතා කරයි, එබැවින් පන්ති. තවද අතුරු මුහුණත් මෙම භාෂාවෙන් තාරාවන් ටයිප් කිරීම හා සම්බන්ධ වන අතර එය සම්මුතීන් සහ විස්තර කරන්නන් (__method__ ක්රම) ලෙස හඳුන්වන විශේෂ ක්රම අතර සංකලනයකි.
ක්රමලේඛනය සමඟ සුපුරුදු පරිදි, වෙනත් භාෂාවක න්යාය, පුහුණුව සහ පුහුණුව ඇත :-)
interface
හා class
සිට Head First Java
බව පැහැදිලි වේA class defines who you are, and an interface tells what roles you could play
වියුක්ත පන්තියක් සහ අතුරු මුහුණතක් අතර ඇති ප්රධාන තාක්ෂණික වෙනස්කම් :
වියුක්ත පංතිවලට නියතයන්, සාමාජිකයන්, ක්රම කඳන් (ශරීරයක් නොමැති ක්රම) සහ නිර්වචනය කළ ක්රම තිබිය හැකි අතර අතුරු මුහුණත් වලට පැවතිය හැක්කේ නියත හා ක්රම මුරණ්ඩු පමණි .
වියුක්ත පංතියක ක්රම සහ සාමාජිකයන් ඕනෑම දෘශ්යතාවයකින් අර්ථ දැක්විය හැකි අතර අතුරු මුහුණතක සියලුම ක්රම අර්ථ දැක්විය යුතුය public
(ඒවා පෙරනිමියෙන් පොදු ලෙස අර්ථ දැක්වේ).
වියුක්ත පංතියක් උරුම කර ගැනීමේදී, කොන්ක්රීට් ළමා පන්තියක් වියුක්ත ක්රම නිර්වචනය කළ යුතු අතර, වියුක්ත පන්තියකට තවත් වියුක්ත පංතියක් දීර් extend කළ හැකි අතර මව් පන්තියේ වියුක්ත ක්රම නිර්වචනය කළ යුතු නොවේ.
ඒ හා සමානව, වෙනත් අතුරු මුහුණතක් විස්තාරණය කරන අතුරු මුහුණතක් මව් අතුරු මුහුණතේ ක්රම ක්රියාත්මක කිරීම සඳහා වගකිව යුතු නොවේ . මෙයට හේතුව අතුරුමුහුණත් මඟින් කිසිදු ක්රියාත්මක කිරීමක් නිර්වචනය කළ නොහැකි වීමයි.
ළමා පන්තියකට එක් පන්තියක් (වියුක්ත හෝ කොන්ක්රීට්) පමණක් දිගු කළ හැකි අතර අතුරු මුහුණතක් දිගු කළ හැකි අතර පන්තියකට වෙනත් අතුරු මුහුණත් ක්රියාත්මක කළ හැකිය .
ළමා පංතියකට එකම හෝ අඩු සීමිත දෘශ්යතාවයකින් වියුක්ත ක්රම නිර්වචනය කළ හැකි අතර අතුරු මුහුණතක් ක්රියාත්මක කරන පන්තියකට එකම දෘශ්යතාවයකින් (පොදු) ක්රම නිර්වචනය කළ යුතුය.
CANNOT
හැකිය.
අතුරුමුහුණතක අඩංගු වන්නේ ක්රියාකාරීත්වයේ අර්ථ දැක්වීම / අත්සන පමණක් වන අතර, අපට යම් පොදු ක්රියාකාරිත්වයක් මෙන්ම පොදු අත්සන් තිබේ නම්, අප වියුක්ත පන්තියක් භාවිතා කළ යුතුය. වියුක්ත පංතියක් භාවිතා කිරීමෙන්, අපට එකවර හැසිරීම මෙන්ම ක්රියාකාරිත්වය ද ලබා දිය හැකිය. වියුක්ත පංතියට උරුමකම් කියන තවත් සංවර්ධකයෙකුට මෙම ක්රියාකාරිත්වය පහසුවෙන් භාවිතා කළ හැකිය, මන්ද ඔවුන්ට අවශ්ය වන්නේ හිස් තැන් පිරවීම පමණි.
http://www.dotnetbull.com/2011/11/difference-between-abstract-class-and.html
http://www.dotnetbull.com/2011/11/what-is-abstract-class-in-c-net.html http://www.dotnetbull.com/2011/11/what-is-interface-in -c-net.html
පැහැදිලි කිරීමක් මෙතැනින් සොයාගත හැකිය: http://www.developer.com/lang/php/article.php/3604111/PHP-5-OOP-Interfaces-Abstract-Classes-and-the-Adapter-Pattern.htm
වියුක්ත පංතියක් යනු ක්රමලේඛකයා විසින් අර්ධ වශයෙන් පමණක් ක්රියාත්මක කරන පන්තියකි. එහි වියුක්ත ක්රම එකක් හෝ කිහිපයක් අඩංගු විය හැකිය. වියුක්ත ක්රමයක් යනු හුදෙක් ළමා පන්තියක මෙම ක්රමය ක්රියාත්මක කළ යුතු බව ක්රමලේඛකයාට පැවසීමට ක්රියා කරන අර්ථ දැක්වීමකි.
අතුරු මුහුණතක් වියුක්ත පන්තියකට සමාන ය; ඇත්ත වශයෙන්ම අතුරුමුහුණත් පන්ති හා වියුක්ත පංති වලට සමාන නාම අවකාශයක් ගනී. එම හේතුව නිසා, ඔබට පන්තියක් ලෙස එකම නමක් සහිත අතුරු මුහුණතක් අර්ථ දැක්විය නොහැක. අතුරු මුහුණතක් යනු සම්පූර්ණයෙන්ම වියුක්ත පන්තියකි; එහි කිසිදු ක්රමයක් ක්රියාත්මක නොවන අතර එයින් පන්ති උප වර්ගීකරණයක් වෙනුවට එම අතුරු මුහුණත ක්රියාත්මක කරන බව කියනු ලැබේ.
කෙසේ වෙතත්, අතුරුමුහුණත් පිළිබඳ මෙම පැහැදිලි කිරීම තරමක් අවුල් සහගත බව මට පෙනේ. වඩාත් පොදු අර්ථ දැක්වීමක් නම්: පන්ති ක්රියාත්මක කිරීම සපුරාලිය යුතු කොන්ත්රාත්තුවක් අතුරු මුහුණතක් අර්ථ දක්වයි. අතුරු මුහුණත් අර්ථ දැක්වීමක් කිසිදු ක්රියාත්මක කිරීමේ කේතයක් නොමැතිව මහජන සාමාජිකයින්ගේ අත්සන් වලින් සමන්විත වේ.
බොහෝ පිළිතුරු වලින් දැනටමත් පවසා ඇති වෙනස්කම් ඉස්මතු කිරීමට මට අවශ්ය නැත (අතුරු මුහුණතේ විචල්යයන් සඳහා පොදු ස්ථිතික අවසාන වෙනස් කිරීම් සහ වියුක්ත පන්තිවල ආරක්ෂිත, පුද්ගලික ක්රම සඳහා සහාය)
සරලව කිවහොත්, මම කියන්නට කැමතියි:
අතුරුමුහුණත: සම්බන්ධයක් නැති වස්තූන් විසින් කොන්ත්රාත්තුවක් ක්රියාත්මක කිරීම
වියුක්ත පන්තිය: බහු ආශ්රිත වස්තු අතර එකම හෝ වෙනස් හැසිරීම ක්රියාත්මක කිරීම
ඔරකල් ප්රලේඛනයෙන්
නම් වියුක්ත පන්ති භාවිතා කිරීම සලකා බලන්න :
නම් අතුරු මුහුණත් භාවිතා කිරීම සලකා බලන්න :
Serializable
අතුරු මුහුණත .වියුක්ත පංතිය ස්ථාපිත කරන්නේ “යනු” යනු කොන්ක්රීට් පන්ති සමඟ සම්බන්ධතාවයකි. අතුරුමුහුණත මඟින් පන්ති සඳහා "හැකියාවක්" ඇත.
ඔබ සොයන්නේ නම් Java
ක්රමලේඛන භාෂාවක් ලෙස , තවත් යාවත්කාලීන කිරීම් කිහිපයක් මෙන්න:
ජාවා 8 ක්රමවේදය අංගයක් ලබා දීමෙන් පන්ති interface
සහ abstract
පන්ති අතර පරතරය යම් දුරකට අඩු කර ඇත default
. අතුරු මුහුණතක් සඳහා ක්රමවේදයක් ක්රියාත්මක කිරීමක් දැන් වලංගු නොවේ.
මෙම ප්රලේඛන පිටුව බලන්න බලන්න.
කේත උදාහරණ වඩා හොඳින් තේරුම් ගැනීමට මෙම SE ප්රශ්නය දෙස බලන්න.
අතුරුමුහුණතක් සහ වියුක්ත පන්තියක් අතර වෙනස මා පැහැදිලි කළ යුත්තේ කෙසේද?
වැදගත් වෙනස්කම් කිහිපයක්:
වගුවක ස්වරූපයෙන්:
ලෙස javapapers සිට ජෝ විසින් ප්රකාශ :
1. ප්රධාන වෙනස යනු ජාවා අතුරුමුහුණතක ක්රම ව්යංගයෙන් වියුක්ත වන අතර ඒවා ක්රියාත්මක කළ නොහැක. ජාවා වියුක්ත පන්තියකට පෙරනිමි හැසිරීමක් ක්රියාත්මක කරන උදාහරණ ක්රම තිබිය හැකිය.
2. ජාවා අතුරුමුහුණතක ප්රකාශිත විචල්යයන් පෙරනිමියෙන් අවසන් වේ. වියුක්ත පන්තියක අවසාන නොවන විචල්යයන් අඩංගු විය හැකිය.
3. ජාවා අතුරුමුහුණතක සාමාජිකයින් පෙරනිමියෙන් පොදු වේ. ජාවා වියුක්ත පන්තියකට පුද්ගලික, ආරක්ෂිත වැනි පන්ති සාමාජිකයින්ගේ සුපුරුදු රසයන් තිබිය හැකිය.
4. ජාවා අතුරුමුහුණත “උපකරණ” යන පදය භාවිතයෙන් ක්රියාත්මක කළ යුතුය; ජාවා වියුක්ත පංතියක් “දිගු” යන යතුරු පදය භාවිතයෙන් දීර් extended කළ යුතුය.
5.අන් අතුරුමුහුණතකට තවත් ජාවා අතුරුමුහුණතක් පමණක් දිගු කළ හැකි අතර, වියුක්ත පන්තියකට තවත් ජාවා පන්තියක් දීර් extend කර බහු ජාවා අතුරුමුහුණත් ක්රියාත්මක කළ හැකිය.
6.A ජාවා පන්තියට බහු අතුරුමුහුණත් ක්රියාත්මක කළ හැකි නමුත් එයට දිගු කළ හැක්කේ එක් වියුක්ත පන්තියක් පමණි.
7. ඉන්ටර්ෆේස් නිරපේක්ෂ වියුක්ත වන අතර එය ක්ෂණිකව කළ නොහැකිය. ජාවා වියුක්ත පංතියක් ද ක්ෂණිකව දැක්විය නොහැක, නමුත් ප්රධාන () පවතී නම් එය ක්රියාත්මක කළ හැකිය.
8. ජාවා වියුක්ත පංති හා සසඳන විට, ජාවා අතුරුමුහුණත් මන්දගාමී වේ.
ප්රධාන කාරණය වන්නේ:
මම මහල් 300 කින් යුත් ගොඩනැගිල්ලක් ඉදිකරමි
ගොඩනැගිල්ලේ සැලැස්ම අතුරුමුහුණත
මහල් 200 ක් දක්වා ඉදිකර ඇති ගොඩනැගිල්ල - අර්ධ වශයෙන් නිම කරන ලද --- වියුක්ත
ගොඩනැගිලි ඉදිකිරීම අවසන් - කොන්ක්රීට්
අතුරුමුහුණත
සාරාංශය
දුර්ගා ජොබ්ස් වෙබ් අඩවියෙන් ලබා ගන්නා ලදි
මෙම ප්රශ්නය නැවත සකස් කරමු:
ඔබට දැනුම් දිය යුතු පළමු දෙය නම් 1/1 සහ 1 * 1 ප්රති results ල එකම ප්රති in ලයක් වන නමුත් එයින් අදහස් කරන්නේ ගුණ කිරීම හා බෙදීම එක හා සමාන නොවන බවයි. නිසැකවම, ඔවුන් යම් හොඳ සම්බන්ධතාවයක් පවත්වයි, නමුත් ඔබ දෙදෙනාම වෙනස් බව මතක තබා ගන්න.
මම ප්රධාන වෙනස්කම් පෙන්වා දෙන්නෙමි, ඉතිරිය දැනටමත් පැහැදිලි කර ඇත:
පන්ති ධූරාවලියක් ආකෘතිකරණය කිරීම සඳහා වියුක්ත පන්ති ප්රයෝජනවත් වේ. ඕනෑම අවශ්යතාවයක් බැලූ බැල්මට, හරියටම ඉදි කළ යුත්තේ කුමක් ද යන්න පිළිබඳව අපි අර්ධ වශයෙන් පැහැදිලිය , නමුත් ගොඩනඟා ගත යුතු දේ අපි දනිමු . එබැවින් ඔබේ වියුක්ත පන්ති ඔබේ මූලික පන්ති වේ.
මට කළ හැකි දේ වෙනත් ධූරාවලියකට හෝ පන්තිවලට දැන ගැනීමට අතුරු මුහුණත් ප්රයෝජනවත් වේ. මට යමක් කිරීමට හැකියාවක් ඇතැයි ඔබ කියන විට, ඔබට එම හැකියාව තිබිය යුතුය. එකම ක්රියාකාරීත්වයක් ක්රියාත්මක කිරීම පන්තියකට අනිවාර්ය බව අතුරුමුහුණත් සලකුණු කරයි.
ඇත්තෙන්ම එය ඉතා සරල ය.
ඔබට අතුරු මුහුණතක් වියුක්ත ක්රම පමණක් තිබිය හැකි අතර වෙන කිසිවක් නැත.
එබැවින් අතුරු මුහුණතකට "ප්රකාශ කිරීම" පමණක් කළ හැකි අතර ඔබට පන්තියට අවශ්ය හැසිරීම අර්ථ දැක්විය නොහැක.
වියුක්ත පංතියක් මඟින් ඔබට ප්රකාශ කිරීමට (වියුක්ත ක්රම භාවිතා කිරීමට) මෙන්ම පන්තියට අවශ්ය හැසිරීම නිර්වචනය කිරීමට (සම්පූර්ණ ක්රම ක්රියාත්මක කිරීම භාවිතා කිරීමට) ඉඩ ලබා දේ.
සාමාන්ය පන්තියක් මඟින් ඔබට පන්තියට අවශ්ය හැසිරීම / ක්රියා නිර්වචනය කිරීමට, ප්රකාශ කිරීමට පමණක් ඉඩ නොදේ.
අන්තිම එක,
ජාවා හි, ඔබට බහු අතුරුමුහුණත් ක්රියාත්මක කළ හැකිය, නමුත් ඔබට දිගු කළ හැක්කේ එකක් (වියුක්ත පන්තිය හෝ පන්තිය) පමණි ...
මෙයින් අදහස් කරන්නේ නිර්වචනය කරන ලද හැසිරීම් වල උරුමය එක් පන්තියකට එක් අයෙකුට පමණක් ඉඩ දීම සඳහා සීමා කර ඇති බවයි ... එනම් ඔබට A, B සහ C පන්ති වලින් හැසිරීම සංවර්ධනය කරන පන්තියක් අවශ්ය නම් ඔබට පහත සඳහන් දේ කළ යුතුය: A පන්තිය B දක්වා විහිදේ, පංතිය C දීර් A කරයි .. බහුවිධ උරුමයක් ලබා ගැනීම සඳහා එය ටිකක් වටය ...
අනෙක් අතට අතුරුමුහුණත්, ඔබට සරලවම කළ හැකිය: අතුරු මුහුණත C මඟින් A, B ක්රියාත්මක කරයි
එබැවින්, ජාවා බහු උරුමයට සහය දක්වන්නේ “ප්රකාශිත හැසිරීම” එනම් අතුරුමුහුණත් තුළ පමණක් වන අතර, අර්ථ දක්වා ඇති හැසිරීම් සහිත තනි උරුමයක් පමණි .. මා විස්තර කළ ආකාරයට ඔබ එය නොකරන්නේ නම් ...
බලාපොරොත්තුවෙන් එය අර්ථවත් කරයි.
අතුරුමුහුණත එදිරිව වියුක්ත පන්තිය සංසන්දනය කිරීම වැරදිය. ඒ වෙනුවට තවත් සැසඳීම් දෙකක් තිබිය යුතුය: 1) අතුරුමුහුණත එදිරිව පන්තිය සහ 2) වියුක්ත එදිරිව අවසාන පන්තිය .
අතුරුමුහුණත යනු වස්තු දෙකක් අතර ගිවිසුමක් වේ. උදා: මම තැපැල් ස්ථානාධිපතිවරයෙක් වන අතර ඔබ ලබා දීමට පැකේජයකි. ඔබේ බෙදාහැරීමේ ලිපිනය ඔබ දැන ගනු ඇතැයි මම බලාපොරොත්තු වෙමි. කවුරුහරි මට පැකේජයක් ලබා දුන් විට, එහි බෙදා හැරීමේ ලිපිනය දැනගත යුතුය:
interface Package {
String address();
}
පංතිය යනු කොන්ත්රාත්තුවට අවනත වන වස්තු සමූහයකි. උදා: මම "කොටුව" කණ්ඩායමේ පෙට්ටියක් වන අතර තැපැල්කරුට අවශ්ය කොන්ත්රාත්තුවට මම අවනත වෙමි. ඒ සමඟම මම වෙනත් ගිවිසුම් වලට අවනත වෙමි:
class Box implements Package, Property {
@Override
String address() {
return "5th Street, New York, NY";
}
@Override
Human owner() {
// this method is part of another contract
}
}
වියුක්ත පන්තිය යනු අසම්පූර්ණ වස්තු සමූහයකි. සමහර කොටස් මග හැරී ඇති නිසා ඒවා භාවිතා කළ නොහැක. උදා, මම වියුක්ත ජීපීඑස් දැනුවත් කොටුවක් - සිතියමේ මගේ ස්ථානය පරීක්ෂා කරන්නේ කෙසේදැයි මම දනිමි:
abstract class GpsBox implements Package {
@Override
public abstract String address();
protected Coordinates whereAmI() {
// connect to GPS and return my current position
}
}
මෙම පන්තිය වෙනත් පන්තියකින් උරුම වී / දීර් extended කර ඇත්නම් එය ඉතා ප්රයෝජනවත් වේ. නමුත් තනිවම - එය නිෂ් less ල ය, එයට වස්තු තිබිය නොහැකි බැවින්. වියුක්ත පන්ති යනු අවසාන පංතිවල අංගයන් විය හැකිය.
අවසාන පන්තිය යනු සම්පූර්ණ වස්තු සමූහයකි, ඒවා භාවිතා කළ හැකි නමුත් වෙනස් කළ නොහැක. ඔවුන් හරියටම වැඩ කරන්නේ කෙසේද සහ කළ යුතු දේ දනී. උදා, මම එය තැනීමේදී නිශ්චිතව දක්වා ඇති ලිපිනයට යන පෙට්ටියක්:
final class DirectBox implements Package {
private final String to;
public DirectBox(String addr) {
this.to = addr;
}
@Override
public String address() {
return this.to;
}
}
ජාවා හෝ සී ++ වැනි බොහෝ භාෂාවල පංතියක් පමණක් තිබිය හැකිය වියුක්ත හෝ අවසාන . එවැනි පංතියක් උරුම කර ගත හැකි අතර එය ක්ෂණිකව කළ හැකිය. මම හිතන්නේ නැහැ මෙය වස්තූන් මත පදනම් වූ පරමාදර්ශයට අනුකූල බව.
නැවතත්, වියුක්ත පන්ති සමඟ අතුරුමුහුණත් සංසන්දනය කිරීම නිවැරදි නොවේ.
කෙටියෙන් කිවහොත් වෙනස්කම් පහත දැක්වේ:
අතුරුමුහුණත සහ වියුක්ත පන්තිය අතර සින්ටැක්ටිකල් වෙනස්කම් :
දැන් අතුරුමුහුණත් තුළ:
public static
- සහාය
public abstract
- සහාය
public default
- සහාය
private static
- සහාය
private abstract
- සම්පාදක දෝෂය
private default
- සම්පාදක දෝෂය
private
- සහාය
එකම වෙනස නම් කෙනෙකුට බහු උරුමයකට සහභාගී විය හැකි අතර අනෙකාට නොහැකි ය.
අතුරු මුහුණතක අර්ථ දැක්වීම කාලයත් සමඟ වෙනස් වී ඇත. ඔබ සිතන්නේ අතුරු මුහුණතක ක්රම ප්රකාශන පමණක් ඇති අතර එය ගිවිසුම් පමණක්ද? ස්ථිතික අවසාන විචල්යයන් ගැන කුමක් කිව හැකිද? ජාවා 8 න් පසු පෙරනිමි අර්ථ දැක්වීම් ගැන කුමක් කිව හැකිද?
බහු උරුමයක් සහිත දියමන්ති ගැටළුව නිසා ජාවා වෙත අතුරුමුහුණත් හඳුන්වා දෙන ලද අතර එය ඔවුන් සැබවින්ම කිරීමට අදහස් කරන්නේ එයයි.
අතුරුමුහුණත් යනු බහු උරුම ගැටලුව මඟහරවා ගැනීම සඳහා නිර්මාණය කරන ලද අතර වියුක්ත ක්රම, පෙරනිමි අර්ථ දැක්වීම් සහ ස්ථිතික අවසාන විචල්යයන් තිබිය හැකිය.
බලන්න, ජාවා ගිවිසුම් පමණක් වීමට අදහස් කරන විට අතුරු මුහුණත් වල ස්ථිතික අවසාන විචල්යයන්ට ඉඩ දෙන්නේ ඇයි? .
අතුරුමුහුණත: හැරෙන්න (වමට හැරෙන්න, දකුණට හැරෙන්න.)
වියුක්ත පන්තිය: රෝදය.
පංතිය: සුක්කානම් රෝදය, රෝදයෙන් ව්යුත්පන්න වී ඇති අතර අතුරු මුහුණත හැරීම නිරාවරණය කරයි
එකක් නම් විවිධාකාර දේවල් හරහා ඉදිරිපත් කළ හැකි හැසිරීම් වර්ගීකරණය කිරීම සඳහා වන අතර අනෙක දේවල් පිළිබඳ ඔන්ටෝලොජි ආකෘතිකරණය සඳහා ය.
ඔබට බහු පන්ති භාවිතා කළ හැකි පොදු ක්රම කිහිපයක් තිබේ නම් වියුක්ත පන්ති සඳහා යන්න. පංති නිශ්චිත සැලැස්මක් අනුගමනය කිරීමට ඔබට අවශ්ය නම් අතුරු මුහුණත් සඳහා යන්න.
පහත උදාහරණ මගින් මෙය පෙන්නුම් කරයි.
ජාවා හි වියුක්ත පන්තිය:
abstract class animals
{
// They all love to eat. So let's implement them for everybody
void eat()
{
System.out.println("Eating...");
}
// The make different sounds. They will provide their own implementation.
abstract void sound();
}
class dog extends animals
{
void sound()
{
System.out.println("Woof Woof");
}
}
class cat extends animals
{
void sound()
{
System.out.println("Meoww");
}
}
ජාවා හි අතුරු මුහුණත ක්රියාත්මක කිරීම පහත දැක්වේ:
interface Shape
{
void display();
double area();
}
class Rectangle implements Shape
{
int length, width;
Rectangle(int length, int width)
{
this.length = length;
this.width = width;
}
@Override
public void display()
{
System.out.println("****\n* *\n* *\n****");
}
@Override
public double area()
{
return (double)(length*width);
}
}
class Circle implements Shape
{
double pi = 3.14;
int radius;
Circle(int radius)
{
this.radius = radius;
}
@Override
public void display()
{
System.out.println("O"); // :P
}
@Override
public double area()
{
return (double)((pi*radius*radius)/2);
}
}
කෙටියෙන් කෙටියෙන් වැදගත් කරුණු කිහිපයක්:
ජාවා අතුරුමුහුණතේ ප්රකාශිත විචල්යයන් පෙරනිමියෙන් අවසන් වේ. වියුක්ත පංතිවලට අවසාන නොවන විචල්යයන් තිබිය හැකිය.
ජාවා අතුරුමුහුණතේ ප්රකාශිත විචල්යයන් පෙරනිමියෙන් ස්ථිතික වේ. වියුක්ත පංතිවලට ස්ථිතික නොවන විචල්යයන් තිබිය හැකිය.
ජාවා අතුරුමුහුණතක සාමාජිකයින් පෙරනිමියෙන් පොදු වේ. ජාවා වියුක්ත පන්තියකට පුද්ගලික, ආරක්ෂිත වැනි පන්ති සාමාජිකයින්ගේ සුපුරුදු රසයන් තිබිය හැකිය.
බොහෝ කනිෂ් develop සංවර්ධකයින් එකම දේවල සුළු වෙනස්කම් ලෙස අතුරුමුහුණත්, වියුක්ත හා කොන්ක්රීට් පංති ගැන සිතීමේ වැරැද්ද සිදු කරන අතර, ඉන් එකක් තාක්ෂණික හේතුන් මත පමණක් තෝරා ගන්න: මට බහු උරුමයක් අවශ්යද? පොදු ක්රම තැබීමට මට යම් ස්ථානයක් අවශ්යද? කොන්ක්රීට් පංතියක් හැර වෙනත් දෙයක් ගැන මට කරදර විය යුතුද? මෙය වැරදියි, මෙම ප්රශ්න වල සැඟවී ඇති ප්රධාන ගැටළුව: "මම" . ඔබ ඔබ වෙනුවෙන් කේතයක් ලියන විට, ඔබ විසින්ම, ඔබේ කේතය සමඟ හෝ වැඩ කරන වෙනත් වර්තමාන හෝ අනාගත සංවර්ධකයින් ගැන ඔබ සිතන්නේ කලාතුරකිනි.
අතුරුමුහුණත් සහ වියුක්ත පංති, තාක්ෂණික දෘෂ්ටි කෝණයකින් පෙනෙන පරිදි සමාන වුවත්, සම්පූර්ණයෙන්ම වෙනස් අර්ථයන් සහ අරමුණු ඇත.
යම් ක්රියාත්මක කිරීමක් ඔබ වෙනුවෙන් ඉටු කරන කොන්ත්රාත්තුවක් අතුරු මුහුණතක් අර්ථ දක්වයි .
වියුක්ත පන්ති පෙරනිමි හැසිරීම සපයයි බව ඔබේ ක්රියාත්මක කිරීම නැවත භාවිත කළ හැකිය.
කොන්ක්රීට් පංතියක් සැබෑ වැඩ කරන්නේ ඉතා නිශ්චිත ආකාරයකින් ය. නිදසුනක් ලෙස, ArrayList
වේගවත් අහඹු ප්රවේශයක්, පුනරාවර්තනයක් සහ ස්ථානීය වෙනස්කම් ලබා දෙන සංයුක්ත ආකාරයකින් වස්තු ලැයිස්තුවක් ගබඩා කිරීම සඳහා පරස්පර මතක ප්රදේශයක් භාවිතා කරයි, නමුත් ඇතුළත් කිරීම්, මකාදැමීම් සහ ඉඳහිට එකතු කිරීම් වලදී එය භයානක ය; මේ අතර, LinkedList
වස්තූන් ලැයිස්තුවක් ගබඩා කිරීම සඳහා ද්වි-සම්බන්ධිත නෝඩ් භාවිතා කරයි, ඒ වෙනුවට වේගවත් ක්රියාකාරීත්වය, ස්ථානීය වෙනස්කම්, සහ ඇතුළු කිරීම / මකාදැමීම / එකතු කිරීම ලබා දෙයි, නමුත් අහඹු ලෙස ප්රවේශවීමේදී එය භයානක ය. මෙම වර්ග දෙකේ ලැයිස්තු විවිධ භාවිත අවස්ථා සඳහා ප්රශස්තිකරණය කර ඇති අතර, ඔබ ඒවා භාවිතා කරන්නේ කෙසේද යන්න වැදගත් වේ. ඔබ දැඩි ලෙස අන්තර්ක්රියා කරන ලැයිස්තුවකින් කාර්ය සාධනය මිරිකීමට උත්සාහ කරන විට, සහ ලැයිස්තුවේ වර්ගය තෝරා ගැනීමේදී ඔබ සතුව ඇති විට, ඔබ ක්ෂණිකව තෝරා ගන්නේ කුමන එකක් දැයි ප්රවේශමෙන් තෝරා ගත යුතුය.
අනෙක් අතට, ලැයිස්තුවක් ඉහළ මට්ටමේ භාවිතා කරන්නන් එය සැබවින්ම ක්රියාත්මක කරන්නේ කෙසේද යන්න ගැන තැකීමක් නොකරන අතර ඔවුන් මෙම විස්තර වලින් පරිවරණය කළ යුතුය. ජාවා List
අතුරුමුහුණත නිරාවරණය නොකළේ යැයි සිතමු , නමුත් දැන් ඇත්තේ කොන්ක්රීට් List
පංතියක් පමණි LinkedList
. සියලුම ජාවා සංවර්ධකයින් ක්රියාත්මක කිරීමේ තොරතුරු වලට සරිලන පරිදි ඔවුන්ගේ කේතය සකස් කර ගනු ඇත: අහඹු ලෙස ප්රවේශ වීම වළක්වා ගන්න, ප්රවේශය වේගවත් කිරීම සඳහා හැඹිලියක් එක් කරන්න, නැතහොත් ArrayList
ඒවා තනිවම ප්රතිනිර්මාණය කරන්න, එය ඇත්ත වශයෙන්ම ක්රියාත්මක වන අනෙක් සියලුම කේත සමඟ නොගැලපේ.List
. එය භයානක වනු ඇත ... නමුත් දැන් සිතන්න ජාවා ස්වාමිවරුන් සැබවින්ම සම්බන්ධිත ලැයිස්තුවක් බොහෝ සත්ය භාවිත අවස්ථා සඳහා භයානක බව වටහාගෙන ඇති අතර ඔවුන්ගේ එකම සඳහා අරාව ලැයිස්තුවකට මාරුවීමට තීරණය කළේය.List
පන්තිය ඇත. මෙය ලෝකයේ සෑම ජාවා වැඩසටහනකම ක්රියාකාරීත්වයට බලපානු ඇති අතර මිනිසුන් ඒ ගැන සතුටු නොවනු ඇත. ප්රධාන වැරදිකරු වන්නේ ක්රියාත්මක කිරීමේ තොරතුරු ලබා ගත හැකි වීම සහ සංවර්ධකයින් උපකල්පනය කළේ එම තොරතුරු ඔවුන්ට විශ්වාසය තැබිය හැකි ස්ථිර කොන්ත්රාත්තුවක් බවයි. ක්රියාත්මක කිරීමේ තොරතුරු සැඟවීම වැදගත් වන අතර වියුක්ත කොන්ත්රාත්තුවක් පමණක් අර්ථ දක්වන්න. මෙය අතුරුමුහුණතක අරමුණයි: අනාගත යාවත්කාලීනයන් සමඟ වෙනස් විය හැකි අභ්යන්තර තොරතුරු වලට සරිලන පරිදි ක්රමලේඛකයන්ට ඔවුන්ගේ කේතය වෙනස් කිරීමට පෙළඹවිය හැකි සියලු ධෛර්යයන් හෙළි නොකර, ක්රමයක් පිළිගන්නේ කුමන ආකාරයේ ආදානයක්ද සහ කුමන ආකාරයේ ප්රතිදානයක්ද යන්න නිර්වචනය නොකරන්න. .
වියුක්ත පංතියක් අතුරුමුහුණත් සහ කොන්ක්රීට් පන්ති අතර මැද වේ. එය ක්රියාත්මක කිරීමට පොදු හෝ කම්මැලි කේත බෙදා ගැනීමට උපකාරී වේ. නිදසුනක් ලෙස, ප්රමාණය මත පදනම්ව AbstractCollection
මූලික ක්රියාත්මක කිරීම් isEmpty
0 වේ, නැවත නැවත contains
සංසන්දනය කරන විට, addAll
පුනරාවර්තනය add
වන පරිදි යනාදිය. මෙය ක්රියාත්මක කිරීමට ඒවා අතර වෙනස හඳුනා ගන්නා තීරණාත්මක කොටස් කෙරෙහි අවධානය යොමු කිරීමට ඉඩ දෙයි: දත්ත සැබවින්ම ගබඩා කරන්නේ කෙසේද සහ ලබා ගන්නේ කෙසේද.
අතුරුමුහුණත් යනු කේතයේ විවිධ කොටස් අතර අඩු සංයුක්ත ද්වාරයකි . අභ්යන්තරව යමක් වෙනස් වූ විට සෑම පුස්තකාල පරිශීලකයෙකුම බිඳ නොගෙන පුස්තකාල පැවතීමට හා පරිණාමය වීමට ඒවා ඉඩ දෙයි. එය හැඳින්වෙන්නේ යෙදුම් ක්රමලේඛන අතුරුමුහුණත මිස යෙදුම් ක්රමලේඛන පන්ති නොවේ. කුඩා පරිමාණයෙන්, විවිධ මොඩියුලයන් මනාව ලේඛනගත අතුරුමුහුණත් හරහා වෙන් කිරීමෙන් මහා පරිමාණ ව්යාපෘති සඳහා සාර්ථකව සහයෝගයෙන් කටයුතු කිරීමට බහු සංවර්ධකයින්ට ඉඩ දෙයි.
ඒ සමගම සාරාංශ පන්ති ඉහළ කෙසෙද? වේ කාරයෙක් ක්රියාත්මක කිරීම තොරතුරු යම් මට්ටමක උපකල්පනය අතුරු මුහුණතක් ක්රියාත්මක කරන විට භාවිතා කළ යුතුය. විකල්පයක් ලෙස, එස්පීඅයි, සේවා සැපයුම් අතුරුමුහුණත් නිර්වචනය කිරීම සඳහා වියුක්ත පන්ති භාවිතා කරයි.
ඒපීඅයි සහ එස්පීඅයි අතර වෙනස සියුම් ය, නමුත් වැදගත් ය: ඒපීඅයි සඳහා, අවධානය යොමු කරන්නේ එය භාවිතා කරන්නේ කවුරුන්ද යන්න සහ එස්පීඅයි සඳහා අවධානය යොමු කරන්නේ එය ක්රියාත්මක කරන්නේ කවුරුන්ද යන්නයි.
API එකකට ක්රම එකතු කිරීම පහසුය, දැනට පවතින API භාවිතා කරන්නන් සියල්ලම සම්පාදනය කරනු ඇත. සෑම සේවා සැපයුම්කරුවෙකුටම (කොන්ක්රීට් ක්රියාත්මක කිරීම) නව ක්රම ක්රියාත්මක කිරීමට සිදුවන බැවින්, SPI සඳහා ක්රම එකතු කිරීම දුෂ්කර ය. SPI නිර්වචනය කිරීම සඳහා අතුරුමුහුණත් භාවිතා කරන්නේ නම්, SPI කොන්ත්රාත්තුව වෙනස් වන සෑම විටම සැපයුම්කරුවෙකුට නව අනුවාදයක් නිකුත් කිරීමට සිදුවේ. ඒ වෙනුවට වියුක්ත පංති භාවිතා කරන්නේ නම්, නව ක්රම එක්කෝ පවත්නා වියුක්ත ක්රම අනුව හෝ හිස් throw not implemented exception
කඳන් ලෙස අර්ථ දැක්විය හැකිය , එමඟින් අවම වශයෙන් සේවා ක්රියාත්මක කිරීමේ පැරණි අනුවාදයක් සම්පාදනය කර ක්රියාත්මක කිරීමට ඉඩ දෙනු ඇත.
ජාවා 8 අතුරුමුහුණත් සඳහා පෙරනිමි ක්රම හඳුන්වා දුන්නද, එය අතුරුමුහුණත් සහ වියුක්ත පංති අතර රේඛාව බොඳ කරයි, නමුත් මෙය ක්රියාත්මක කිරීම මඟින් කේත නැවත භාවිතා කළ හැකි නොවේ, නමුත් ඒපීඅයි සහ එස්පීඅයි ලෙස සේවය කරන අතුරු මුහුණත් වෙනස් කිරීම පහසු කරයි. (හෝ වියුක්ත පන්ති වෙනුවට SPIs අර්ථ දැක්වීම සඳහා වැරදි ලෙස භාවිතා කරයි).
සහසම්බන්ධය: අනෙක් පැත්ත බොහෝ විට වැරදියට සිදු වේ: යමක් භාවිතා කරන විට , ඔබට සැබවින්ම අවශ්ය වන වඩාත් සාමාන්ය පන්තිය / අතුරුමුහුණත භාවිතා කිරීමට සැමවිටම උත්සාහ කරන්න. වෙනත් වචන වලින් කිවහොත්, ඔබේ විචල්යයන් අරාව ලැයිස්තුවක් ලෙස ArrayList theList = new ArrayList()
සැබවින්ම රඳා පැවතීම මිස වෙනත් විචල්යයන් ලෙස ප්රකාශ නොකරන්න , වෙනත් කිසිදු ලැයිස්තුවක් ඔබ වෙනුවෙන් එය කපා නොදමනු ඇත. ඒ වෙනුවට භාවිතා කරන්න , නැතහොත් එය ලැයිස්තුවක් වුවද වෙනත් කිසිම ආකාරයක එකතුවක් ඇත්ත වශයෙන්ම වැදගත් නොවේ.List theList = new ArrayList
Collection theCollection = new ArrayList
මුල් ප්රශ්නයට ඇත්ත වශයෙන්ම පිළිතුර නොවේ, නමුත් ඔබ ඒවා අතර ඇති වෙනසට පිළිතුරක් ලැබීමෙන් පසු, ඔබ භාවිතා කළ යුතු සෑම උභතෝකෝටිකයක්ම ඇතුළත් කරනු ඇත: අතුරුමුහුණත් හෝ වියුක්ත පන්ති භාවිතා කරන්නේ කවදාද? දෙකම භාවිතා කළ යුත්තේ කවදාද?
මට OOP පිළිබඳ සීමිත දැනුමක් ඇත, නමුත් ව්යාකරණයේ නාමවිශේෂණයකට සමාන අතුරු මුහුණත් දැකීම මේ දක්වා මා වෙනුවෙන් වැඩ කර ඇත (මෙම ක්රමය ව්යාජ නම් මාව නිවැරදි කරන්න!). උදාහරණයක් ලෙස, අතුරුමුහුණත් නම් ඔබට පන්තියකට ලබා දිය හැකි ගුණාංග හෝ හැකියාවන් හා සමාන වන අතර පන්තියකට ඒවායින් බොහොමයක් තිබිය හැකිය: ISerializable, ICountable, IList, ICacheable, IHappy, ...
උරුමය අරමුණු දෙකක් සඳහා භාවිතා වේ:
මව්-වර්ගයේ දත්ත සාමාජිකයන් සහ ක්රම ක්රියාත්මක කිරීම තමන්ගේම යැයි සැලකීමට වස්තුවකට ඉඩ දීම.
එක් වර්ගයක වස්තුවක් සඳහා සුපර් ටයිප් වස්තුවක් වෙත යොමු කිරීමක් අපේක්ෂා කරන කේතයක් භාවිතා කිරීමට ඉඩ දීම.
සාමාන්යකරණය කරන ලද බහු උරුමයට සහාය දෙන භාෂා / රාමු වලදී, වර්ගයක් “අතුරුමුහුණතක්” හෝ “වියුක්ත පන්තියක්” ලෙස වර්ගීකරණය කිරීමට බොහෝ විට අවශ්ය නොවේ. කෙසේවෙතත්, ජනප්රිය භාෂා සහ රාමු, වෙනත් වර්ගයක අත්තනෝමතික සංඛ්යාවක් සඳහා ආදේශ කිරීමට ඉඩ දුන්නද, එක් වර්ගයක දත්ත වර්ගයක් හෝ ක්රමවේදය ක්රියාත්මක කිරීම තමන්ගේම යැයි සැලකීමට ඉඩ දෙයි.
වියුක්ත පංතිවල දත්ත සාමාජිකයන් සහ ක්රම ක්රියාත්මක කිරීම් තිබිය හැකි නමුත් උරුම කර ගත හැක්කේ වෙනත් කිසිදු පන්තියකින් උරුම නොවන පන්තිවලට පමණි. අතුරුමුහුණත් මඟින් ඒවා ක්රියාත්මක කරන වර්ග වලට කිසිදු සීමාවක් නොමැත, නමුත් දත්ත සාමාජිකයන් හෝ ක්රම ක්රියාත්මක කිරීම් ඇතුළත් කළ නොහැක.
විවිධ දේ සඳහා ආදේශ කළ හැකි වර්ග සඳහා ප්රයෝජනවත් වන අවස්ථා තිබේ; මව්-වර්ගයේ දත්ත සාමාජිකයන් සහ ක්රම ක්රියාත්මක කිරීම තමන්ගේම යැයි සැලකීම වස්තූන් සඳහා ප්රයෝජනවත් වන වෙනත් අවස්ථා තිබේ. අතුරුමුහුණත් සහ වියුක්ත පංති අතර වෙනසක් කිරීම එම හැකියාවන් වඩාත් අදාළ අවස්ථාවන්හිදී භාවිතා කිරීමට ඉඩ දෙයි.
ප්රධාන කරුණු:
වාසිය:
විස්තර මෙතැනින් සොයා ගන්න ... http://pradeepatkari.wordpress.com/2014/11/20/interface-and-abstract-class-in-c-oops/
එය සාරාංශගත කළ හැකි කෙටිම ක්රමය interface
නම්:
default
සහ static
ක්රම; එයට නිර්වචන (ක්රම අත්සන් + ක්රියාත්මක කිරීම) default
සහ static
ක්රම ඇති අතර, එය සතුව ඇත්තේ වෙනත් ක්රම සඳහා ප්රකාශන (ක්රම අත්සන්) පමණි.interface
s ක්රියාත්මක interface
කළ හැකි අතර, බහු interface
s වලින් උරුම විය හැකිය ). නිශ්චිතව දක්වා තිබුණත් නැතත් සියලු විචල්යයන් ව්යංගයෙන් නියත public static final
වේ. සියලුම සාමාජිකයන් public
නිශ්චිතව දක්වා තිබුණත් නැතත් ව්යංගයෙන් .මේ අතර, abstract
පන්තියක් වන්නේ:
abstract
ක්රම එකක් හෝ කිහිපයක් තිබීමේ ප්රවණතාවක් ඇති, සම්පූර්ණ වියුක්තයේ සිට පූර්ණ ලෙස ක්රියාත්මක වන ඕනෑම තැනක . ප්රකාශන ලෙස සලකුණු කර ඇති ප්රකාශ සහ අර්ථ දැක්වීම් යන දෙකම අඩංගු විය හැකියabstract
.protected
, private
හෝ (සඳහන් නොකළ) පෞද්ගලික පැකේජය.හෝ, අප සියලු බැස තනි වාක්යයක් කිරීමට එය සීඝ්රයෙන් කිරීමට අවශ්ය නම්: ඇන් interface
ක්රියාත්මක පන්ති දේ ඇත , නමුත් abstract
පන්තිය උපපංතිය දේ වේ .
අර්ථවත් වන තවත් වෙනසක් එක් කිරීමට මම කැමතියි. උදාහරණයක් ලෙස, ඔබට කේත පේළි දහස් ගණනක් සහිත රාමුවක් ඇත. දැන් ඔබට වැඩි දියුණු කිරීමේ ක්රමයක් භාවිතා කරමින් කේතය පුරා නව අංගයක් එක් කිරීමට අවශ්ය නම්, එම ක්රමය අතුරු මුහුණතේ නොව වියුක්ත පන්තියේ එකතු කිරීම වඩා හොඳය. මන්ද, ඔබ මෙම ක්රමය අතුරු මුහුණතක එකතු කළහොත් ඔබ එය ක්රියාත්මක කරන ලද සියලුම පන්තියේ ක්රියාත්මක කළ යුතු නමුත් ඔබ එම ක්රමය වියුක්ත පන්තියේ එකතු කළහොත් එය එසේ නොවේ.
සරල නමුත් පැහැදිලි පිළිතුරක් ලබා දීම සඳහා, එය සන්දර්භය සැකසීමට උපකාරී වේ: සම්පූර්ණ ක්රියාත්මක කිරීම් ලබා දීමට ඔබට අවශ්ය නැති විට ඔබ දෙකම භාවිතා කරයි.
එවිට ඇති ප්රධාන වෙනස නම් අතුරු මුහුණතක් කිසිසේත්ම ක්රියාත්මක නොකිරීමයි (ශරීරයක් නොමැති ක්රම පමණි) වියුක්ත පංතිවලට ශරීරයක් සමඟ සාමාජිකයන් හා ක්රම තිබිය හැකිය, එනම් අර්ධ වශයෙන් ක්රියාත්මක කළ හැකිය.
default
ජාවා 8 හි ඇති මූලික පදය සැලකිල්ලට නොගනී, එමඟින් ඔබට අතුරු මුහුණත් වල කොන්ක්රීට් ක්රම නිර්වචනය කළ හැකිය.
සැබෑ ක්රියාත්මක කිරීම වෙනුවෙන් වියුක්ත පන්තිය සහ අතුරු මුහුණත අතර වෙනස්කම්.
අතුරුමුහුණත : එය යතුරු පදයක් වන අතර එය වස්තුවක අච්චුව හෝ නිල් මුද්රණය නිර්වචනය කිරීමට භාවිතා කරන අතර එය සියලු උප පංති එකම මූලාකෘතියක් අනුගමනය කරන ලෙස බල කරයි. ක්රියාත්මක කිරීමේදී සියලු උප පංති වලට අනුව ක්රියාකාරීත්වය ක්රියාත්මක කිරීමට නිදහස ඇත. එය අවශ්යතාවයයි.
අප අතුරු මුහුණත භාවිතා කළ යුතු වෙනත් භාවිත අවස්ථා කිහිපයක්.
බාහිර වස්තු දෙකක් අතර සන්නිවේදනය (අපගේ යෙදුමේ තෙවන පාර්ශවීය ඒකාබද්ධතාවය) මෙහි අතුරු මුහුණත හරහා සිදු කෙරේ. අතුරු මුහුණත කොන්ත්රාත්තුවක් ලෙස ක්රියා කරයි.
සාරාංශ පංතිය: සාරාංශය, එය මූල පදයක් වන අතර ඕනෑම පංතියකට පෙර අප මෙම මූල පදය භාවිතා කරන විට එය වියුක්ත පංතියක් බවට පත්වේ. එය ප්රධාන වශයෙන් භාවිතා කරනුයේ අච්චුව නිර්වචනය කිරීමට අවශ්ය වන විට මෙන්ම වස්තුවක පෙරනිමි ක්රියාකාරිත්වයයි. උප පංති සහ මේ ආකාරයෙන් එය අතිරික්ත කේතය ඉවත් කරන අතර අපට වියුක්ත පංතිය භාවිතා කළ හැකි තවත් එක් භාවිත අවස්ථා, වෙනත් පංතිවලට පන්තියේ වස්තුවක් ක්ෂණිකව ක්ෂණිකව දැක්විය නොහැකි බැවින්, ව්යුත්පන්න පංතිවලට පමණක් ක්රියාකාරීත්වය භාවිතා කළ හැකිය.
වියුක්ත පන්තියේ උදාහරණය:
public abstract class DesireCar
{
//It is an abstract method that defines the prototype.
public abstract void Color();
// It is a default implementation of a Wheel method as all the desire cars have the same no. of wheels.
// and hence no need to define this in all the sub classes in this way it saves the code duplicasy
public void Wheel() {
Console.WriteLine("Car has four wheel");
}
}
**Here is the sub classes:**
public class DesireCar1 : DesireCar
{
public override void Color()
{
Console.WriteLine("This is a red color Desire car");
}
}
public class DesireCar2 : DesireCar
{
public override void Color()
{
Console.WriteLine("This is a red white Desire car");
}
}
අතුරු මුහුණතේ උදාහරණය:
public interface IShape
{
// Defines the prototype(template)
void Draw();
}
// All the sub classes follow the same template but implementation can be different.
public class Circle : IShape
{
public void Draw()
{
Console.WriteLine("This is a Circle");
}
}
public class Rectangle : IShape
{
public void Draw()
{
Console.WriteLine("This is a Rectangle");
}
}
අතුරු මුහුණත සහ වියුක්ත පන්තිය අතර පැහැදිලි වෙනසක් ඔබට සොයාගත හැකිය .
අතුරුමුහුණත
වියුක්ත පන්තිය
වියුක්ත පන්තියේ වියුක්ත හා වියුක්ත නොවන ක්රම අඩංගු වේ.
වියුක්ත පංතිය උරුම වූ විට සියලු ක්රම ක්රියාත්මක කිරීමට පරිශීලකයින්ට බල නොකරයි.
ප්රාථමික සහ ප්රාථමික නොවන ඇතුළු සියලු වර්ගවල විචල්යයන් අඩංගු වේ
වියුක්ත යතුරුපදය භාවිතා කරමින් ප්රකාශ කරන්න.
වියුක්ත පංතියක ක්රම සහ සාමාජිකයන් ඕනෑම දෘශ්යතාවයකින් අර්ථ දැක්විය හැකිය.
ළමා පන්තියකට දිගු කළ හැක්කේ තනි පන්තියක් (වියුක්ත හෝ කොන්ක්රීට්) පමණි.
වියුක්ත පංතියක් යනු වස්තුවක් නිර්මාණය කළ නොහැකි හෝ ක්ෂණිකව කළ නොහැකි පන්තියකි. වියුක්ත ක්රමයක් මඟින් පන්තියක් වියුක්ත කරයි. වියුක්ත පංතියේ ප්රකාශිත ක්රම ඉක්මවා යාම සඳහා වියුක්ත පන්තියක් උරුම කර ගත යුතුය. ප්රවේශ පිරිවිතරයන්ට කිසිදු සීමාවක් නොමැත. වියුක්ත පංතියකට ඒවා තුළ ඉදිකිරීම්කරු සහ වෙනත් කොන්ක්රීට් (වියුක්ත නොවන ක්රම) ක්රම තිබිය හැකි නමුත් අතුරු මුහුණතට තිබිය නොහැක.
අතුරුමුහුණතක් යනු ක්රමලේඛ සැලැස්මක් / අච්චුවකි. (උදා: කඩදාසි මත නිවසක් ලබා දී ඇත (අතුරුමුහුණත් නිවස) සහ විවිධ ගෘහ නිර්මාණ ශිල්පීන් එය ගොඩනඟා ගැනීම සඳහා ඔවුන්ගේ අදහස් භාවිතා කරනු ඇත (ගෘහ අතුරු මුහුණත ක්රියාත්මක කරන ගෘහ නිර්මාණ ශිල්පීන්ගේ පන්ති) එය එකතුවකි වියුක්ත ක්රම, පෙරනිමි ක්රම, ස්ථිතික ක්රම, අවසාන විචල්යයන් සහ කැදැලි පන්ති. සියලුම සාමාජිකයන් අවසාන හෝ පොදු, ආරක්ෂිත සහ පුද්ගලික ප්රවේශ පිරිවිතරයන්ට ඉඩ නොදේ. වස්තු නිර්මාණය කිරීමට අවසර නැත. භාවිතා කිරීම සඳහා පන්තියක් සෑදිය යුතුය. අතුරුමුහුණත ක්රියාත්මක කිරීම සහ අතුරු මුහුණතේ ප්රකාශිත වියුක්ත ක්රමවේදය අභිබවා යාම. අතුරු මුහුණතක් යනු ලිහිල් සම්බන්ධතාවයට හොඳ උදාහරණයකි (ගතික බහුමාපකය / ගතික බන්ධනය) අතුරු මුහුණතක් බහුමාපකය හා වියුක්තකරණය ක්රියාත්මක කරයි. ක්රියාත්මක කිරීමේ පන්තිය, උදා.sa කාර් සමාගමක් වන අතර, එය නිෂ්පාදනය කරන සියලුම මෝටර් රථ සඳහා සමහර විශේෂාංග සමාන විය යුතු අතර එමඟින් සමාගම විසින් අතුරු මුහුණත් වාහනයක් නිපදවනු ඇති අතර එමඟින් එම අංගයන්ගෙන් සමන්විත වන අතර විවිධ වර්ගයේ මෝටර් රථ (මරුටි සුස්කි, මරුටි 800 වැනි) අභිබවා යනු ඇත. එම ලක්ෂණ (කාර්යයන්).
අපට දැනටමත් වියුක්ත පංතියක් ඇති විට අතුරු මුහුණතක් ඇයි? ජාවා සහාය දක්වන්නේ බහු මට්ටමේ සහ ධූරාවලි උරුමයට පමණි, නමුත් අතුරු මුහුණතේ ආධාරයෙන් අපට බහු උරුමයක් ක්රියාත්මක කළ හැකිය.
ප්රායෝගිකත්වය අනුව (ජාවා), වියුක්ත පන්තිය සහ අතුරුමුහුණත අතර ඇති ප්රධාන වෙනස වන්නේ වියුක්ත පන්තියට තත්වය රඳවා ගත හැකිය. රාජ්යය රඳවා තබා ගැනීමට අමතරව අපට අතුරු මුහුණත සමඟ විවේක මෙහෙයුම් ද ලබා ගත හැකිය.
අතුරුමුහුණතකදී සියලු ක්රම නිර්වචන පමණක් විය යුතුය, තනි එකක් ක්රියාත්මක නොකළ යුතුය.
නමුත් වියුක්ත පංතියක අර්ථ දැක්වීමක් සහිත වියුක්ත ක්රමයක් තිබිය යුතුය, නමුත් වෙනත් ක්රම ක්රියාත්මක කිරීමත් සමඟ වියුක්ත පන්තියේ විය හැකිය ...
අතුරුමුහුණත සහ වියුක්ත පන්තිය අතර අපට විවිධ ව්යුහාත්මක / සින්ටැක්ටිකල් වෙනසක් ඇත. තවත් වෙනස්කම් කිහිපයක් තිබේ
[1] සිදුවීම පදනම් කරගත් වෙනස :
මව් පංතියේ වස්තුවක් නිර්මාණය කිරීම සඳහා පරිශීලකයා සීමා කිරීමට අවශ්ය අවස්ථාවන්හිදී වියුක්ත පන්ති භාවිතා කරනු ලබන අතර අනාගතයේ දී තවත් වියුක්ත ක්රම එකතු වනු ඇතැයි අපි විශ්වාස කරමු.
සැපයීමට තවත් වියුක්ත ක්රමයක් ඉතිරි කළ නොහැකි බව අපට විශ්වාසයි නම් අතුරු මුහුණත භාවිතා කළ යුතුය. එවිට ප්රකාශයට පත් කරන්නේ අතුරු මුහුණතක් පමණි.
[2] සංකල්පීය වෙනස :
ඔව්, එය වියුක්ත පංතියක් බවට පත් කරන්නේ නම් සහ එය අතුරු මුහුණතක් බවට පත් කරන්නේ නම් "අනාගතයේ දී අපට තවත් වියුක්ත ක්රම ලබා දිය යුතුද?"
(ජාවා 1.7 වන තෙක් වඩාත් සුදුසු සහ වලංගු වේ)
සාමාන්යයෙන් වියුක්ත පංතිය යම් දෙයක හරය සඳහා භාවිතා කරන නමුත් පර්යන්ත එකතු කිරීම සඳහා භාවිතා කරන අතුරු මුහුණත.
ඔබට වාහනය සඳහා මූලික වර්ගයක් නිර්මාණය කිරීමට අවශ්ය විට ඔබ වියුක්ත පන්තිය භාවිතා කළ යුතු නමුත් වාහනයේ මූලික සංකල්පයේ කොටසක් නොවන යම් ක්රියාකාරීත්වයක් හෝ දේපලක් එක් කිරීමට අවශ්ය නම් ඔබ අතුරු මුහුණත භාවිතා කළ යුතුය, උදාහරණයක් ලෙස ඔබට "ToJSON ()" ශ්රිතය එක් කිරීමට අවශ්යය. .
අතුරුමුහුණතට වියුක්ත පන්තියට වඩා පුළුල් පරාසයක සාරාංශයක් ඇත. තර්ක සම්මත කිරීමේදී ඔබට මෙය දැකිය හැකිය. මෙම උදාහරණය බලන්න:
ඔබ වාහනය තර්කයක් ලෙස භාවිතා කරන්නේ නම්, ඔබට එහි ව්යුත්පන්න වර්ගයක් භාවිතා කළ හැකිය (බස් හෝ කාර්-එකම කාණ්ඩය-වාහන කාණ්ඩය). නමුත් ඔබ IMoveable අතුරුමුහුණත තර්කයක් ලෙස භාවිතා කරන විට ඔබට තවත් තේරීම් ඇත.