අතුරු මුහුණතක් සහ වියුක්ත පන්තියක් අතර වෙනස කුමක්ද?


1755

අතුරු මුහුණතක් සහ වියුක්ත පන්තියක් අතර වෙනස හරියටම කුමක්ද?


97
මෙය අතිශය පොදු සම්මුඛ පරීක්ෂණ ප්‍රශ්නයකි. වියුක්ත පංතියක් වෙනත් දේ සමඟ සසඳන විට විසඳුම් සඳහා භාවිතා වන්නේ කලාතුරකිනි. ඔයාගේ ප්‍රශ්නය මට සෆ්රාස්ට උදව් කළා.
කැටෝ

5
මෙම ප්‍රශ්නය අතුරු මුහුණත් පිළිබඳ සංකල්පය තේරුම් ගැනීමට ද උපකාරී වේ stackoverflow.com/q/8531292/1055241
gprathour

6
මම මෙම ප්‍රශ්නයේ PHP ටැගය ඉවත් කර ඇත්තෙමි, මන්ද පිළිතුරෙන් කිසිවක් පාහේ භාෂා විශේෂිත නොවන අතර ප්‍රශ්නයම භාෂාවට විශේෂිත නොවේ.
බ්‍රයිස්

2
c ++ හි දවසේදී අතුරු මුහුණතක් යනු සියලු ක්‍රම ක්‍රියාත්මක කිරීම් සහිත පිරිසිදු වියුක්ත පාදක පන්තියකි = 0. එක් ක්‍රමයක් = 0 නොවේ නම්, එය ක්‍රියාත්මක කිරීමක් ඇති අතර වියුක්ත පදනම තවදුරටත් පිරිසිදු නොවන අතර තවදුරටත් අතුරු මුහුණතක් නොමැත . බහුවිධ උරුමය පිරිසිදු වියුක්ත පදනමක් පමණක් භාවිතා කරන විට VMT ට අඩු නිරවද්‍යතාවයක් ඇතැයි මම සිතමි, නමුත් ඒවා තවදුරටත් පෙනෙන්නේ කෙසේදැයි මට මතක නැත, දිගු විය.
ජිම්

Answers:


2259

අතුරුමුහුණත්

අතුරුමුහුණතක් යනු කොන්ත්රාත්තුවකි : අතුරුමුහුණත ලියන පුද්ගලයා " ඒයි, මම ඒ ආකාරයට පෙනෙන දේවල් පිළිගනිමි " යනුවෙන් පවසන අතර අතුරු මුහුණත භාවිතා කරන පුද්ගලයා " හරි, මම ලියන පන්තිය ඒ ආකාරයෙන් පෙනේ " යනුවෙන් පවසයි.

අතුරු මුහුණතක් යනු හිස් කවචයකි . ක්රමවල ශරීරයක් නොමැති බව අඟවන ක්රමවල අත්සන් පමණක් ඇත. අතුරු මුහුණතට කිසිවක් කළ නොහැක. එය රටාවක් පමණි.

උදාහරණයක් ලෙස (ව්‍යාජ කේතය):

// 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__ ක්‍රම) ලෙස හඳුන්වන විශේෂ ක්‍රම අතර සංකලනයකි.

ක්‍රමලේඛනය සමඟ සුපුරුදු පරිදි, වෙනත් භාෂාවක න්‍යාය, පුහුණුව සහ පුහුණුව ඇත :-)


6
අතුරුමුහුණත් පිළිබඳ ප්‍රධාන කරුණ නම් පංතියක් කරන්නේ කුමක්ද යන්න ඔවුන් පවසන තරමට නොවේ, නමුත් විස්ලර්ට අවශ්‍ය වස්තූන් විස්ලර් අවශ්‍ය කේතයට ප්‍රයෝජනවත් කිරීමට ඉඩ දෙන්න. බොහෝ අවස්ථාවන්හීදී විස්ල් කළ හැකි දේ ලියන පුද්ගලයා හෝ විස්ලර් අවශ්‍ය පුද්ගලයා අතුරු මුහුණත ලියන පුද්ගලයා නොවන බව සලකන්න.
සුපර් කැට්

189
CPU පරිභෝජනය අතුරුමුහුණත් වල කැපී පෙනෙන වටිනාම ස්ථානය යැයි මම නොසිතමි.
ඩෑන් ලග්

5
@ ඊ-තෘප්තිය කරුණාකර CPU භාවිතය පිළිබඳ ඔබේ අදහස පැහැදිලි කළ හැකිද? වියුක්ත පංතිය පංතියක් වීම CPU භාවිතය වැඩි කරන්නේ ඇයි? ඔබ මෙහි සඳහන් කරන්නේ කුමන ආකාරයේ සොයා බැලීමක්ද?
ගීක්

36
@ ඊ-තෘප්තිය ජාවා 8 සමඟ, ඔබට අතුරු මුහුණත් වල පෙරනිමි ක්‍රම නිර්වචනය කළ හැකිය, එය වියුක්ත පංතිවල වියුක්ත නොවන ක්‍රම තිබීමට සමාන වේ. මෙම එකතු කිරීමත් සමඟ, වියුක්ත පංති සහ අතුරුමුහුණත අතර සැබෑ වෙනස මට තවදුරටත් දැකිය නොහැක. පංතිවලට බහු අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකි නමුත් එක් පන්තියක් පමණක් උරුම කර ගත හැකි බැවින් මා අතුරුමුහුණත් භාවිතා කළ යුතුය
Ogen

23
මම අතර සැසඳීමක් හිතන්නේ interfaceහා classසිට Head First Javaබව පැහැදිලි වේA class defines who you are, and an interface tells what roles you could play
LittleLittleQ

875

වියුක්ත පන්තියක් සහ අතුරු මුහුණතක් අතර ඇති ප්‍රධාන තාක්ෂණික වෙනස්කම් :

  • වියුක්ත පංතිවලට නියතයන්, සාමාජිකයන්, ක්‍රම කඳන් (ශරීරයක් නොමැති ක්‍රම) සහ නිර්වචනය කළ ක්‍රම තිබිය හැකි අතර අතුරු මුහුණත් වලට පැවතිය හැක්කේ නියත හා ක්‍රම මුරණ්ඩු පමණි .

  • වියුක්ත පංතියක ක්‍රම සහ සාමාජිකයන් ඕනෑම දෘශ්‍යතාවයකින් අර්ථ දැක්විය හැකි අතර අතුරු මුහුණතක සියලුම ක්‍රම අර්ථ දැක්විය යුතුය public(ඒවා පෙරනිමියෙන් පොදු ලෙස අර්ථ දැක්වේ).

  • වියුක්ත පංතියක් උරුම කර ගැනීමේදී, කොන්ක්‍රීට් ළමා පන්තියක් වියුක්ත ක්‍රම නිර්වචනය කළ යුතු අතර, වියුක්ත පන්තියකට තවත් වියුක්ත පංතියක් දීර් extend කළ හැකි අතර මව් පන්තියේ වියුක්ත ක්‍රම නිර්වචනය කළ යුතු නොවේ.

  • ඒ හා සමානව, වෙනත් අතුරු මුහුණතක් විස්තාරණය කරන අතුරු මුහුණතක් මව් අතුරු මුහුණතේ ක්‍රම ක්‍රියාත්මක කිරීම සඳහා වගකිව යුතු නොවේ . මෙයට හේතුව අතුරුමුහුණත් මඟින් කිසිදු ක්‍රියාත්මක කිරීමක් නිර්වචනය කළ නොහැකි වීමයි.

  • ළමා පන්තියකට එක් පන්තියක් (වියුක්ත හෝ කොන්ක්‍රීට්) පමණක් දිගු කළ හැකි අතර අතුරු මුහුණතක් දිගු කළ හැකි අතර පන්තියකට වෙනත් අතුරු මුහුණත් ක්‍රියාත්මක කළ හැකිය .

  • ළමා පංතියකට එකම හෝ අඩු සීමිත දෘශ්‍යතාවයකින් වියුක්ත ක්‍රම නිර්වචනය කළ හැකි අතර අතුරු මුහුණතක් ක්‍රියාත්මක කරන පන්තියකට එකම දෘශ්‍යතාවයකින් (පොදු) ක්‍රම නිර්වචනය කළ යුතුය.


123
මම හිතන්නේ මෙය හොඳම පිළිතුරයි, මන්ද එය සියලු ප්‍රධාන වෙනස්කම් ඉස්මතු කරයි. උදාහරණයක් ඇත්ත වශයෙන්ම අවශ්‍ය නොවේ.
ජෝෂුවා කේ

4
සාමාන්‍යයෙන් පන්ති සමඟ ඔබට වස්තුවක් ක්ෂණිකව ලබා ගත CANNOTහැකිය.
SASM

මම හිතුවේ අතුරු මුහුණත ක්‍රියාත්මක කරන පන්තියකට අතුරු මුහුණතේ ඇති සියලුම ක්‍රම නිර්වචනය කළ යුතු බවයි?
ජියාසි පරිශීලක

Ia ජියාසියුසර් වියුක්ත පන්තියක් අතුරු මුහුණතක් ක්‍රියාත්මක කරන්නේ නම්, එය ඇත්ත වශයෙන්ම අතුරු මුහුණතේ ක්‍රම නිර්වචනය කළ යුතු නොවේ. එම අවශ්‍යතාවය උරුම / ළමා කොන්ක්‍රීට් පන්ති සඳහා කල් දැමිය හැකිය. කෙසේ වෙතත්, කොන්ක්‍රීට් පංතියක් එහි මව් පන්තිය විසින් ක්‍රියාත්මක නොකරන සියලුම අතුරු මුහුණත් ක්‍රම ක්‍රියාත්මක කළ යුතුය. මෙම කරුණ නිදර්ශනය කිරීමට මම උදාහරණයක් එකතු කරමි.
ජස්ටින් ජොන්සන්

5
"වියුක්ත පංතියක් උරුම කර ගැනීමේදී, ළමා පන්තිය වියුක්ත ක්‍රම නිර්වචනය කළ යුතු අතර අතුරු මුහුණතකට තවත් අතුරු මුහුණතක් දිගු කළ හැකි අතර ක්‍රම නිර්වචනය කළ යුතු නොවේ." - මෙය සත්‍ය නොවේ. ක්‍රම නිර්වචනය නොකර අතුරු මුහුණතක් විස්තාරණය කළ හැකි සේම, වියුක්ත පන්තියකට ක්‍රම නිර්වචනය නොකර වියුක්ත පන්තියක් උරුම කර ගත හැකිය.
නික්

142

අතුරුමුහුණතක අඩංගු වන්නේ ක්‍රියාකාරීත්වයේ අර්ථ දැක්වීම / අත්සන පමණක් වන අතර, අපට යම් පොදු ක්‍රියාකාරිත්වයක් මෙන්ම පොදු අත්සන් තිබේ නම්, අප වියුක්ත පන්තියක් භාවිතා කළ යුතුය. වියුක්ත පංතියක් භාවිතා කිරීමෙන්, අපට එකවර හැසිරීම මෙන්ම ක්‍රියාකාරිත්වය ද ලබා දිය හැකිය. වියුක්ත පංතියට උරුමකම් කියන තවත් සංවර්ධකයෙකුට මෙම ක්‍රියාකාරිත්වය පහසුවෙන් භාවිතා කළ හැකිය, මන්ද ඔවුන්ට අවශ්‍ය වන්නේ හිස් තැන් පිරවීම පමණි.

රූප විස්තරය මෙහි ඇතුළත් කරන්න ලබාගත්:

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


17
මෙය අදාළ වන්නේ කුමන භාෂාවටද යන්න ඔබට පැවසිය යුතුය (“වියුක්ත පන්තිය බහු උරුමයට සහාය නොදක්වයි” යන්න විශ්වීය සත්‍යයට වඩා බොහෝ සෙයින් වෙනස් ය)
බෙන් වොයිගට්

අවසාන සංසන්දනය වගුව අනුව අවුල් සහගත ය! අතුරුමුහුණතේ ක්‍රම ස්ථිතික විය නොහැකි නමුත් විචල්‍යයන් ස්ථිතික අවසාන වියුක්ත පන්තියේ ක්‍රියාත්මක කරන ක්‍රම ස්ථිතික විය හැකිය
realPK

8
අතුරුමුහුණතේ සාමාජිකයා ස්ථිතික අවසාන විය යුතුය. අවසාන ප්‍රකාශය වැරදිය.
සර් ඊ අහමර්

මෙම පිළිතුරේ "ක්‍රියාකාරිත්වය" යන්නෙන් අදහස් කරන්නේ "ක්‍රියාත්මක කිරීම" යන්නයි. "හැසිරීම" යන්නෙහි තේරුම කුමක්දැයි විශ්වාස නැත - සමහර විට "අත්සන්" විය හැකිද?
LarsH

2
මෙහි ඉලක්කගත ක්‍රමලේඛන භාෂාව කුමක්ද? සී #?
පීටර් මෝර්ටෙන්සන්

80

පැහැදිලි කිරීමක් මෙතැනින් සොයාගත හැකිය: http://www.developer.com/lang/php/article.php/3604111/PHP-5-OOP-Interfaces-Abstract-Classes-and-the-Adapter-Pattern.htm

වියුක්ත පංතියක් යනු ක්‍රමලේඛකයා විසින් අර්ධ වශයෙන් පමණක් ක්‍රියාත්මක කරන පන්තියකි. එහි වියුක්ත ක්‍රම එකක් හෝ කිහිපයක් අඩංගු විය හැකිය. වියුක්ත ක්‍රමයක් යනු හුදෙක් ළමා පන්තියක මෙම ක්‍රමය ක්‍රියාත්මක කළ යුතු බව ක්‍රමලේඛකයාට පැවසීමට ක්‍රියා කරන අර්ථ දැක්වීමකි.

අතුරු මුහුණතක් වියුක්ත පන්තියකට සමාන ය; ඇත්ත වශයෙන්ම අතුරුමුහුණත් පන්ති හා වියුක්ත පංති වලට සමාන නාම අවකාශයක් ගනී. එම හේතුව නිසා, ඔබට පන්තියක් ලෙස එකම නමක් සහිත අතුරු මුහුණතක් අර්ථ දැක්විය නොහැක. අතුරු මුහුණතක් යනු සම්පූර්ණයෙන්ම වියුක්ත පන්තියකි; එහි කිසිදු ක්‍රමයක් ක්‍රියාත්මක නොවන අතර එයින් පන්ති උප වර්ගීකරණයක් වෙනුවට එම අතුරු මුහුණත ක්‍රියාත්මක කරන බව කියනු ලැබේ.

කෙසේ වෙතත්, අතුරුමුහුණත් පිළිබඳ මෙම පැහැදිලි කිරීම තරමක් අවුල් සහගත බව මට පෙනේ. වඩාත් පොදු අර්ථ දැක්වීමක් නම්: පන්ති ක්‍රියාත්මක කිරීම සපුරාලිය යුතු කොන්ත්‍රාත්තුවක් අතුරු මුහුණතක් අර්ථ දක්වයි. අතුරු මුහුණත් අර්ථ දැක්වීමක් කිසිදු ක්‍රියාත්මක කිරීමේ කේතයක් නොමැතිව මහජන සාමාජිකයින්ගේ අත්සන් වලින් සමන්විත වේ.


4
මෙය වඩාත් නිවැරදි පිළිතුරයි, මන්දයත් PHP අතුරුමුහුණත් වෙනත් භාෂාවලට වඩා වෙනස් බැවින් එම PHP අතුරුමුහුණත් හුඩ් යටතේ වියුක්ත පන්ති වන අතර අනෙක් භාෂා අතුරුමුහුණත් පන්තිවලට අනුරූප විය යුතු අත්සන් වේ. කිසිදු දෝෂයක් නොමැති තාක් කල් ඔවුන් හැසිරේ.
ටෝර් වලමෝ

1
ඇත්ත, PHP සඳහා එය නියම හොඳම පිළිතුරු සපයන්නා ය. නමුත් සරල ස්නිපටයකින් ලබා ගැනීමට වඩා පෙළ බ්ලොබ් එකෙන් ලබා ගැනීම දුෂ්කර ය.
ඊ-තෘප්තිමත්

ඔබ ලබා දී ඇති අර්ථ දැක්වීම් වලින්, ඒවා එක් විස්තරයක් හැරුණු විට සමාන වේ: සහ අතුරු මුහුණත 100% වියුක්ත වන අතර, වියුක්ත පන්තියක් අර්ධ වශයෙන් වියුක්ත වන අතර සමහර ක්‍රම ක්‍රියාත්මක කිරීම් තිබිය හැකිය (සමහර විට සියලු ක්‍රම ක්‍රියාත්මක කළ හැකිය?).
jww

43

බොහෝ පිළිතුරු වලින් දැනටමත් පවසා ඇති වෙනස්කම් ඉස්මතු කිරීමට මට අවශ්‍ය නැත (අතුරු මුහුණතේ විචල්‍යයන් සඳහා පොදු ස්ථිතික අවසාන වෙනස් කිරීම් සහ වියුක්ත පන්තිවල ආරක්ෂිත, පුද්ගලික ක්‍රම සඳහා සහාය)

සරලව කිවහොත්, මම කියන්නට කැමතියි:

අතුරුමුහුණත: සම්බන්ධයක් නැති වස්තූන් විසින් කොන්ත්රාත්තුවක් ක්රියාත්මක කිරීම

වියුක්ත පන්තිය: බහු ආශ්‍රිත වස්තු අතර එකම හෝ වෙනස් හැසිරීම ක්‍රියාත්මක කිරීම

ඔරකල් ප්‍රලේඛනයෙන්

නම් වියුක්ත පන්ති භාවිතා කිරීම සලකා බලන්න :

  1. සමීපව සම්බන්ධිත පන්ති කිහිපයක් අතර කේතය බෙදා ගැනීමට ඔබට අවශ්‍යය.
  2. ඔබේ වියුක්ත පංතිය දීර් extend කරන පන්තිවලට බොහෝ පොදු ක්‍රම හෝ ක්ෂේත්‍ර ඇති බව ඔබ අපේක්ෂා කරයි, නැතහොත් පොදු (ආරක්ෂිත සහ පෞද්ගලික වැනි) හැර වෙනත් ප්‍රවේශ විකරණ අවශ්‍ය වේ.
  3. ස්ථිතික නොවන හෝ අවසාන නොවන ක්ෂේත්‍ර ප්‍රකාශ කිරීමට ඔබට අවශ්‍යය.

නම් අතුරු මුහුණත් භාවිතා කිරීම සලකා බලන්න :

  1. සම්බන්ධයක් නැති පන්ති ඔබේ අතුරු මුහුණත ක්‍රියාත්මක කරනු ඇතැයි ඔබ අපේක්ෂා කරයි. උදාහරණයක් ලෙස, බොහෝ සම්බන්ධයක් නැති වස්තූන් ක්‍රියාත්මක කළ හැකියSerializable අතුරු මුහුණත .
  2. ඔබට විශේෂිත දත්ත වර්ගයක හැසිරීම නියම කිරීමට අවශ්‍ය නමුත් එහි හැසිරීම ක්‍රියාත්මක කරන්නේ කවුරුන්ද යන්න ගැන සැලකිලිමත් නොවේ.
  3. වර්ගයේ බහු උරුමයෙන් ප්‍රයෝජන ගැනීමට ඔබට අවශ්‍යය.

වියුක්ත පංතිය ස්ථාපිත කරන්නේ “යනු” යනු කොන්ක්‍රීට් පන්ති සමඟ සම්බන්ධතාවයකි. අතුරුමුහුණත මඟින් පන්ති සඳහා "හැකියාවක්" ඇත.

ඔබ සොයන්නේ නම් Java ක්‍රමලේඛන භාෂාවක් ලෙස , තවත් යාවත්කාලීන කිරීම් කිහිපයක් මෙන්න:

ජාවා 8 ක්‍රමවේදය අංගයක් ලබා දීමෙන් පන්ති interfaceසහ abstractපන්ති අතර පරතරය යම් දුරකට අඩු කර ඇත default. අතුරු මුහුණතක් සඳහා ක්‍රමවේදයක් ක්‍රියාත්මක කිරීමක් දැන් වලංගු නොවේ.

මෙම ප්‍රලේඛන පිටුව බලන්න බලන්න.

කේත උදාහරණ වඩා හොඳින් තේරුම් ගැනීමට මෙම SE ප්‍රශ්නය දෙස බලන්න.

අතුරුමුහුණතක් සහ වියුක්ත පන්තියක් අතර වෙනස මා පැහැදිලි කළ යුත්තේ කෙසේද?


38

වැදගත් වෙනස්කම් කිහිපයක්:

වගුවක ස්වරූපයෙන්:

වෙනස

ලෙස javapapers සිට ජෝ විසින් ප්රකාශ :

1. ප්‍රධාන වෙනස යනු ජාවා අතුරුමුහුණතක ක්‍රම ව්‍යංගයෙන් වියුක්ත වන අතර ඒවා ක්‍රියාත්මක කළ නොහැක. ජාවා වියුක්ත පන්තියකට පෙරනිමි හැසිරීමක් ක්‍රියාත්මක කරන උදාහරණ ක්‍රම තිබිය හැකිය.

2. ජාවා අතුරුමුහුණතක ප්‍රකාශිත විචල්‍යයන් පෙරනිමියෙන් අවසන් වේ. වියුක්ත පන්තියක අවසාන නොවන විචල්‍යයන් අඩංගු විය හැකිය.

3. ජාවා අතුරුමුහුණතක සාමාජිකයින් පෙරනිමියෙන් පොදු වේ. ජාවා වියුක්ත පන්තියකට පුද්ගලික, ආරක්ෂිත වැනි පන්ති සාමාජිකයින්ගේ සුපුරුදු රසයන් තිබිය හැකිය.

4. ජාවා අතුරුමුහුණත “උපකරණ” යන පදය භාවිතයෙන් ක්‍රියාත්මක කළ යුතුය; ජාවා වියුක්ත පංතියක් “දිගු” යන යතුරු පදය භාවිතයෙන් දීර් extended කළ යුතුය.

5.අන් අතුරුමුහුණතකට තවත් ජාවා අතුරුමුහුණතක් පමණක් දිගු කළ හැකි අතර, වියුක්ත පන්තියකට තවත් ජාවා පන්තියක් දීර් extend කර බහු ජාවා අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකිය.

6.A ජාවා පන්තියට බහු අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකි නමුත් එයට දිගු කළ හැක්කේ එක් වියුක්ත පන්තියක් පමණි.

7. ඉන්ටර්ෆේස් නිරපේක්ෂ වියුක්ත වන අතර එය ක්ෂණිකව කළ නොහැකිය. ජාවා වියුක්ත පංතියක් ද ක්ෂණිකව දැක්විය නොහැක, නමුත් ප්‍රධාන () පවතී නම් එය ක්‍රියාත්මක කළ හැකිය.

8. ජාවා වියුක්ත පංති හා සසඳන විට, ජාවා අතුරුමුහුණත් මන්දගාමී වේ.


3
නිවැරදි ආරෝපණය සැපයීම සඳහා මම ඔබේ පිළිතුර සංස්කරණය කර ඇත්තෙමි. ඔබේ පිළිතුරේ පහළින් සබැඳියක් තැබිය නොහැක. වෙනත් මූලාශ්‍රයකින් පිටපත් කළ සියලුම භාෂාවන් උපුටා දැක්විය යුතුය. එසේම, එම වගුව කොහේ හෝ සිට ඇදී ඇත්නම්, එය කොහෙන්දැයි ඔබ පැහැදිලිව සඳහන් කළ යුතුය.
බ්‍රැඩ් ලාර්සන්

කරුණාකර C ++ සඳහා ද සඳහන් කරන්න .. C ++ හි "අතුරුමුහුණත" යන මූල පදය නොමැති වුවද, එය සාමාන්‍යයෙන් අසන Qn regd C ++ ද වේ.
cbinder

bcbinder: c ++ හි 'අතුරුමුහුණත' යන මූල පදය නොමැත. C ++ හි වෙනස සඳහා කරුණාකර 1. tutorialspoint.com/cplusplus/cpp_interfaces.htm 2. tutorialspoint.com/cplusplus/cpp_interfaces.htm
softmage99

Ages මාගේෂ් බාබු සමහර විට පිරිසිදු අථත්‍ය ශ්‍රිතයක් සහිත පන්තියක ශ්‍රිතයක් අර්ථ දැක්වීම එය අතුරු මුහුණතට වඩා වියුක්ත පන්තියක් බවට පත් කරයි
cbinder

2
ජාවා 8 සමඟ, වෙනස්කම් දැන් අඩු ය. : මෙහි යාවත්කාලීන වෙනස්කම් පරීක්ෂා කරන්න journaldev.com/1607/...
Pankaj

31

ප්රධාන කාරණය වන්නේ:

  • සාරාංශය වස්තු නැඹුරු වේ. එය 'වස්තුවකට' තිබිය යුතු මූලික දත්ත සහ / හෝ එයට කළ හැකි කාර්යයන් ඉදිරිපත් කරයි. එය වස්තුවේ මූලික ලක්ෂණ ගැන සැලකිලිමත් වේ: එහි ඇති දේ සහ එයට කළ හැකි දේ. එබැවින් එකම වියුක්ත පන්තියෙන් උරුම වන වස්තූන් මූලික ලක්ෂණ (සාමාන්‍යකරණය) බෙදා ගනී.
  • අතුරුමුහුණත ක්‍රියාකාරීත්වයට නැඹුරු වේ. එය වස්තුවකට තිබිය යුතු ක්‍රියාකාරීත්වය අර්ථ දක්වයි. එය කුමන වස්තුවක් වුවද, අතුරු මුහුණතේ අර්ථ දක්වා ඇති මෙම ක්‍රියාකාරීත්වයන් කළ හැකි තාක් කල් එය හොඳයි. එය අනෙක් සියල්ල නොසලකා හරියි. වස්තුවකට / පන්තියකට ක්‍රියාකාරීත්වයන් කිහිපයක් (කණ්ඩායම්) අඩංගු විය හැකිය; එබැවින් පන්තියකට බහු අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකිය.

ස්තූතියි දැන් අපට හොඳ ඉහළ මට්ටමේ ප්‍රතිචාරයක් ලැබෙනවා. වඩාත් අවබෝධය මත පදනම් වූ ප්‍රතිචාරයක් සොයා ගැනීමට ඔබට කළ යුතු අදහස් කොතරම් ගැඹුරට විහිළුවක්ද.
ඇන්ඩෲ

1
අනෙක් පිළිතුරු ඉතා තාක්ෂණික ය. මෙය 'නිවැරදි' පිළිතුරක් ලෙස මට හැඟෙන දෙය කරා ළඟා වෙමින් තිබේ. OOP හි සමස්ත කරුණ අර්ථ නිරූපණයන් වන අතර, පුද්ගලික කැදැලි පන්ති මහජනතාවට CPU මිල අධික සෙවීම් හරහා කැඳවනු ලැබුවත් නැතත් මෙහි බොහෝ දුරට අදාල නොවේ
Sentinel

26

උරුම ධූරාවලියක් තුළ බහුමාමක හැසිරීම සැපයීමට ඔබට අවශ්‍ය වූ විට, වියුක්ත පන්ති භාවිතා කරන්න.

සම්පුර්ණයෙන්ම සම්බන්ධයක් නැති පන්ති සඳහා බහුමාමක හැසිරීම් ඔබට අවශ්‍ය වූ විට, අතුරු මුහුණතක් භාවිතා කරන්න.


24

මම මහල් 300 කින් යුත් ගොඩනැගිල්ලක් ඉදිකරමි

ගොඩනැගිල්ලේ සැලැස්ම අතුරුමුහුණත

  • උදාහරණයක් ලෙස, සර්වට්ලට් (අයි)

මහල් 200 ක් දක්වා ඉදිකර ඇති ගොඩනැගිල්ල - අර්ධ වශයෙන් නිම කරන ලද --- වියුක්ත

  • අර්ධ වශයෙන් ක්‍රියාත්මක කිරීම, උදාහරණයක් ලෙස, සාමාන්‍ය සහ HTTP සේවාදායකය

ගොඩනැගිලි ඉදිකිරීම අවසන් - කොන්ක්‍රීට්

  • සම්පූර්ණ ක්‍රියාත්මක කිරීම, උදාහරණයක් ලෙස, තමන්ගේම සේවාදායකය

අතුරුමුහුණත

  • ක්‍රියාත්මක කිරීම ගැන අපි කිසිවක් නොදනිමු. අපට අතුරු මුහුණතක් සඳහා යා හැකිය.
  • සෑම ක්‍රමයක්ම පොදු සහ වියුක්ත වේ
  • එය 100% පිරිසිදු වියුක්ත පන්තියකි
  • අප ප්‍රසිද්ධ යැයි ප්‍රකාශ කළහොත් අපට පුද්ගලික හා ආරක්ෂිත යැයි ප්‍රකාශ කළ නොහැක
  • අප වියුක්ත යැයි ප්‍රකාශ කළහොත් අපට අවසාන, ස්ථිතික, සමමුහුර්ත, දැඩි හා ස්වදේශීය ලෙස ප්‍රකාශ කළ නොහැක
  • සෑම අතුරු මුහුණතක්ම පොදු, ස්ථිතික හා අවසාන වේ
  • අනුක්‍රමිකකරණය සහ අස්ථිරභාවය අදාළ නොවේ, මන්ද අපට අතුරු මුහුණතේ උදාහරණයක් නිර්මාණය කළ නොහැක
  • අස්ථායී නොවන බැවින් එය අවසාන ය
  • සෑම විචල්යයක්ම ස්ථිතික වේ
  • අපි අතුරු මුහුණතක් තුළ විචල්‍යයක් ප්‍රකාශ කරන විට ප්‍රකාශ කරන අතරතුර විචල්‍යයන් ආරම්භ කළ යුතුය
  • උදාහරණ සහ ස්ථිතික වාරණයට අවසර නැත

සාරාංශය

  • අර්ධ ක්රියාත්මක කිරීම
  • එය වියුක්ත ක්‍රමයක් ඇත. මීට අමතරව, එය කොන්ක්රීට් භාවිතා කරයි
  • වියුක්ත පන්ති ක්‍රම විකරණකාරක සඳහා සීමාවක් නොමැත
  • වියුක්ත පන්ති විචල්‍ය විකරණකාරක සඳහා සීමාවක් නොමැත
  • වියුක්තය හැර අපට වෙනත් වෙනස් කිරීම් ප්‍රකාශ කළ නොහැක
  • විචල්යයන් ආරම්භ කිරීමට සීමාවක් නොමැත

දුර්ගා ජොබ්ස් වෙබ් අඩවියෙන් ලබා ගන්නා ලදි


වියුක්ත පංතියකට ඉදිකිරීම්කරුවෙකු සිටිය හැකිය
විමල් ක්‍රිෂ්ණා

4
මම මෙම මතයට සම්පූර්ණයෙන්ම එකඟ නොවෙමි. සැලැස්ම 'අතුරුමුහුණත' සඳහා සම්පූර්ණයෙන්ම වෙනස් සංකල්පයකි. නිශ්චිත ක්‍රියාවලියක් සඳහා ස්ථිතික ආකෘතියකට හෝ සැලසුම් පිරිවිතරයකට බ්ලූපින්ට් වඩාත් සමාන වේ. සැලැස්ම එහි ඉදිකිරීම්කරු හරහා කිහිප වතාවක්ම ක්ෂණිකව දැක්විය හැකි බැවින් එය 'පන්තියට' වඩා සමීප වේ, නමුත් මෙය පවා ප්‍රමාණවත් නොවන බැවින් 'පන්තිය' තුළ (ctor) ඉදි කළ යුතු ආකාරය සහ කළ යුතු ආකාරය පිළිබඳ පිරිවිතර ද අඩංගු වේ. නිසා. සංකල්පයක් ලෙස අතුරුමුහුණත අදහස් කරනුයේ යම් යම් හැසිරීම් නිරූපණය කිරීමටය, එනම් හීට් අප් / කූල් ඩවුන් වැනි දේවල් පෙළගැස්වීම සඳහා යොදා ගත හැකිය, උදා: ගොඩනැගිලි, උදුන් යනාදිය
සෙන්ටිනල්

18

මෙම ප්‍රශ්නය නැවත සකස් කරමු:

ඔබට දැනුම් දිය යුතු පළමු දෙය නම් 1/1 සහ 1 * 1 ප්‍රති results ල එකම ප්‍රති in ලයක් වන නමුත් එයින් අදහස් කරන්නේ ගුණ කිරීම හා බෙදීම එක හා සමාන නොවන බවයි. නිසැකවම, ඔවුන් යම් හොඳ සම්බන්ධතාවයක් පවත්වයි, නමුත් ඔබ දෙදෙනාම වෙනස් බව මතක තබා ගන්න.

මම ප්‍රධාන වෙනස්කම් පෙන්වා දෙන්නෙමි, ඉතිරිය දැනටමත් පැහැදිලි කර ඇත:

පන්ති ධූරාවලියක් ආකෘතිකරණය කිරීම සඳහා වියුක්ත පන්ති ප්‍රයෝජනවත් වේ. ඕනෑම අවශ්‍යතාවයක් බැලූ බැල්මට, හරියටම ඉදි කළ යුත්තේ කුමක් යන්න පිළිබඳව අපි අර්ධ වශයෙන් පැහැදිලිය , නමුත් ගොඩනඟා ගත යුතු දේ අපි දනිමු . එබැවින් ඔබේ වියුක්ත පන්ති ඔබේ මූලික පන්ති වේ.

මට කළ හැකි දේ වෙනත් ධූරාවලියකට හෝ පන්තිවලට දැන ගැනීමට අතුරු මුහුණත් ප්‍රයෝජනවත් වේ. මට යමක් කිරීමට හැකියාවක් ඇතැයි ඔබ කියන විට, ඔබට එම හැකියාව තිබිය යුතුය. එකම ක්‍රියාකාරීත්වයක් ක්‍රියාත්මක කිරීම පන්තියකට අනිවාර්ය බව අතුරුමුහුණත් සලකුණු කරයි.


2
හොඳ පිළිතුරක් ඇත, නමුත් ගණිත රූපකය නිෂ් less ල වන අතර මෙම අදහස ලිවීමේදී එය කියවීමට දළ වශයෙන් සමාන කාලයක් නාස්ති කළේය. දැන් මෙම ප්‍රශ්නය කියවා ඇති අනෙක් සියලුම පුද්ගලයින් විසින් ගුණ කරන්න.
ඇන්ඩෲ

"ගණිත රූපකය නිෂ් less ලයි", ඔබ එසේ සිතන්නේ ඇයි?
ධනංජය

12

ඇත්තෙන්ම එය ඉතා සරල ය.

ඔබට අතුරු මුහුණතක් වියුක්ත ක්‍රම පමණක් තිබිය හැකි අතර වෙන කිසිවක් නැත.

එබැවින් අතුරු මුහුණතකට "ප්‍රකාශ කිරීම" පමණක් කළ හැකි අතර ඔබට පන්තියට අවශ්‍ය හැසිරීම අර්ථ දැක්විය නොහැක.

වියුක්ත පංතියක් මඟින් ඔබට ප්‍රකාශ කිරීමට (වියුක්ත ක්‍රම භාවිතා කිරීමට) මෙන්ම පන්තියට අවශ්‍ය හැසිරීම නිර්වචනය කිරීමට (සම්පූර්ණ ක්‍රම ක්‍රියාත්මක කිරීම භාවිතා කිරීමට) ඉඩ ලබා දේ.

සාමාන්‍ය පන්තියක් මඟින් ඔබට පන්තියට අවශ්‍ය හැසිරීම / ක්‍රියා නිර්වචනය කිරීමට, ප්‍රකාශ කිරීමට පමණක් ඉඩ නොදේ.

අන්තිම එක,

ජාවා හි, ඔබට බහු අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකිය, නමුත් ඔබට දිගු කළ හැක්කේ එකක් (වියුක්ත පන්තිය හෝ පන්තිය) පමණි ...

මෙයින් අදහස් කරන්නේ නිර්වචනය කරන ලද හැසිරීම් වල උරුමය එක් පන්තියකට එක් අයෙකුට පමණක් ඉඩ දීම සඳහා සීමා කර ඇති බවයි ... එනම් ඔබට A, B සහ C පන්ති වලින් හැසිරීම සංවර්‍ධනය කරන පන්තියක් අවශ්‍ය නම් ඔබට පහත සඳහන් දේ කළ යුතුය: A පන්තිය B දක්වා විහිදේ, පංතිය C දීර් A කරයි .. බහුවිධ උරුමයක් ලබා ගැනීම සඳහා එය ටිකක් වටය ...

අනෙක් අතට අතුරුමුහුණත්, ඔබට සරලවම කළ හැකිය: අතුරු මුහුණත C මඟින් A, B ක්‍රියාත්මක කරයි

එබැවින්, ජාවා බහු උරුමයට සහය දක්වන්නේ “ප්‍රකාශිත හැසිරීම” එනම් අතුරුමුහුණත් තුළ පමණක් වන අතර, අර්ථ දක්වා ඇති හැසිරීම් සහිත තනි උරුමයක් පමණි .. මා විස්තර කළ ආකාරයට ඔබ එය නොකරන්නේ නම් ...

බලාපොරොත්තුවෙන් එය අර්ථවත් කරයි.


11

අතුරුමුහුණත එදිරිව වියුක්ත පන්තිය සංසන්දනය කිරීම වැරදිය. ඒ වෙනුවට තවත් සැසඳීම් දෙකක් තිබිය යුතුය: 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;
  }
}

ජාවා හෝ සී ++ වැනි බොහෝ භාෂාවල පංතියක් පමණක් තිබිය හැකිය වියුක්ත හෝ අවසාන . එවැනි පංතියක් උරුම කර ගත හැකි අතර එය ක්ෂණිකව කළ හැකිය. මම හිතන්නේ නැහැ මෙය වස්තූන් මත පදනම් වූ පරමාදර්ශයට අනුකූල බව.

නැවතත්, වියුක්ත පන්ති සමඟ අතුරුමුහුණත් සංසන්දනය කිරීම නිවැරදි නොවේ.


9

කෙටියෙන් කිවහොත් වෙනස්කම් පහත දැක්වේ:

අතුරුමුහුණත සහ වියුක්ත පන්තිය අතර සින්ටැක්ටිකල් වෙනස්කම් :

  1. වියුක්ත පංතියක ක්‍රම සහ සාමාජිකයින්ට ඕනෑම දෘශ්‍යතාවයක් තිබිය හැකිය. අතුරුමුහුණතක සියලුම ක්‍රම පොදු විය යුතුය . // ජාවා 9 වෙතින් තවදුරටත් සත්‍ය නොවේ
  2. ක ක කොන්ක්රීට් දරුවා පන්තියේ සාරාංශයේ පන්තියේ සියලු අවසාන් නිර්වචනය කළ යුතුය. ක සාරාංශයේ දරුවා පන්තියේ අවසාන් විය හැකිය. ක අතුරු මුහුණත තවත් අතුරු මුහුණත අවශ්ය දීර්ඝ මව් අතුරු මුහුණත උරුම ක්රම සඳහා පෙරනිමි ක්රියාත්මක ලබා නැහැ.
  3. ළමා පන්තියකට දිගු කළ හැක්කේ තනි පන්තියක් පමණි. ක අතුරු මුහුණත බහු කුල දීර්ඝ කළ හැකිය. පන්තියකට බහු අතුරුමුහුණත් ක්‍රියාත්මක කළ හැකිය.
  4. ළමා පංතියකට එකම හෝ අඩු සීමිත දෘශ්‍යතාවයකින් වියුක්ත ක්‍රම නිර්වචනය කළ හැකි අතර, අතුරු මුහුණතක් ක්‍රියාත්මක කරන පන්තිය සියලු අතුරු මුහුණත් ක්‍රම පොදු ලෙස අර්ථ දැක්විය යුතුය.
  5. වියුක්ත පංති වලට ඉදිකිරීම්කරුවන් සිටිය හැකි නමුත් අතුරු මුහුණත් නොවේ .
  6. ජාවා 9 හි අතුරුමුහුණත් පෞද්ගලික ස්ථිතික ක්‍රම ඇත.

දැන් අතුරුමුහුණත් තුළ:

public static- සහාය
public abstract- සහාය
public default- සහාය
private static- සහාය
private abstract- සම්පාදක දෝෂය
private default- සම්පාදක දෝෂය
private- සහාය


8

එකම වෙනස නම් කෙනෙකුට බහු උරුමයකට සහභාගී විය හැකි අතර අනෙකාට නොහැකි ය.

අතුරු මුහුණතක අර්ථ දැක්වීම කාලයත් සමඟ වෙනස් වී ඇත. ඔබ සිතන්නේ අතුරු මුහුණතක ක්‍රම ප්‍රකාශන පමණක් ඇති අතර එය ගිවිසුම් පමණක්ද? ස්ථිතික අවසාන විචල්‍යයන් ගැන කුමක් කිව හැකිද? ජාවා 8 න් පසු පෙරනිමි අර්ථ දැක්වීම් ගැන කුමක් කිව හැකිද?

බහු උරුමයක් සහිත දියමන්ති ගැටළුව නිසා ජාවා වෙත අතුරුමුහුණත් හඳුන්වා දෙන ලද අතර එය ඔවුන් සැබවින්ම කිරීමට අදහස් කරන්නේ එයයි.

අතුරුමුහුණත් යනු බහු උරුම ගැටලුව මඟහරවා ගැනීම සඳහා නිර්මාණය කරන ලද අතර වියුක්ත ක්‍රම, පෙරනිමි අර්ථ දැක්වීම් සහ ස්ථිතික අවසාන විචල්‍යයන් තිබිය හැකිය.

බලන්න, ජාවා ගිවිසුම් පමණක් වීමට අදහස් කරන විට අතුරු මුහුණත් වල ස්ථිතික අවසාන විචල්‍යයන්ට ඉඩ දෙන්නේ ඇයි? .


1
එය වැදගත් වෙනසක් වන අතර එය එකම වෙනස නොවේ.
ගෝවින්ද් පර්මාර්

7

අතුරුමුහුණත: හැරෙන්න (වමට හැරෙන්න, දකුණට හැරෙන්න.)

වියුක්ත පන්තිය: රෝදය.

පංතිය: සුක්කානම් රෝදය, රෝදයෙන් ව්‍යුත්පන්න වී ඇති අතර අතුරු මුහුණත හැරීම නිරාවරණය කරයි

එකක් නම් විවිධාකාර දේවල් හරහා ඉදිරිපත් කළ හැකි හැසිරීම් වර්ගීකරණය කිරීම සඳහා වන අතර අනෙක දේවල් පිළිබඳ ඔන්ටෝලොජි ආකෘතිකරණය සඳහා ය.


6

ඔබට බහු පන්ති භාවිතා කළ හැකි පොදු ක්‍රම කිහිපයක් තිබේ නම් වියුක්ත පන්ති සඳහා යන්න. පංති නිශ්චිත සැලැස්මක් අනුගමනය කිරීමට ඔබට අවශ්‍ය නම් අතුරු මුහුණත් සඳහා යන්න.

පහත උදාහරණ මගින් මෙය පෙන්නුම් කරයි.

ජාවා හි වියුක්ත පන්තිය:

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);
    }
}

කෙටියෙන් කෙටියෙන් වැදගත් කරුණු කිහිපයක්:

  1. ජාවා අතුරුමුහුණතේ ප්‍රකාශිත විචල්‍යයන් පෙරනිමියෙන් අවසන් වේ. වියුක්ත පංතිවලට අවසාන නොවන විචල්‍යයන් තිබිය හැකිය.

  2. ජාවා අතුරුමුහුණතේ ප්‍රකාශිත විචල්‍යයන් පෙරනිමියෙන් ස්ථිතික වේ. වියුක්ත පංතිවලට ස්ථිතික නොවන විචල්‍යයන් තිබිය හැකිය.

  3. ජාවා අතුරුමුහුණතක සාමාජිකයින් පෙරනිමියෙන් පොදු වේ. ජාවා වියුක්ත පන්තියකට පුද්ගලික, ආරක්ෂිත වැනි පන්ති සාමාජිකයින්ගේ සුපුරුදු රසයන් තිබිය හැකිය.


5

බොහෝ කනිෂ් develop සංවර්ධකයින් එකම දේවල සුළු වෙනස්කම් ලෙස අතුරුමුහුණත්, වියුක්ත හා කොන්ක්‍රීට් පංති ගැන සිතීමේ වැරැද්ද සිදු කරන අතර, ඉන් එකක් තාක්ෂණික හේතුන් මත පමණක් තෝරා ගන්න: මට බහු උරුමයක් අවශ්‍යද? පොදු ක්‍රම තැබීමට මට යම් ස්ථානයක් අවශ්‍යද? කොන්ක්‍රීට් පංතියක් හැර වෙනත් දෙයක් ගැන මට කරදර විය යුතුද? මෙය වැරදියි, මෙම ප්‍රශ්න වල සැඟවී ඇති ප්‍රධාන ගැටළුව: "මම" . ඔබ ඔබ වෙනුවෙන් කේතයක් ලියන විට, ඔබ විසින්ම, ඔබේ කේතය සමඟ හෝ වැඩ කරන වෙනත් වර්තමාන හෝ අනාගත සංවර්ධකයින් ගැන ඔබ සිතන්නේ කලාතුරකිනි.

අතුරුමුහුණත් සහ වියුක්ත පංති, තාක්ෂණික දෘෂ්ටි කෝණයකින් පෙනෙන පරිදි සමාන වුවත්, සම්පූර්ණයෙන්ම වෙනස් අර්ථයන් සහ අරමුණු ඇත.

සාරාංශය

  1. යම් ක්‍රියාත්මක කිරීමක් ඔබ වෙනුවෙන් ඉටු කරන කොන්ත්‍රාත්තුවක් අතුරු මුහුණතක් අර්ථ දක්වයි .

  2. වියුක්ත පන්ති පෙරනිමි හැසිරීම සපයයි බව ඔබේ ක්රියාත්මක කිරීම නැවත භාවිත කළ හැකිය.

විකල්ප සාරාංශය

  1. අතුරු මුහුණතක් යනු පොදු API නිර්වචනය කිරීමයි
  2. වියුක්ත පන්තියක් යනු අභ්‍යන්තර භාවිතය සඳහා සහ SPIs අර්ථ දැක්වීම සඳහා ය

ක්‍රියාත්මක කිරීමේ තොරතුරු සැඟවීමේ වැදගත්කම පිළිබඳව

කොන්ක්‍රීට් පංතියක් සැබෑ වැඩ කරන්නේ ඉතා නිශ්චිත ආකාරයකින් ය. නිදසුනක් ලෙස, ArrayListවේගවත් අහඹු ප්‍රවේශයක්, පුනරාවර්තනයක් සහ ස්ථානීය වෙනස්කම් ලබා දෙන සංයුක්ත ආකාරයකින් වස්තු ලැයිස්තුවක් ගබඩා කිරීම සඳහා පරස්පර මතක ප්‍රදේශයක් භාවිතා කරයි, නමුත් ඇතුළත් කිරීම්, මකාදැමීම් සහ ඉඳහිට එකතු කිරීම් වලදී එය භයානක ය; මේ අතර, LinkedListවස්තූන් ලැයිස්තුවක් ගබඩා කිරීම සඳහා ද්වි-සම්බන්ධිත නෝඩ් භාවිතා කරයි, ඒ වෙනුවට වේගවත් ක්‍රියාකාරීත්වය, ස්ථානීය වෙනස්කම්, සහ ඇතුළු කිරීම / මකාදැමීම / එකතු කිරීම ලබා දෙයි, නමුත් අහඹු ලෙස ප්‍රවේශවීමේදී එය භයානක ය. මෙම වර්ග දෙකේ ලැයිස්තු විවිධ භාවිත අවස්ථා සඳහා ප්‍රශස්තිකරණය කර ඇති අතර, ඔබ ඒවා භාවිතා කරන්නේ කෙසේද යන්න වැදගත් වේ. ඔබ දැඩි ලෙස අන්තර්ක්‍රියා කරන ලැයිස්තුවකින් කාර්ය සාධනය මිරිකීමට උත්සාහ කරන විට, සහ ලැයිස්තුවේ වර්ගය තෝරා ගැනීමේදී ඔබ සතුව ඇති විට, ඔබ ක්ෂණිකව තෝරා ගන්නේ කුමන එකක් දැයි ප්‍රවේශමෙන් තෝරා ගත යුතුය.

අනෙක් අතට, ලැයිස්තුවක් ඉහළ මට්ටමේ භාවිතා කරන්නන් එය සැබවින්ම ක්‍රියාත්මක කරන්නේ කෙසේද යන්න ගැන තැකීමක් නොකරන අතර ඔවුන් මෙම විස්තර වලින් පරිවරණය කළ යුතුය. ජාවා Listඅතුරුමුහුණත නිරාවරණය නොකළේ යැයි සිතමු , නමුත් දැන් ඇත්තේ කොන්ක්‍රීට් Listපංතියක් පමණි LinkedList. සියලුම ජාවා සංවර්ධකයින් ක්‍රියාත්මක කිරීමේ තොරතුරු වලට සරිලන පරිදි ඔවුන්ගේ කේතය සකස් කර ගනු ඇත: අහඹු ලෙස ප්‍රවේශ වීම වළක්වා ගන්න, ප්‍රවේශය වේගවත් කිරීම සඳහා හැඹිලියක් එක් කරන්න, නැතහොත් ArrayListඒවා තනිවම ප්‍රතිනිර්මාණය කරන්න, එය ඇත්ත වශයෙන්ම ක්‍රියාත්මක වන අනෙක් සියලුම කේත සමඟ නොගැලපේ.List . එය භයානක වනු ඇත ... නමුත් දැන් සිතන්න ජාවා ස්වාමිවරුන් සැබවින්ම සම්බන්ධිත ලැයිස්තුවක් බොහෝ සත්‍ය භාවිත අවස්ථා සඳහා භයානක බව වටහාගෙන ඇති අතර ඔවුන්ගේ එකම සඳහා අරාව ලැයිස්තුවකට මාරුවීමට තීරණය කළේය.Listපන්තිය ඇත. මෙය ලෝකයේ සෑම ජාවා වැඩසටහනකම ක්‍රියාකාරීත්වයට බලපානු ඇති අතර මිනිසුන් ඒ ගැන සතුටු නොවනු ඇත. ප්‍රධාන වැරදිකරු වන්නේ ක්‍රියාත්මක කිරීමේ තොරතුරු ලබා ගත හැකි වීම සහ සංවර්ධකයින් උපකල්පනය කළේ එම තොරතුරු ඔවුන්ට විශ්වාසය තැබිය හැකි ස්ථිර කොන්ත්‍රාත්තුවක් බවයි. ක්‍රියාත්මක කිරීමේ තොරතුරු සැඟවීම වැදගත් වන අතර වියුක්ත කොන්ත්‍රාත්තුවක් පමණක් අර්ථ දක්වන්න. මෙය අතුරුමුහුණතක අරමුණයි: අනාගත යාවත්කාලීනයන් සමඟ වෙනස් විය හැකි අභ්‍යන්තර තොරතුරු වලට සරිලන පරිදි ක්‍රමලේඛකයන්ට ඔවුන්ගේ කේතය වෙනස් කිරීමට පෙළඹවිය හැකි සියලු ධෛර්යයන් හෙළි නොකර, ක්‍රමයක් පිළිගන්නේ කුමන ආකාරයේ ආදානයක්ද සහ කුමන ආකාරයේ ප්‍රතිදානයක්ද යන්න නිර්වචනය නොකරන්න. .

වියුක්ත පංතියක් අතුරුමුහුණත් සහ කොන්ක්‍රීට් පන්ති අතර මැද වේ. එය ක්‍රියාත්මක කිරීමට පොදු හෝ කම්මැලි කේත බෙදා ගැනීමට උපකාරී වේ. නිදසුනක් ලෙස, ප්‍රමාණය මත පදනම්ව AbstractCollectionමූලික ක්‍රියාත්මක කිරීම් isEmpty0 වේ, නැවත නැවත containsසංසන්දනය කරන විට, addAllපුනරාවර්තනය addවන පරිදි යනාදිය. මෙය ක්‍රියාත්මක කිරීමට ඒවා අතර වෙනස හඳුනා ගන්නා තීරණාත්මක කොටස් කෙරෙහි අවධානය යොමු කිරීමට ඉඩ දෙයි: දත්ත සැබවින්ම ගබඩා කරන්නේ කෙසේද සහ ලබා ගන්නේ කෙසේද.

ඒපීඅයි එදිරිව එස්පීඅයි

අතුරුමුහුණත් යනු කේතයේ විවිධ කොටස් අතර අඩු සංයුක්ත ද්වාරයකි . අභ්‍යන්තරව යමක් වෙනස් වූ විට සෑම පුස්තකාල පරිශීලකයෙකුම බිඳ නොගෙන පුස්තකාල පැවතීමට හා පරිණාමය වීමට ඒවා ඉඩ දෙයි. එය හැඳින්වෙන්නේ යෙදුම් ක්‍රමලේඛන අතුරුමුහුණත මිස යෙදුම් ක්‍රමලේඛන පන්ති නොවේ. කුඩා පරිමාණයෙන්, විවිධ මොඩියුලයන් මනාව ලේඛනගත අතුරුමුහුණත් හරහා වෙන් කිරීමෙන් මහා පරිමාණ ව්‍යාපෘති සඳහා සාර්ථකව සහයෝගයෙන් කටයුතු කිරීමට බහු සංවර්ධකයින්ට ඉඩ දෙයි.

ඒ සමගම සාරාංශ පන්ති ඉහළ කෙසෙද? වේ කාරයෙක් ක්රියාත්මක කිරීම තොරතුරු යම් මට්ටමක උපකල්පනය අතුරු මුහුණතක් ක්රියාත්මක කරන විට භාවිතා කළ යුතුය. විකල්පයක් ලෙස, එස්පීඅයි, සේවා සැපයුම් අතුරුමුහුණත් නිර්වචනය කිරීම සඳහා වියුක්ත පන්ති භාවිතා කරයි.

ඒපීඅයි සහ එස්පීඅයි අතර වෙනස සියුම් ය, නමුත් වැදගත් ය: ඒපීඅයි සඳහා, අවධානය යොමු කරන්නේ එය භාවිතා කරන්නේ කවුරුන්ද යන්න සහ එස්පීඅයි සඳහා අවධානය යොමු කරන්නේ එය ක්‍රියාත්මක කරන්නේ කවුරුන්ද යන්නයි.

API එකකට ක්‍රම එකතු කිරීම පහසුය, දැනට පවතින API භාවිතා කරන්නන් සියල්ලම සම්පාදනය කරනු ඇත. සෑම සේවා සැපයුම්කරුවෙකුටම (කොන්ක්‍රීට් ක්‍රියාත්මක කිරීම) නව ක්‍රම ක්‍රියාත්මක කිරීමට සිදුවන බැවින්, SPI සඳහා ක්‍රම එකතු කිරීම දුෂ්කර ය. SPI නිර්වචනය කිරීම සඳහා අතුරුමුහුණත් භාවිතා කරන්නේ නම්, SPI කොන්ත්‍රාත්තුව වෙනස් වන සෑම විටම සැපයුම්කරුවෙකුට නව අනුවාදයක් නිකුත් කිරීමට සිදුවේ. ඒ වෙනුවට වියුක්ත පංති භාවිතා කරන්නේ නම්, නව ක්‍රම එක්කෝ පවත්නා වියුක්ත ක්‍රම අනුව හෝ හිස් throw not implemented exceptionකඳන් ලෙස අර්ථ දැක්විය හැකිය , එමඟින් අවම වශයෙන් සේවා ක්‍රියාත්මක කිරීමේ පැරණි අනුවාදයක් සම්පාදනය කර ක්‍රියාත්මක කිරීමට ඉඩ දෙනු ඇත.

ජාවා 8 සහ පෙරනිමි ක්‍රම පිළිබඳ සටහනක්

ජාවා 8 අතුරුමුහුණත් සඳහා පෙරනිමි ක්‍රම හඳුන්වා දුන්නද, එය අතුරුමුහුණත් සහ වියුක්ත පංති අතර රේඛාව බොඳ කරයි, නමුත් මෙය ක්‍රියාත්මක කිරීම මඟින් කේත නැවත භාවිතා කළ හැකි නොවේ, නමුත් ඒපීඅයි සහ එස්පීඅයි ලෙස සේවය කරන අතුරු මුහුණත් වෙනස් කිරීම පහසු කරයි. (හෝ වියුක්ත පන්ති වෙනුවට SPIs අර්ථ දැක්වීම සඳහා වැරදි ලෙස භාවිතා කරයි).

කුමන එකක් භාවිතා කළ යුතුද?

  1. මෙම වන දෙයක් කිරීමට නියමිත ප්රසිද්ධියේ යොදා කේතය අනෙකුත් කොටස් විසින්, හෝ වෙනත් බාහිර කේතය විසින්? ක්‍රියාත්මක කිරීමේ තොරතුරු පොදු වියුක්ත කොන්ත්‍රාත්තුවෙන් සැඟවීමට එයට අතුරු මුහුණතක් එක් කරන්න, එය සාමාන්‍ය හැසිරීමයි.
  2. යනු දෙයක් පොදු කේතය ගොඩක් බහු නිර්මාණයන් පැවතී ඇති වෙනවා දෙයක්? අතුරු මුහුණතක් සහ වියුක්ත, අසම්පූර්ණ ක්‍රියාත්මක කිරීමක් කරන්න.
  3. කවදා හෝ එක් ක්‍රියාත්මක කිරීමක් පමණක් සිදුවනු ඇති අතර වෙන කිසිවෙකු එය භාවිතා නොකරනු ඇත්ද? එය කොන්ක්‍රීට් පන්තියක් බවට පත් කරන්න.
    1. "සදහටම" දිගු කාලයක්, ඔබට එය ආරක්ෂිතව වාදනය කළ හැකි අතර ඊට ඉහළින් අතුරු මුහුණතක් එක් කරන්න.

සහසම්බන්ධය: අනෙක් පැත්ත බොහෝ විට වැරදියට සිදු වේ: යමක් භාවිතා කරන විට , ඔබට සැබවින්ම අවශ්‍ය වන වඩාත් සාමාන්‍ය පන්තිය / අතුරුමුහුණත භාවිතා කිරීමට සැමවිටම උත්සාහ කරන්න. වෙනත් වචන වලින් කිවහොත්, ඔබේ විචල්‍යයන් අරාව ලැයිස්තුවක් ලෙස ArrayList theList = new ArrayList()සැබවින්ම රඳා පැවතීම මිස වෙනත් විචල්‍යයන් ලෙස ප්‍රකාශ නොකරන්න , වෙනත් කිසිදු ලැයිස්තුවක් ඔබ වෙනුවෙන් එය කපා නොදමනු ඇත. ඒ වෙනුවට භාවිතා කරන්න , නැතහොත් එය ලැයිස්තුවක් වුවද වෙනත් කිසිම ආකාරයක එකතුවක් ඇත්ත වශයෙන්ම වැදගත් නොවේ.List theList = new ArrayListCollection theCollection = new ArrayList


4

මුල් ප්‍රශ්නයට ඇත්ත වශයෙන්ම පිළිතුර නොවේ, නමුත් ඔබ ඒවා අතර ඇති වෙනසට පිළිතුරක් ලැබීමෙන් පසු, ඔබ භාවිතා කළ යුතු සෑම උභතෝකෝටිකයක්ම ඇතුළත් කරනු ඇත: අතුරුමුහුණත් හෝ වියුක්ත පන්ති භාවිතා කරන්නේ කවදාද? දෙකම භාවිතා කළ යුත්තේ කවදාද?

මට OOP පිළිබඳ සීමිත දැනුමක් ඇත, නමුත් ව්‍යාකරණයේ නාමවිශේෂණයකට සමාන අතුරු මුහුණත් දැකීම මේ දක්වා මා වෙනුවෙන් වැඩ කර ඇත (මෙම ක්‍රමය ව්‍යාජ නම් මාව නිවැරදි කරන්න!). උදාහරණයක් ලෙස, අතුරුමුහුණත් නම් ඔබට පන්තියකට ලබා දිය හැකි ගුණාංග හෝ හැකියාවන් හා සමාන වන අතර පන්තියකට ඒවායින් බොහොමයක් තිබිය හැකිය: ISerializable, ICountable, IList, ICacheable, IHappy, ...


3

උරුමය අරමුණු දෙකක් සඳහා භාවිතා වේ:

  • මව්-වර්ගයේ දත්ත සාමාජිකයන් සහ ක්‍රම ක්‍රියාත්මක කිරීම තමන්ගේම යැයි සැලකීමට වස්තුවකට ඉඩ දීම.

  • එක් වර්ගයක වස්තුවක් සඳහා සුපර් ටයිප් වස්තුවක් වෙත යොමු කිරීමක් අපේක්ෂා කරන කේතයක් භාවිතා කිරීමට ඉඩ දීම.

සාමාන්‍යකරණය කරන ලද බහු උරුමයට සහාය දෙන භාෂා / රාමු වලදී, වර්ගයක් “අතුරුමුහුණතක්” හෝ “වියුක්ත පන්තියක්” ලෙස වර්ගීකරණය කිරීමට බොහෝ විට අවශ්‍ය නොවේ. කෙසේවෙතත්, ජනප්‍රිය භාෂා සහ රාමු, වෙනත් වර්ගයක අත්තනෝමතික සංඛ්‍යාවක් සඳහා ආදේශ කිරීමට ඉඩ දුන්නද, එක් වර්ගයක දත්ත වර්ගයක් හෝ ක්‍රමවේදය ක්‍රියාත්මක කිරීම තමන්ගේම යැයි සැලකීමට ඉඩ දෙයි.

වියුක්ත පංතිවල දත්ත සාමාජිකයන් සහ ක්‍රම ක්‍රියාත්මක කිරීම් තිබිය හැකි නමුත් උරුම කර ගත හැක්කේ වෙනත් කිසිදු පන්තියකින් උරුම නොවන පන්තිවලට පමණි. අතුරුමුහුණත් මඟින් ඒවා ක්‍රියාත්මක කරන වර්ග වලට කිසිදු සීමාවක් නොමැත, නමුත් දත්ත සාමාජිකයන් හෝ ක්‍රම ක්‍රියාත්මක කිරීම් ඇතුළත් කළ නොහැක.

විවිධ දේ සඳහා ආදේශ කළ හැකි වර්ග සඳහා ප්‍රයෝජනවත් වන අවස්ථා තිබේ; මව්-වර්ගයේ දත්ත සාමාජිකයන් සහ ක්‍රම ක්‍රියාත්මක කිරීම තමන්ගේම යැයි සැලකීම වස්තූන් සඳහා ප්‍රයෝජනවත් වන වෙනත් අවස්ථා තිබේ. අතුරුමුහුණත් සහ වියුක්ත පංති අතර වෙනසක් කිරීම එම හැකියාවන් වඩාත් අදාළ අවස්ථාවන්හිදී භාවිතා කිරීමට ඉඩ දෙයි.


3

ප්‍රධාන කරුණු:

  • වියුක්ත පන්තියට දේපල, දත්ත ක්ෂේත්‍ර, ක්‍රම (සම්පූර්ණ / අසම්පූර්ණ) යන දෙකම තිබිය හැකිය.
  • ව්‍යුත්පන්න පංතියේ අභිබවා යා යුතු වියුක්ත යතුරුපදයකින් ක්‍රමයක් හෝ ගුණාංග අර්ථ දක්වන්නේ නම් (එහි කාර්යය තදින් සම්බන්ධ වූ ක්‍රියාකාරීත්වයක් ලෙස)
  • වියුක්ත පංතියේ ක්‍රමවේදය හෝ ගුණාංග සඳහා වියුක්ත මූල පදය නිර්වචනය කරන්නේ නම් ඔබට ක්‍රමවේදය නිර්වචනය කර දේපල සඳහා අගය ලබා ගැනීමට / සැකසීමට නොහැකි අතර එය ව්‍යුත්පන්න පන්තියේ අභිබවා යා යුතුය.
  • වියුක්ත පන්තිය බහු උරුමයට සහාය නොදක්වයි.
  • වියුක්ත පන්තියේ ඉදිකිරීම්කරුවන් අඩංගු වේ.
  • වියුක්ත පන්තියකට උප, කාර්යයන්, ගුණාංග සඳහා ප්‍රවේශ විකරණකාරක අඩංගු විය හැකිය.
  • ස්ථිතික විය හැක්කේ වියුක්ත පන්තියේ සම්පූර්ණ සාමාජිකයාට පමණි.
  • අතුරු මුහුණතක් වෙනත් අතුරුමුහුණතකින් පමණක් උරුම විය හැකි අතර වියුක්ත පන්තියකින් උරුම විය නොහැක, එහිදී වියුක්ත පන්තියකට වෙනත් වියුක්ත පන්තියකින් හෝ වෙනත් අතුරු මුහුණතකින් උරුම විය හැකිය.

වාසිය:

  • එය සියලු උප පංති එකම ධූරාවලියක් හෝ ප්‍රමිතියක් අනුගමනය කිරීමට බල කරන ආකාරයේ ගිවිසුමක් වේ.
  • විවිධ ක්‍රියාත්මක කිරීම් එකම ආකාරයේ නම් සහ පොදු හැසිරීම් හෝ තත්වයන් භාවිතා කරන්නේ නම් වියුක්ත පන්තිය භාවිතා කිරීම වඩා හොඳය.
  • අපි වියුක්ත පන්තියකට නව ක්‍රමයක් එකතු කළහොත් පෙරනිමි ක්‍රියාත්මක කිරීම සඳහා අපට විකල්පයක් ඇති අතර එබැවින් පවතින සියලුම කේත නිසි ලෙස ක්‍රියාත්මක විය හැකිය.
  • එය අතුරු මුහුණතට වඩා වේගයෙන් ක්‍රියාත්මක කිරීමට ඉඩ දෙයි. (අතුරු මුහුණතට අනුරූප පංතිවල සත්‍ය ක්‍රමය සොයා ගැනීමට වැඩි කාලයක් අවශ්‍ය වේ.)
  • එය තදින් හා ලිහිල්ව සම්බන්ධ කිරීම සඳහා භාවිතා කළ හැකිය.

විස්තර මෙතැනින් සොයා ගන්න ... http://pradeepatkari.wordpress.com/2014/11/20/interface-and-abstract-class-in-c-oops/


3

එය සාරාංශගත කළ හැකි කෙටිම ක්‍රමය interfaceනම්:

  1. සම්පූර්ණයෙන්ම වියුක්ත, හැරුණු විට defaultසහ staticක්‍රම; එයට නිර්වචන (ක්‍රම අත්සන් + ක්‍රියාත්මක කිරීම) defaultසහ staticක්‍රම ඇති අතර, එය සතුව ඇත්තේ වෙනත් ක්‍රම සඳහා ප්‍රකාශන (ක්‍රම අත්සන්) පමණි.
  2. පංතිවලට වඩා සැහැල්ලු නීතිවලට යටත්ව (පන්තියකට බහු interfaces ක්‍රියාත්මක interfaceකළ හැකි අතර, බහු interfaces වලින් උරුම විය හැකිය ). නිශ්චිතව දක්වා තිබුණත් නැතත් සියලු විචල්‍යයන් ව්‍යංගයෙන් නියත public static finalවේ. සියලුම සාමාජිකයන් publicනිශ්චිතව දක්වා තිබුණත් නැතත් ව්‍යංගයෙන් .
  3. ක්‍රියාත්මක කිරීමේ පන්තියට නිශ්චිත ලක්ෂණ ඇති බවට සහ / හෝ එකම අතුරු මුහුණත ක්‍රියාත්මක කරන වෙනත් පන්තියකට අනුකූල වන බවට සහතිකයක් ලෙස සාමාන්‍යයෙන් භාවිතා වේ.

මේ අතර, abstractපන්තියක් වන්නේ:

  1. abstractක්‍රම එකක් හෝ කිහිපයක් තිබීමේ ප්‍රවණතාවක් ඇති, සම්පූර්ණ වියුක්තයේ සිට පූර්ණ ලෙස ක්‍රියාත්මක වන ඕනෑම තැනක . ප්‍රකාශන ලෙස සලකුණු කර ඇති ප්‍රකාශ සහ අර්ථ දැක්වීම් යන දෙකම අඩංගු විය හැකියabstract .
  2. අංගසම්පූර්ණ පංතියක් වන අතර, එය ක්ෂණිකව කළ නොහැකි කොන්දේසියක් මත (එය සම්පුර්ණයෙන්ම ක්‍රියාත්මක වන බවට සහතිකයක් නොමැති නිසා) වෙනත් පංති පාලනය කරන නීතිවලට (එක් පන්තියකින් පමණක් උරුම විය හැකිය) යටත් වේ. නියත නොවන සාමාජික විචල්‍යයන් තිබිය හැක. , සාමාජික ප්රවේශ පාලනය ක්රියාත්මක කළ හැකි ලෙස සාමාජිකයන් සීමා protected, privateහෝ (සඳහන් නොකළ) පෞද්ගලික පැකේජය.
  3. බහු උප පංති වලට බෙදා ගත හැකි තරම් ක්‍රියාත්මක කිරීම සැපයීමට හෝ ක්‍රමලේඛකයාට සැපයිය හැකි තරම් ක්‍රියාත්මක කිරීම සැපයීමට සාමාන්‍යයෙන් භාවිතා වේ.

හෝ, අප සියලු බැස තනි වාක්යයක් කිරීමට එය සීඝ්රයෙන් කිරීමට අවශ්ය නම්: ඇන් interfaceක්රියාත්මක පන්ති දේ ඇත , නමුත් abstractපන්තිය උපපංතිය දේ වේ .


3

අර්ථවත් වන තවත් වෙනසක් එක් කිරීමට මම කැමතියි. උදාහරණයක් ලෙස, ඔබට කේත පේළි දහස් ගණනක් සහිත රාමුවක් ඇත. දැන් ඔබට වැඩි දියුණු කිරීමේ ක්‍රමයක් භාවිතා කරමින් කේතය පුරා නව අංගයක් එක් කිරීමට අවශ්‍ය නම්, එම ක්‍රමය අතුරු මුහුණතේ නොව වියුක්ත පන්තියේ එකතු කිරීම වඩා හොඳය. මන්ද, ඔබ මෙම ක්‍රමය අතුරු මුහුණතක එකතු කළහොත් ඔබ එය ක්‍රියාත්මක කරන ලද සියලුම පන්තියේ ක්‍රියාත්මක කළ යුතු නමුත් ඔබ එම ක්‍රමය වියුක්ත පන්තියේ එකතු කළහොත් එය එසේ නොවේ.


3

සරල නමුත් පැහැදිලි පිළිතුරක් ලබා දීම සඳහා, එය සන්දර්භය සැකසීමට උපකාරී වේ: සම්පූර්ණ ක්‍රියාත්මක කිරීම් ලබා දීමට ඔබට අවශ්‍ය නැති විට ඔබ දෙකම භාවිතා කරයි.

එවිට ඇති ප්‍රධාන වෙනස නම් අතුරු මුහුණතක් කිසිසේත්ම ක්‍රියාත්මක නොකිරීමයි (ශරීරයක් නොමැති ක්‍රම පමණි) වියුක්ත පංතිවලට ශරීරයක් සමඟ සාමාජිකයන් හා ක්‍රම තිබිය හැකිය, එනම් අර්ධ වශයෙන් ක්‍රියාත්මක කළ හැකිය.


ඔබ දැන් එයට පිළිතුරු දී ඇති බැවින්, ඔබේ පිළිතුර defaultජාවා 8 හි ඇති මූලික පදය සැලකිල්ලට නොගනී, එමඟින් ඔබට අතුරු මුහුණත් වල කොන්ක්‍රීට් ක්‍රම නිර්වචනය කළ හැකිය.
philantrovert

මා පැවසූ පරිදි මෙය වෙනස කුමක්දැයි ඉගෙන ගන්නා අවධියේ යමෙකුට “සරල නමුත් පැහැදිලි පිළිතුරක්” විය යුතුය. එවැනි කෙනෙකුට, එවැනි ව්‍යතිරේකයක් ගැන දැන ගැනීමෙන් කිසිදු ප්‍රයෝජනයක් නැත, එය ඉතා ව්‍යාකූල වනු ඇත.
user3775501

3

සැබෑ ක්‍රියාත්මක කිරීම වෙනුවෙන් වියුක්ත පන්තිය සහ අතුරු මුහුණත අතර වෙනස්කම්.

අතුරුමුහුණත : එය යතුරු පදයක් වන අතර එය වස්තුවක අච්චුව හෝ නිල් මුද්‍රණය නිර්වචනය කිරීමට භාවිතා කරන අතර එය සියලු උප පංති එකම මූලාකෘතියක් අනුගමනය කරන ලෙස බල කරයි. ක්‍රියාත්මක කිරීමේදී සියලු උප පංති වලට අනුව ක්‍රියාකාරීත්වය ක්‍රියාත්මක කිරීමට නිදහස ඇත. එය අවශ්‍යතාවයයි.

අප අතුරු මුහුණත භාවිතා කළ යුතු වෙනත් භාවිත අවස්ථා කිහිපයක්.

බාහිර වස්තු දෙකක් අතර සන්නිවේදනය (අපගේ යෙදුමේ තෙවන පාර්ශවීය ඒකාබද්ධතාවය) මෙහි අතුරු මුහුණත හරහා සිදු කෙරේ. අතුරු මුහුණත කොන්ත්‍රාත්තුවක් ලෙස ක්‍රියා කරයි.

සාරාංශ පංතිය: සාරාංශය, එය මූල පදයක් වන අතර ඕනෑම පංතියකට පෙර අප මෙම මූල පදය භාවිතා කරන විට එය වියුක්ත පංතියක් බවට පත්වේ. එය ප්‍රධාන වශයෙන් භාවිතා කරනුයේ අච්චුව නිර්වචනය කිරීමට අවශ්‍ය වන විට මෙන්ම වස්තුවක පෙරනිමි ක්‍රියාකාරිත්වයයි. උප පංති සහ මේ ආකාරයෙන් එය අතිරික්ත කේතය ඉවත් කරන අතර අපට වියුක්ත පංතිය භාවිතා කළ හැකි තවත් එක් භාවිත අවස්ථා, වෙනත් පංතිවලට පන්තියේ වස්තුවක් ක්ෂණිකව ක්ෂණිකව දැක්විය නොහැකි බැවින්, ව්‍යුත්පන්න පංතිවලට පමණක් ක්‍රියාකාරීත්වය භාවිතා කළ හැකිය.

වියුක්ත පන්තියේ උදාහරණය:

 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");
        }
    }

3

අතුරු මුහුණත සහ වියුක්ත පන්තිය අතර පැහැදිලි වෙනසක් ඔබට සොයාගත හැකිය .

අතුරුමුහුණත

  • අතුරුමුහුණතේ අඩංගු වන්නේ වියුක්ත ක්‍රම පමණි.
  • අතුරුමුහුණත ක්‍රියාත්මක කිරීමේදී සියලු ක්‍රම ක්‍රියාත්මක කිරීමට පරිශීලකයින්ට බල කරන්න.
  • අවසාන සහ ස්ථිතික විචල්‍යයන් පමණක් අඩංගු වේ.
  • අතුරුමුහුණත් භාවිතා කර ප්‍රකාශ කරන්න.
  • අතුරුමුහුණතක සියලුම ක්‍රම පොදු ලෙස අර්ථ දැක්විය යුතුය.
  • අතුරු මුහුණතක් දිගු කළ හැකිය හෝ පන්තියකට වෙනත් අතුරු මුහුණත් කිහිපයක් ක්‍රියාත්මක කළ හැකිය.

වියුක්ත පන්තිය

  • වියුක්ත පන්තියේ වියුක්ත හා වියුක්ත නොවන ක්‍රම අඩංගු වේ.

  • වියුක්ත පංතිය උරුම වූ විට සියලු ක්‍රම ක්‍රියාත්මක කිරීමට පරිශීලකයින්ට බල නොකරයි.

  • ප්‍රාථමික සහ ප්‍රාථමික නොවන ඇතුළු සියලු වර්ගවල විචල්‍යයන් අඩංගු වේ

  • වියුක්ත යතුරුපදය භාවිතා කරමින් ප්‍රකාශ කරන්න.

  • වියුක්ත පංතියක ක්‍රම සහ සාමාජිකයන් ඕනෑම දෘශ්‍යතාවයකින් අර්ථ දැක්විය හැකිය.

  • ළමා පන්තියකට දිගු කළ හැක්කේ තනි පන්තියක් (වියුක්ත හෝ කොන්ක්‍රීට්) පමණි.


2

වියුක්ත පංතියක් යනු වස්තුවක් නිර්මාණය කළ නොහැකි හෝ ක්ෂණිකව කළ නොහැකි පන්තියකි. වියුක්ත ක්‍රමයක් මඟින් පන්තියක් වියුක්ත කරයි. වියුක්ත පංතියේ ප්‍රකාශිත ක්‍රම ඉක්මවා යාම සඳහා වියුක්ත පන්තියක් උරුම කර ගත යුතුය. ප්‍රවේශ පිරිවිතරයන්ට කිසිදු සීමාවක් නොමැත. වියුක්ත පංතියකට ඒවා තුළ ඉදිකිරීම්කරු සහ වෙනත් කොන්ක්‍රීට් (වියුක්ත නොවන ක්‍රම) ක්‍රම තිබිය හැකි නමුත් අතුරු මුහුණතට තිබිය නොහැක.

අතුරුමුහුණතක් යනු ක්‍රමලේඛ සැලැස්මක් / අච්චුවකි. (උදා: කඩදාසි මත නිවසක් ලබා දී ඇත (අතුරුමුහුණත් නිවස) සහ විවිධ ගෘහ නිර්මාණ ශිල්පීන් එය ගොඩනඟා ගැනීම සඳහා ඔවුන්ගේ අදහස් භාවිතා කරනු ඇත (ගෘහ අතුරු මුහුණත ක්‍රියාත්මක කරන ගෘහ නිර්මාණ ශිල්පීන්ගේ පන්ති) එය එකතුවකි වියුක්ත ක්‍රම, පෙරනිමි ක්‍රම, ස්ථිතික ක්‍රම, අවසාන විචල්‍යයන් සහ කැදැලි පන්ති. සියලුම සාමාජිකයන් අවසාන හෝ පොදු, ආරක්ෂිත සහ පුද්ගලික ප්‍රවේශ පිරිවිතරයන්ට ඉඩ නොදේ. වස්තු නිර්මාණය කිරීමට අවසර නැත. භාවිතා කිරීම සඳහා පන්තියක් සෑදිය යුතුය. අතුරුමුහුණත ක්‍රියාත්මක කිරීම සහ අතුරු මුහුණතේ ප්‍රකාශිත වියුක්ත ක්‍රමවේදය අභිබවා යාම. අතුරු මුහුණතක් යනු ලිහිල් සම්බන්ධතාවයට හොඳ උදාහරණයකි (ගතික බහුමාපකය / ගතික බන්ධනය) අතුරු මුහුණතක් බහුමාපකය හා වියුක්තකරණය ක්‍රියාත්මක කරයි. ක්‍රියාත්මක කිරීමේ පන්තිය, උදා.sa කාර් සමාගමක් වන අතර, එය නිෂ්පාදනය කරන සියලුම මෝටර් රථ සඳහා සමහර විශේෂාංග සමාන විය යුතු අතර එමඟින් සමාගම විසින් අතුරු මුහුණත් වාහනයක් නිපදවනු ඇති අතර එමඟින් එම අංගයන්ගෙන් සමන්විත වන අතර විවිධ වර්ගයේ මෝටර් රථ (මරුටි සුස්කි, මරුටි 800 වැනි) අභිබවා යනු ඇත. එම ලක්ෂණ (කාර්යයන්).

අපට දැනටමත් වියුක්ත පංතියක් ඇති විට අතුරු මුහුණතක් ඇයි? ජාවා සහාය දක්වන්නේ බහු මට්ටමේ සහ ධූරාවලි උරුමයට පමණි, නමුත් අතුරු මුහුණතේ ආධාරයෙන් අපට බහු උරුමයක් ක්‍රියාත්මක කළ හැකිය.


2

ප්‍රායෝගිකත්වය අනුව (ජාවා), වියුක්ත පන්තිය සහ අතුරුමුහුණත අතර ඇති ප්‍රධාන වෙනස වන්නේ වියුක්ත පන්තියට තත්වය රඳවා ගත හැකිය. රාජ්‍යය රඳවා තබා ගැනීමට අමතරව අපට අතුරු මුහුණත සමඟ විවේක මෙහෙයුම් ද ලබා ගත හැකිය.


1

අතුරුමුහුණතකදී සියලු ක්‍රම නිර්වචන පමණක් විය යුතුය, තනි එකක් ක්‍රියාත්මක නොකළ යුතුය.

නමුත් වියුක්ත පංතියක අර්ථ දැක්වීමක් සහිත වියුක්ත ක්‍රමයක් තිබිය යුතුය, නමුත් වෙනත් ක්‍රම ක්‍රියාත්මක කිරීමත් සමඟ වියුක්ත පන්තියේ විය හැකිය ...


1

අතුරුමුහුණත සහ වියුක්ත පන්තිය අතර අපට විවිධ ව්‍යුහාත්මක / සින්ටැක්ටිකල් වෙනසක් ඇත. තවත් වෙනස්කම් කිහිපයක් තිබේ

[1] සිදුවීම පදනම් කරගත් වෙනස :

මව් පංතියේ වස්තුවක් නිර්මාණය කිරීම සඳහා පරිශීලකයා සීමා කිරීමට අවශ්‍ය අවස්ථාවන්හිදී වියුක්ත පන්ති භාවිතා කරනු ලබන අතර අනාගතයේ දී තවත් වියුක්ත ක්‍රම එකතු වනු ඇතැයි අපි විශ්වාස කරමු.

සැපයීමට තවත් වියුක්ත ක්‍රමයක් ඉතිරි කළ නොහැකි බව අපට විශ්වාසයි නම් අතුරු මුහුණත භාවිතා කළ යුතුය. එවිට ප්රකාශයට පත් කරන්නේ අතුරු මුහුණතක් පමණි.

[2] සංකල්පීය වෙනස :

ඔව්, එය වියුක්ත පංතියක් බවට පත් කරන්නේ නම් සහ එය අතුරු මුහුණතක් බවට පත් කරන්නේ නම් "අනාගතයේ දී අපට තවත් වියුක්ත ක්‍රම ලබා දිය යුතුද?"

(ජාවා 1.7 වන තෙක් වඩාත් සුදුසු සහ වලංගු වේ)


1

සාමාන්‍යයෙන් වියුක්ත පංතිය යම් දෙයක හරය සඳහා භාවිතා කරන නමුත් පර්යන්ත එකතු කිරීම සඳහා භාවිතා කරන අතුරු මුහුණත.

ඔබට වාහනය සඳහා මූලික වර්ගයක් නිර්මාණය කිරීමට අවශ්‍ය විට ඔබ වියුක්ත පන්තිය භාවිතා කළ යුතු නමුත් වාහනයේ මූලික සංකල්පයේ කොටසක් නොවන යම් ක්‍රියාකාරීත්වයක් හෝ දේපලක් එක් කිරීමට අවශ්‍ය නම් ඔබ අතුරු මුහුණත භාවිතා කළ යුතුය, උදාහරණයක් ලෙස ඔබට "ToJSON ()" ශ්‍රිතය එක් කිරීමට අවශ්‍යය. .

අතුරුමුහුණතට වියුක්ත පන්තියට වඩා පුළුල් පරාසයක සාරාංශයක් ඇත. තර්ක සම්මත කිරීමේදී ඔබට මෙය දැකිය හැකිය. මෙම උදාහරණය බලන්න:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

ඔබ වාහනය තර්කයක් ලෙස භාවිතා කරන්නේ නම්, ඔබට එහි ව්‍යුත්පන්න වර්ගයක් භාවිතා කළ හැකිය (බස් හෝ කාර්-එකම කාණ්ඩය-වාහන කාණ්ඩය). නමුත් ඔබ IMoveable අතුරුමුහුණත තර්කයක් ලෙස භාවිතා කරන විට ඔබට තවත් තේරීම් ඇත.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.