OOP හි ඇති සංයුතිය කුමක්දැයි මට වැටහී ඇත, නමුත් එකතුව යනු කුමක්ද යන්න පිළිබඳ පැහැදිලි අදහසක් ලබා ගැනීමට මට නොහැකි විය. යමෙකුට පැහැදිලි කළ හැකිද?
OOP හි ඇති සංයුතිය කුමක්දැයි මට වැටහී ඇත, නමුත් එකතුව යනු කුමක්ද යන්න පිළිබඳ පැහැදිලි අදහසක් ලබා ගැනීමට මට නොහැකි විය. යමෙකුට පැහැදිලි කළ හැකිද?
Answers:
සරල නීති:
උදාහරණ 1:
සමාගමක් යනු මිනිසුන්ගේ එකතුවකි. සමාගමක් යනු ගිණුම්වල සංයුතියකි. සමාගමක් ව්යාපාර කිරීම නැවැත්වූ විට එහි ගිණුම් අහෝසි වන නමුත් එහි ජනතාව දිගටම පවතී.
උදාහරණ 2: (ඉතා සරල)
පෙළ සංස්කාරකයෙකුට ස්වාරක්ෂක (සංයුතිය) ඇත. පෙළ සංස්කාරකයක් ගොනුවක් භාවිතා කරයි (එකතුව). පෙළ සංස්කාරකය වසා ඇති විට, බෆරය විනාශ වන නමුත් ගොනුවම විනාශ නොවේ.
Http://en.wikipedia.org/wiki/Object_composition වෙතින්
සමස්ථකරණය සාමාන්ය සංයුතියට වඩා වෙනස් වන අතර එය හිමිකාරිත්වය ඇඟවුම් නොකරයි. සංයුතියේ දී, අයිති වස්තුව විනාශ වූ විට, අඩංගු වස්තු ද එසේමය. සමස්ථයක් ලෙස ගත් කල, මෙය අනිවාර්යයෙන්ම සත්ය නොවේ. උදාහරණයක් ලෙස, විශ්ව විද්යාලයකට විවිධ දෙපාර්තමේන්තු (උදා: රසායන විද්යාව) අයත් වන අතර සෑම දෙපාර්තමේන්තුවක්ම මහාචාර්යවරුන් ගණනාවක් ඇත. විශ්ව විද්යාලය වසා දැමුවහොත්, දෙපාර්තමේන්තු තවදුරටත් නොපවතින නමුත් එම දෙපාර්තමේන්තු වල මහාචාර්යවරු දිගටම පවතිනු ඇත. එබැවින් විශ්ව විද්යාලයක් දෙපාර්තමේන්තු වල සංයුතියක් ලෙස දැකිය හැකි අතර දෙපාර්තමේන්තු වල මහාචාර්යවරුන්ගේ එකතුවක් ඇත. ඊට අමතරව, මහාචාර්යවරයෙකුට එක් දෙපාර්තමේන්තුවකට වඩා වැඩ කළ හැකි නමුත් දෙපාර්තමේන්තුවක් එක් විශ්ව විද්යාලයකට වඩා වැඩි ගණනක කොටසක් විය නොහැක.
එබැවින් - ඔබ සංයුතිය සමඟ හිමිකාරීත්ව සම්බන්ධතාවයක් ඇති අතර හිමිකරු සිටින විට අයිති වස්තුවද විනාශ වේ - එකතුවක් (සහ අඩංගු වස්තු) ස්වාධීනව පැවතිය හැකිය.
-
යාවත්කාලීන කිරීම: සමාව ඉල්ලීම - මෙම පිළිතුර පසු විපරමෙහි ඉතා සරල ය.
Ur කර්ටිස් බට් ඔහුගේ පිළිතුරෙහි විශිෂ්ට අර්ථ දැක්වීමක් සපයයි: එකතුව හා සංයුතිය
සංයුතිය යනු සංගමයකි
සමස්ථකරණය යනු සංගමයකි
සංයුතිය ශක්තිමත් සංගමයකි (අඩංගු වස්තුවක ආයු කාලය මුළුමනින්ම රඳා පවතින්නේ බහාලුම් වස්තුව මත නම්, එය ශක්තිමත් ඇසුර ලෙස හැඳින්වේ)
සමුච්චය කිරීම දුර්වල සංගමයකි (අඩංගු වස්තුවක ආයු කාලය බහාලුම් වස්තුව මත රඳා නොපවතී නම්, එය දුර්වල ඇසුර ලෙස හැඳින්වේ)
උදාහරණයක්:
class Contained {
public void disp() {
System.out.println("disp() of Contained A");
}
}
public class Container {
private Contained c;
//Composition
Container() {
c = new Contained();
}
//Association
public Contained getC() {
return c;
}
public void setC(Contained c) {
this.c = c;
}
public static void main(String[] args) {
Container container = new Container();
Contained contained = new Contained();
container.setC(contained);
}
}
තනි පැහැදිලි කිරීමක් නොමැත. විවිධ කතුවරුන් එකතුවෙන් විවිධ දේ අදහස් කරයි. බොහෝමයක් එයින් නිශ්චිත කිසිවක් අදහස් නොකරයි.
සංයුතිය (මිශ්රණය) යනු සරල වස්තූන් හෝ දත්ත වර්ග වඩාත් සංකීර්ණ ඒවාට ඒකාබද්ධ කිරීමේ ක්රමයකි. සංයුතිය යනු බොහෝ මූලික දත්ත ව්යුහයන්ගේ තීරණාත්මක ගොඩනැඟිලි කොටසකි
සමුච්චය කිරීම (එකතු කිරීම) සාමාන්ය සංයුතියට වඩා වෙනස් වන අතර එය හිමිකාරිත්වය අදහස් නොකරයි. සංයුතියේ දී, අයිති වස්තුව විනාශ වූ විට, අඩංගු වස්තු ද එසේමය. සමස්ථයක් ලෙස ගත් කල, මෙය අනිවාර්යයෙන්ම සත්ය නොවේ
╔═══════════╦═════════════════════════╦═══════════════════════╗
║ ║ Aggregation ║ Composition ║
╠═══════════╬═════════════════════════╬═══════════════════════╣
║ Life time ║ Have their own lifetime ║ Owner's life time ║
║ Relation ║ Has ║ part-of ║
║ Example ║ Car has driver ║ Engine is part of Car ║
╚═══════════╩═════════════════════════╩═══════════════════════╝
දෙකම වස්තුව අතර සම්බන්ධතාවය නිරූපණය කරන අතර ඒවායේ ශක්තියෙන් පමණක් වෙනස් වේ.
පංති දෙකක් අතර විවිධ ආකාරයේ යැපීම් සඳහා යූඑම්එල් අංකනය
සංයුතිය : එන්ජිම මෝටර් රථයේ කොටසක් බැවින් ඒවා අතර සම්බන්ධතාවය සංයුතිය වේ. ජාවා පන්ති අතර ඒවා ක්රියාත්මක වන ආකාරය මෙන්න.
public class Car {
//final will make sure engine is initialized
private final Engine engine;
public Car(){
engine = new Engine();
}
}
class Engine {
private String type;
}
සමුච්චය කිරීම : සංවිධානයට පුද්ගලයන් ලෙස සේවකයින් සිටින බැවින් ඔවුන් අතර සම්බන්ධතාවය සමස්ථකරණය වේ. ජාවා පංති අනුව ඒවා පෙනෙන්නේ කෙසේද යන්න මෙන්න
public class Organization {
private List employees;
}
public class Person {
private String name;
}
සමුච්චය කිරිගරු of මල්ලක් වැනි සරල එකතුවකි
සංයුතිය යනු කොටුවක ඇති ඉඟි වැනි අභ්යන්තර / ක්රියාකාරී පරායත්තතාවයන් ය
කාර් සමස්ත මගීන්; ඔවුන් මෝටර් රථයේ ක්රියාකාරිත්වය බිඳ දැමීමෙන් තොරව ඇතුළට හා පිටතට පැමිණේ
ටයර් යනු සංරචක ය; එකක් ඉවත් කරන්න, මෝටර් රථය තවදුරටත් නිවැරදිව ක්රියා නොකරයි
[සටහන: අමතර ටයරය සමස්තයකි!]
මම සෑම විටම සංයුතිය දෙස බලන්නේ 'අවශ්යයි', එනම් මෝටර් රථයකට එන්ජිමක් අවශ්ය වන අතර , සමුච්චය කිරීම 'අරමුණක් හා සම්බන්ධ දේවල්' ලෙස මම සලකමි. එබැවින් මෝටර් රථ ප්රතිසමයන් සමඟ රැඳී සිටීම, මගේ එකතුව වන්නේ මෝටර් රථයක් සහ මගීන් එකට ගෙන ඒම ඇතුළත් ගමනක් නිරූපණය කිරීමයි. ගමනට මෝටර් රථය හෝ මගීන් අයිති නැත, මම විශේෂිත සිදුවීමක් සඳහා අදාළ දත්ත එක්රැස් කරමි. ගමන අවසන් වූ පසු මෝටර් රථය සහ මගීන් ඉදිරියට යයි. මෝටර් රථයක් අවසන් වූ විට, මෝටර් රථය සහ එහි එන්ජිම සාමාන්යයෙන් එකට විනාශ වේ.
අර්ථාන්විතව, සියලුම කට්ටල උප කුලක වලින් සාදා ඇත, නේද? එබැවින්:
සමුච්චය කිරීම යනු එම උප කුලක පියාගේ කට්ටලයට වඩා ස්වාධීනව පවතින විටය. මොනිටරයක් වෙනත් පරිගණකයකට සම්බන්ධ කිරීම සඳහා පරිගණකයෙන් ඉවත් කළ හැකිය.
සංයුතිය යනු එම උප කුලක පියාගේ කට්ටලයේ පැවැත්ම මත රඳා පවතින විට ය. කොළයක් ගසක කොටසක් හෝ අක්මාව ශරීරයේ කොටසකි.
මෙම සංකල්ප සංකල්පමය වශයෙන් වස්තු දෙකක් හෝ පන්ති අතර පරායත්තතාව ගැන කතා කරයි. කෙලින්ම වැඩසටහනක, සමස්ථයක් තුළ, පියා වස්තුව බැහැර කරන විට, සමස්ත වස්තු ද බැහැර කළ යුතුය. සංයුතියක් සඳහා එකම අවස්ථාවෙහිදී, සංයුක්ත පුත් වස්තූන් පවතිනු ඇත, එවිට පියාගේ වස්තුව බෙදා හරිනු ලැබේ.
මෙම සරල උදාහරණය ගැන:
වස්තු සමූහයක් යනු සංයුතියකි. වස්තූන් වෙත දර්ශක සමූහයක් යනු එකතුවකි.
මම පළමුවැන්න මකා දැමුවහොත් එහි අන්තර්ගතය එය සමඟ අතුරුදහන් වේ. දෙවැන්න, අනෙක් අතට එහි සාමාජිකයන්ගේ පැවැත්මට කිසිදු බලපෑමක් නොකර අතුරුදහන් විය හැකිය.