ක්‍රියාකාරී වැඩසටහන් මඟින් GoF සැලසුම් රටා ප්‍රතිස්ථාපනය කරයිද?


1050

මම පසුගිය වසරේ F # සහ OCaml ඉගෙනීම ආරම්භ කළ දා සිට , නිර්මාණ රටා (විශේෂයෙන් ජාවාහි) අත්‍යවශ්‍ය භාෂාවල නැතිවී ඇති අංග සඳහා විසඳුම් ලෙස අවධාරනය කරන ලිපි විශාල ප්‍රමාණයක් කියවා ඇත්තෙමි. මා සොයාගත් එක් ලිපියක් තරමක් ශක්තිමත් ප්‍රකාශයක් කරයි :

මට මුණගැසුණු බොහෝ අය කල්ලියේ හතරේ (GoF) නිර්මාණ රටා පොත කියවා ඇත . ඕනෑම ආත්ම ගෞරවණීය ක්‍රමලේඛකයෙකු ඔබට කියනු ඇත්තේ පොත භාෂා අ nost ෙයවාදියා වන අතර ඔබ කුමන භාෂාව භාවිතා කළත් පොදුවේ මෘදුකාංග ඉංජිනේරු විද්‍යාවට රටා අදාළ වන බවයි. මෙය උතුම් ප්‍රකාශයකි. අවාසනාවට එය සත්‍යයෙන් බොහෝ දුරස් වී ඇත.

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

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

මීට අමතරව, OOP (F # සහ OCaml වැනි) සඳහා සහය දක්වන ක්‍රියාකාරී භාෂාවල, මෙම භාෂාවන් භාවිතා කරන ක්‍රමලේඛකයින් අනෙක් සෑම OOP භාෂාවකටම ලබා ගත හැකි මෝස්තර රටා භාවිතා කරන බව මට පැහැදිලිය. ඇත්ත වශයෙන්ම, දැන් මම සෑම දිනකම F # සහ OCaml භාවිතා කරන අතර, මෙම භාෂාවන්හි මා භාවිතා කරන රටා හා එදිරිව. මම ජාවා හි ලියන විට භාවිතා කරන රටාවන් අතර කැපී පෙනෙන වෙනස්කම් නොමැත.

ක්‍රියාකාරී ක්‍රමලේඛනය මඟින් OOP සැලසුම් රටාවන්හි අවශ්‍යතාවය ඉවත් කරයි යන ප්‍රකාශයට සත්‍යතාවයක් තිබේද? එසේ නම්, සාමාන්‍ය OOP සැලසුම් රටාවක් සහ එහි ක්‍රියාකාරී සමානකම් පිළිබඳ උදාහරණයක් පළ කිරීමට හෝ සම්බන්ධ කිරීමට ඔබට හැකිද?


18
ඔබට ස්ටීව් යෙග්ගේ ( steve-yegge.blogspot.com/2006/03/… )
රැල්ෆ්

27
“පොත භාෂා අ nost ෙයවාදියා වන අතර රටා පොදුවේ මෘදුකාංග ඉංජිනේරු විද්‍යාවට අදාළ වේ” - සමහර භාෂාවන්ට මෝස්තර රටා වැනි යම් යම් දේ ප්‍රකාශ කිරීමට අවශ්‍ය නොවන අර්ථයෙන් පොත මෙම ප්‍රකාශයට එකඟ නොවන බව සැලකිල්ලට ගත යුතුය: “අපගේ රටා ස්මාල්ටෝක් / සී ++ මට්ටමේ භාෂා අංග උපකල්පනය කරන්න, එම තේරීම පහසුවෙන් ක්‍රියාත්මක කළ හැකි හා කළ නොහැකි දේ තීරණය කරයි [...] ක්ලෝස් සතුව බහු ක්‍රම තිබේ, උදාහරණයක් ලෙස, අමුත්තෙකු වැනි රටාවක අවශ්‍යතාවය අඩු කරයි (පිටුව 331). ” (පිටුව 4)
ගිල්ඩන්ස්ටර්න්

6
බොහෝ නිර්මාණ රටාවන් ප්‍රමාණවත් තරම් ඉහළ මට්ටමේ අත්‍යවශ්‍ය භාෂාවලින් පවා අවශ්‍ය නොවන බව මතක තබා ගන්න.
ආර්. බාසෙල්

3
@ ආර්. බාර්සෙල් “ප්‍රමාණවත් තරම් ඉහළ මට්ටමේ අත්‍යවශ්‍ය භාෂා” මොනවාද? ස්තූතියි.
cibercitizen1

5
order ඉහළ ඇණවුම් කාර්යයන් සහ නිර්නාමික කාර්යයන් සඳහා සහාය ඇති cibercitizen1 තාරා-ටයිප් කළ භාෂා. මෙම අංගයන් මඟින් බොහෝ මෝස්තර රටා සැපයීමට අදහස් කරන ලද බලයෙන් වැඩි ප්‍රමාණයක් සපයයි.
ආර්. බාර්සෙල්

Answers:


1080

ඔබ උපුටා ගත් බ්ලොග් සටහන එහි ප්‍රකාශය තරමක් ඉක්මවා යයි. FP සැලසුම් රටා වල අවශ්‍යතාවය තුරන් නොකරයි . එෆ්පී භාෂාවලින් එකම දේ විස්තර කිරීම සඳහා “සැලසුම් රටා” යන යෙදුම පුළුල් ලෙස භාවිතා නොවේ. නමුත් ඒවා පවතී. ක්‍රියාකාරී භාෂාවන්හි “ඔබට X ගැටලුව ඇති වූ විට, Y ලෙස පෙනෙන කේතය භාවිතා කරන්න” යන ආකෘතියේ හොඳම ප්‍රායෝගික නීති ඕනෑ තරම් තිබේ, එය මූලික වශයෙන් නිර්මාණ රටාවකි.

කෙසේ වෙතත්, බොහෝ OOP විශේෂිත මෝස්තර රටා ක්‍රියාකාරී භාෂාවලට බොහෝ දුරට අදාළ නොවන බව නිවැරදිය.

සාමාන්‍යයෙන් මෝස්තර රටා පවතින්නේ භාෂාවේ අඩුපාඩු මඟහරවා ගැනීම සඳහා යැයි පැවසීම විශේෂයෙන් මතභේදාත්මක විය යුතු යැයි මම නොසිතමි . වෙනත් භාෂාවකට එකම ගැටළුව සුළු වශයෙන් විසඳිය හැකි නම්, වෙනත් භාෂාවක් සඳහා ඒ සඳහා මෝස්තර රටාවක් අවශ්‍ය නොවේ. එම භාෂාව භාවිතා කරන්නන් ගැටලුව පවතින බව නොදැන සිටිය හැක , මන්ද, එය එම භාෂාවේ ගැටලුවක් නොවන බැවිනි.

සිව්දෙනාගේ කල්ලියට මෙම ප්‍රශ්නය ගැන කීමට ඇත්තේ මෙයයි:

ක්‍රමලේඛන භාෂාව තෝරා ගැනීම වැදගත් වන්නේ එය කෙනෙකුගේ දෘෂ්ටිකෝණයට බලපෑම් කරන බැවිනි. අපගේ රටා ස්මාල්ටෝක් / සී ++ මට්ටමේ භාෂා අංග උපකල්පනය කරයි, එම තේරීම පහසුවෙන් ක්‍රියාත්මක කළ හැකි හා කළ නොහැකි දේ තීරණය කරයි. අපි කාර්ය පටිපාටික භාෂාවන් උපකල්පනය කළේ නම්, අපි "උරුමය", "සංසරණය" සහ "බහුමාපකය" යනුවෙන් හැඳින්වෙන මෝස්තර රටා ඇතුළත් කර තිබිය හැකිය. ඒ හා සමානව, අපගේ සමහර රටාවන්ට අඩු පොදු වස්තු-නැඹුරු භාෂාවන් විසින් සෘජුවම සහාය දක්වයි. CLOS සතුව බහු ක්‍රම තිබේ, උදාහරණයක් ලෙස, අමුත්තෙකු වැනි රටාවක අවශ්‍යතාවය අඩු කරයි. ඇත්ත වශයෙන්ම, ස්මාල්ටෝක් සහ සී ++ අතර ප්‍රමාණවත් වෙනස්කම් ඇති අතර එයින් අදහස් කරන්නේ සමහර රටා එක් භාෂාවකට වඩා පහසුවෙන් අනෙක් භාෂාවට වඩා පහසුවෙන් ප්‍රකාශ කළ හැකි බවයි. (උදාහරණයක් ලෙස ඉටරේටර් බලන්න.)

(ඉහත දැක්වෙන්නේ නිර්මාණ රටා හඳුන්වාදීමේ පොත, 4 වන පිටුව, 3 වන ඡේදය)

ක්‍රියාකාරී ක්‍රමලේඛනයේ ප්‍රධාන අංග අතර පළමු පන්තියේ අගයන්, ව්‍යංජන, වෙනස් කළ නොහැකි අගයන් යනාදිය ඇතුළත් වේ. OO සැලසුම් රටා එම ඕනෑම අංගයක් ආසන්න වශයෙන් ගණනය කරන බව මට නොපෙනේ.

පළමු පන්තියේ කාර්යයන් ආසන්න වශයෙන් නොවේ නම් විධාන රටාව කුමක්ද? :) එෆ්පී භාෂාවෙන්, ඔබ හුදෙක් ශ්‍රිතයක් වෙනත් ශ්‍රිතයකට තර්කය ලෙස සම්මත කරයි. OOP භාෂාවෙන්, ඔබට ශ්‍රිතය පන්තියක ඔතා තැබිය යුතු අතර, එමඟින් ඔබට ක්ෂණිකව ක්‍රියාත්මක කළ හැකි අතර එම වස්තුව අනෙක් ශ්‍රිතයට යොමු කළ හැකිය. බලපෑම එක හා සමානයි, නමුත් OOP හි එය සැලසුම් රටාවක් ලෙස හැඳින්වෙන අතර එයට තවත් බොහෝ කේත අවශ්‍ය වේ. ව්‍යංජන නොකළහොත් වියුක්ත කර්මාන්තශාලා රටාව කුමක්ද? වරකට යම් කාර්යයකට පරාමිතීන් යොමු කරන්න, ඔබ එය අවසාන වශයෙන් අමතන විට එය කුමන ආකාරයේ අගයක් විහිදුවයිද යන්න වින්‍යාස කිරීමට.

ඔව්, වඩා බලවත් හා භාවිතයට පහසු විකල්ප පවතින බැවින් GoF සැලසුම් රටා කිහිපයක් FP භාෂාවලින් අතිරික්ත වේ.

නමුත් ඇත්ත වශයෙන්ම FP භාෂාවලින් විසඳා නැති නිර්මාණ රටා තවමත් පවතී . සිංගල්ටන් එකකට සමාන FP යනු කුමක්ද? (සිංගල්ටන් යනු සාමාන්‍යයෙන් භාවිතා කිරීමට භයානක රටාවක් බව මොහොතකට නොසලකා හැරීම.)

එය දෙයාකාරයෙන්ම ක්‍රියාත්මක වේ. මා කී පරිදි, එෆ්පී හි සැලසුම් රටා ද ඇත; මිනිසුන් සාමාන්‍යයෙන් ඔවුන් එසේ සිතන්නේ නැත.

නමුත් ඔබ මොනාඩ්ස් හරහා දිව යන්නට ඇත. “ගෝලීය රාජ්‍යය සමඟ ගනුදෙනු කිරීම” සඳහා සැලසුම් රටාවක් නොවේ නම් ඒවා මොනවාද? ඕඕපී භාෂාවලින් එතරම් සරල ගැටළුවක් වන අතර ඒ හා සමාන මෝස්තර රටාවක් එහි නොමැත.

එය ඔබ කුමක් පමණක් වන නිසා අපි "ස්ථිතික විචල්ය වැඩිවීමක්" සඳහා නිර්මාණය රටාව අවශ්ය නැහැ, හෝ "බව සොකට් කියවීමට", කරන්න .

මොනාඩ් යනු මෝස්තර රටාවක් යැයි පැවසීම ඔවුන්ගේ සුපුරුදු මෙහෙයුම් සමඟ පූර්ණ සංඛ්‍යා පැවසීම විකාරයකි. ශුන්‍ය මූලද්‍රව්‍යය සැලසුම් රටාවකි. නැත, මොනාඩ් යනු ගණිතමය රටාවක් මිස නිර්මාණ රටාවක් නොවේ.

(පිරිසිදු) ක්‍රියාකාරී භාෂාවල, අතුරු ප්‍රති and ල සහ විකෘති තත්වයක් ඇති කළ නොහැක, ඔබ එය වටා මොනාඩ් “සැලසුම් රටාව” හෝ එකම දේට ඉඩ දීම සඳහා වෙනත් ක්‍රම සමඟ වැඩ නොකරන්නේ නම්.

මීට අමතරව, OOP (F # සහ OCaml වැනි) සඳහා සහය දක්වන ක්‍රියාකාරී භාෂාවල, මෙම භාෂාවන් භාවිතා කරන ක්‍රමලේඛකයින් අනෙක් සෑම OOP භාෂාවකටම ලබා ගත හැකි මෝස්තර රටා භාවිතා කරන බව මට පැහැදිලිය. ඇත්ත වශයෙන්ම, දැන් මම එදිනෙදා F # සහ OCaml භාවිතා කරන අතර, මම ජාවා භාෂාවෙන් ලියන විට භාවිතා කරන රටාවන්ට එදිරිව මෙම භාෂාවල භාවිතා කරන රටාවන් අතර කැපී පෙනෙන වෙනස්කම් නොමැත.

සමහර විට ඔබ තවමත් අත්‍යවශ්‍ය ලෙස සිතන නිසාද? බොහෝ දෙනෙකුට, ඔවුන්ගේ මුළු ජීවිත කාලය පුරාම අත්‍යවශ්‍ය භාෂාවන් සමඟ කටයුතු කිරීමෙන් පසු, ක්‍රියාකාරී භාෂාවක් උත්සාහ කරන විට එම පුරුද්ද අත්හැරීමට අපහසු වේ. (මම වචනාර්ථයෙන් මෙහි F #, සමහර ලස්සන විසුළු උත්සාහයන් මම දැකලා තියෙනවා සෑම ඔබ C වැඩසටහන් රැගෙන ඇති අතර, '' ඉඩ 'සමග සියලු semicolons වෙනුවට කැමති නම් මූලික වශයෙන් ලෙස, කාර්යය' ඉඩ 'ප්රකාශ හුදෙක් වැලක් විය. :))

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

ඔබ ව්‍යංජන භාවිතා කරන විට හෝ ශ්‍රිතයක් වෙනත් කෙනෙකුට තර්කයක් ලෙස යොමු කරන විට, OOP භාෂාවෙන් ඔබ එය කරන්නේ කෙසේදැයි සිතා බලන්න.

ක්‍රියාකාරී ක්‍රමලේඛනය මඟින් OOP සැලසුම් රටාවන්හි අවශ්‍යතාවය ඉවත් කරයි යන ප්‍රකාශයට සත්‍යතාවයක් තිබේද?

ඔව්. :) ඔබ FP භාෂාවකින් වැඩ කරන විට, ඔබට තවදුරටත් OOP විශේෂිත මෝස්තර රටා අවශ්‍ය නොවේ. නමුත් ඔබට තවමත් MVC හෝ වෙනත් OOP නොවන විශේෂිත දේවල් වැනි සාමාන්‍ය මෝස්තර රටා කිහිපයක් අවශ්‍ය වන අතර ඒ වෙනුවට ඔබට නව FP විශේෂිත “සැලසුම් රටා” කිහිපයක් අවශ්‍ය වේ. සෑම භාෂාවකම ඒවායේ අඩුපාඩු ඇති අතර සැලසුම් රටා සාමාන්‍යයෙන් අප ඒවා වටා වැඩ කරන ආකාරයයි.

කෙසේ හෝ, ඔබ මෙන්, එය වැදගත් "පිරිසිදු" ෆෙඩරල් පක්ෂය භාෂා ඔබේ අත උත්සාහ කිරීමට විය හැක ML (අවම වශයෙන් ඉගෙන කටයුතු සඳහා මගේ පෞද්ගලික ප්රියතම), හෝ Haskell , ඔබ විට ඔබ නැවත වැටී කිරීමට OOP සලකන්න එපා නොමැති තැන මට අලුත් දෙයකට මුහුණ දී තිබේ.


අපේක්ෂා කළ පරිදි, නිර්මාණ රටාවන් "භාෂාවක අඩුපාඩුකම් හඳුනා ගැනීම" ලෙස මා අර්ථ දැක්වීමට කිහිප දෙනෙක් විරුද්ධ වූහ, එබැවින් මෙන්න මගේ සාධාරණීකරණය:

දැනටමත් පවසා ඇති පරිදි, බොහෝ සැලසුම් රටා එක් ක්‍රමලේඛන ආදර්ශයකට හෝ සමහර විට එක් විශේෂිත භාෂාවකට පවා විශේෂිත වේ. බොහෝ විට, ඔවුන් එම ආදර්ශය තුළ පමණක් පවතින ගැටළු විසඳයි (එෆ්පී සඳහා මොනාඩ්ස් හෝ ඕඕපී සඳහා වියුක්ත කර්මාන්තශාලා බලන්න).

වියුක්ත කර්මාන්තශාලා රටාව FP හි නොපවතින්නේ ඇයි? එය විසඳීමට උත්සාහ කරන ගැටලුව එහි නොපවතින බැවිනි.

එබැවින්, එෆ්පී භාෂාවල නොපවතින ඕඕපී භාෂාවල ගැටලුවක් තිබේ නම්, පැහැදිලිවම එය ඕඕපී භාෂාවල අඩුපාඩුවකි. ගැටලුව විසඳිය හැකි නමුත් ඔබේ භාෂාව එසේ නොකරයි, නමුත් එය වටා වැඩ කිරීමට බොයිලර් ප්ලේට් කේතයක් ඔබෙන් අවශ්‍ය වේ. ඉතා මැනවින්, අපගේ ක්‍රමලේඛන භාෂාව සියලු ගැටලු ඉන්ද්‍රජාලිකව ඉවත් කිරීමට අපි කැමතියි . තවමත් පවතින ඕනෑම ගැටළුවක් ප්‍රතිපත්තිමය වශයෙන් භාෂාවේ අඩුපාඩුවක් වේ. ;)


73
සැලසුම් රටාවන් මූලික ගැටළු වලට පොදු විසඳුම් විස්තර කරයි. නමුත් ක්‍රමලේඛන භාෂා සහ වේදිකා කරන්නේද එයයි. එබැවින් ඔබ භාවිතා කරන භාෂා සහ වේදිකා ප්‍රමාණවත් නොවන විට ඔබ සැලසුම් රටා භාවිතා කරයි.
yfeldblum

135
එස්. ලොට්: ඔවුන් යම් භාෂාවක පවතින ගැටලුවලට විසඳුම් විස්තර කරයි, ඔව්. එෆ්පී භාෂාවල විධාන සැලසුම් රටාවක් නොමැත, මන්ද එය විසඳීමට උත්සාහ කරන ගැටළුව නොපවතී. එයින් අදහස් කරන්නේ භාෂාවට විසඳිය නොහැකි ගැටලු ඔවුන් විසඳන බවයි. එනම්, භාෂාවේ අඩුපාඩු
jalf

38
මොනාඩ් යනු ගණිතමය සංකල්පයක් වන අතර, ඔබ එය ඔබේ වර්ගීකරණය සමඟ දිගු කරයි. නිසැකවම, ඔබට කාර්යයන්, මොනොයිඩ, මොනාඩ්, මෙට්‍රික්ස් හෝ වෙනත් ගණිතමය සංකල්ප සැලසුම් රටා ලෙස දැකිය හැකිය, නමුත් ඒවා ඇල්ගොරිතම හා දත්ත ව්‍යුහයන් වැනි ය ... මූලික සංකල්ප, භාෂාව ස්වාධීන ය.
ඇලෙක්සැන්ඩ්‍රු නෙඩෙල්කු

42
ඇත්ත වශයෙන්ම, මොනාඩ්ස් යනු ගණිත සංකල්පයකි, නමුත් ඒවා රටාවකි. මොනාඩ් වල "එෆ්පී රටාව" මොනාඩ්ස් ගණිත සංකල්පයට වඩා තරමක් වෙනස් ය. පළමුවැන්න පිරිසිදු එෆ්පී භාෂාවලින් යම් යම් “සීමාවන්” ලබා ගැනීමට භාවිතා කරන රටාවකි. දෙවැන්න විශ්ව ගණිතමය සංකල්පයකි.
jalf

69
හැස්කෙල්හි මොනාඩ්ස් විකෘති තත්වයට අමතරව වෙනත් දේ සඳහා භාවිතා කරන බව සලකන්න, උදාහරණයක් ලෙස ව්‍යතිරේක, අඛණ්ඩතාව, ලැයිස්තු අවබෝධය, විග්‍රහ කිරීම, අසමමුහුර්ත වැඩසටහන්කරණය සහ යනාදිය. නමුත් මෙම සියලු මොනාඩ් යෙදුම් බොහෝ විට රටා ලෙස හැඳින්විය හැක.
ජැක් බී

153

ක්‍රියාකාරී ක්‍රමලේඛනය මඟින් OOP සැලසුම් රටාවන්හි අවශ්‍යතාවය ඉවත් කරයි යන ප්‍රකාශයට සත්‍යතාවයක් තිබේද?

ක්‍රියාකාරී ක්‍රමලේඛනය වස්තු-නැඹුරු වැඩසටහන්කරණයට සමාන නොවේ. වස්තු-නැඹුරු සැලසුම් රටා ක්‍රියාකාරී වැඩසටහන්කරණයට අදාළ නොවේ. ඒ වෙනුවට, ඔබට ක්‍රියාකාරී ක්‍රමලේඛන සැලසුම් රටා ඇත.

ක්‍රියාකාරී වැඩසටහන්කරණය සඳහා, ඔබ OO සැලසුම් රටා පොත් කියවන්නේ නැත; ඔබ FP සැලසුම් රටා පිළිබඳ වෙනත් පොත් කියවනු ඇත.

භාෂා අ nost ෙයවාදියා

මුළුමනින්ම නොවේ. OO භාෂාවන්ට අදාළව භාෂා-අ nost ෙයවාදියා පමණි. සැලසුම් රටා කාර්ය පටිපාටික භාෂාවන්ට කිසිසේත් අදාළ නොවේ. සාපේක්ෂ දත්ත සමුදා සැලසුම් සන්දර්භය තුළ ඒවා යන්තම් අර්ථවත් කරයි. පැතුරුම්පතක් සැලසුම් කිරීමේදී ඒවා අදාළ නොවේ.

සාමාන්‍ය OOP සැලසුම් රටාවක් සහ එහි ක්‍රියාකාරී සමානතාව?

ඉහත සඳහන් නොවිය යුතුය. එය OO කේතය ලෙස නැවත ලියා ඇති ක්‍රියා පටිපාටික කේතයක් ඉල්ලා සිටීම හා සමානයි. ම්ම්ම් ... මම මුල් ෆෝට්රාන් (හෝ සී) ජාවා භාෂාවට පරිවර්තනය කළහොත්, එය පරිවර්තනය කිරීමට වඩා වැඩි යමක් මම කර නැත. මම එය මුළුමනින්ම OO ආදර්ශයකට නැවත ලිවුවහොත්, එය තවදුරටත් මුල් ෆෝට්රාන් හෝ සී වැනි කිසිවක් නොපෙන්වයි - එය හඳුනාගත නොහැකි වනු ඇත.

OO සැලසුමේ සිට ක්‍රියාකාරී සැලසුම දක්වා සරල සිතියම්කරණයක් නොමැත. ඒවා ගැටලුව දෙස බැලීමට බෙහෙවින් වෙනස් ක්‍රම වේ.

ක්‍රියාකාරී ක්‍රමලේඛනය ( සියලුම ක්‍රමලේඛන ක්‍රම මෙන් ) සැලසුම් රටා ඇත. සාපේක්ෂ දත්ත සමුදායන්හි සැලසුම් රටා ඇත, OO හි සැලසුම් රටා ඇත, සහ කාර්ය පටිපාටික වැඩසටහන්කරණයේ සැලසුම් රටා ඇත. සෑම දෙයක්ම සැලසුම් රටා ඇත, ගොඩනැගිලිවල ගෘහ නිර්මාණ ශිල්පය පවා.

සැලසුම් රටා - සංකල්පයක් ලෙස - තාක්‍ෂණය හෝ ගැටළු වසම නොසලකා ගොඩනැඟීමේ කාලානුරූපී ක්‍රමයකි. කෙසේ වෙතත්, විශේෂිත ගැටළු රටාවන් සහ තාක්ෂණයන් සඳහා විශේෂිත සැලසුම් රටා අදාළ වේ.

ඔවුන් කරන්නේ කුමක්ද යන්න ගැන සිතන සෑම කෙනෙකුම නිර්මාණ රටා අනාවරණය කරයි.


12
MVC යනු OO නිර්මාණය නොවේ. එය වාස්තු විද්‍යාත්මක සැලසුමකි - එම රටාව බෙහෙවින් අදාළ වේ.
එස්.ලොට්

1
Rin ප්‍රින්සස්: ක්‍රියාකාරී වැඩසටහන්කරණය සරලවම අවශ්‍ය නොවේ. ඔබේ උදාහරණයේ, ඔව්. වෙනත් දේ සඳහා, ජූරි සභාව තවමත් එළියේ නැත. නමුත් ඔබ ජාවා ඕ ඕ මෝස්තර රටාවක් ඉවත දමා එෆ්පී මෝස්තර රටාවක් අනුගමනය කර ඇත.
එස්.ලොට්

1
+1: ඉහත ජල්ෆ්ගේ පිළිතුරට මම මෙම පිළිතුරට කැමතියි. සමහර මෝස්තර රටා භාෂාවේ අඩුපාඩුකම් සපුරාලුවද, සියල්ලම එසේ නොවේ. නිදසුනක් ලෙස, "පුනරාවර්තන ගැටය ලිහා දැමීම" සැලසුම් රටාව භාෂාවේ iency නතාවයට ආමන්ත්‍රණය කරන බව මම කිසිසේත්ම නොකියමි, එය යැපීම් ලිහිල් කිරීමට ප්‍රයෝජනවත් මෝඩකමක් පමණි.
ජේඩී

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

2
අවසාන වාක්‍යය සඳහා +1. සැලසුම් රටා යනු ක්‍රමලේඛනය සරල කිරීම සහ එහි ප්‍රති ing ලයක් ලෙස ඇති වැඩසටහන් වඩාත් කාර්යක්ෂම කිරීම, ඒවා කිරීමට අදහස් කරන දෙයයි.
වර්ගීකරණ

46

භාෂාව සහ රටාව අතර දැඩි සම්බන්ධතාවය පිළිබඳව බ්‍රයන් අදහස් දැක්වීම කාරණයකි,

මෙම සාකච්ඡාවේ අස්ථානගත වී ඇත්තේ මෝඩ සංකල්පයයි. ජේම්ස් ඕ. කොප්ලියන්ගේ "උසස් සී ++" පොත මෙහි විශාල බලපෑමක් ඇති කළේය. ඔහු ක්‍රිස්ටෝපර් ඇලෙක්සැන්ඩර් සහ නමක් නැති තීරුව සොයා ගැනීමට බොහෝ කලකට පෙර (ඔබට ඇලෙක්සැන්ඩර් කියවීමකින් තොරව රටාවන් ගැන සංවේදීව කථා කළ නොහැක), භාෂාවක් සැබවින්ම ඉගෙන ගැනීමේදී මෝඩයන් ප්‍රගුණ කිරීමේ වැදගත්කම ගැන ඔහු කතා කළේය. ඔහු සී හි නූල් පිටපතක් නිදසුනක් ලෙස භාවිතා කළේය, while(*from++ = *to++);ඔබට මෙය නැතිවූ භාෂා අංගයක් (හෝ පුස්තකාල අංගයක්) සඳහා බැන්ඩේඩ් එකක් ලෙස දැකිය හැකිය, නමුත් ඇත්ත වශයෙන්ම එය වැදගත් වන්නේ එය ඕනෑම දෙයකට වඩා විශාල චින්තනයක් හෝ ප්‍රකාශන ඒකකයක් වීමයි. එහි කොටස්.

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

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


8
ඔබට ස්තුතියි! මෙම රටා, ප්රජානන බර අඩු කිරීමට "සංකල්පීය chunking" about- දේ වේ.
රැන්ඩල් ෂුල්ස්

ක්‍රියාකාරී මොනාඩ්ස් අනිවාර්යයෙන්ම මෙම සාකච්ඡාවට අයත් වේ.
ග්‍රෙග්

AndRandallSchulz: භාෂා ලක්ෂණ (සහ ඒවායේ මුග්ධ භාවිතය, ඇත්ත වශයෙන්ම) "සංජානන බර අඩු කිරීම සඳහා සංකල්පීය කුට්ටි" ගණයට හොඳින් ගැලපේ.
රෝයි ටින්කර්

39

ගොෆ් පොත පැහැදිලිවම ඕඕපී සමඟ බැඳී ඇත - මාතෘකාව සැලසුම් රටා - නැවත භාවිතා කළ හැකි වස්තු-නැඹුරු මෘදුකාංගයේ මූලද්‍රව්‍යයන් (අවධාරණය මගේ).



26

මෙම මාතෘකාව සාකච්ඡා කරන තවත් සබැඳියක් මෙන්න: http://blog.ezyang.com/2010/05/design-patterns-in-haskel/

එඩ්වඩ් සිය බ්ලොග් සටහනේ හැස්කෙල්ට අනුව මුල් ගොෆ් රටා 23 ම විස්තර කරයි.


4
ලිපිය ඇත්ත වශයෙන්ම හස්කල් හි සැලසුම් රටා පෙන්වන බවක් නොපෙනේ, නමුත් එම රටා නොමැතිව හැස්කෙල් එම අවශ්‍යතා සපුරාලන ආකාරය පෙන්වයි.
ෆ්‍රෙෂ්බෝල්

3
Res ෆ්‍රෙෂ්බෝල්: රටා පිළිබඳ ඔබේ අර්ථ දැක්වීම මත රඳා පවතී. ලැයිස්තුවක් හරහා ශ්‍රිතයක් සිතියම්ගත කිරීම ආගන්තුක රටාවේ ප්‍රභේදයක්ද? මම සාමාන්‍යයෙන් සිතුවේ පිළිතුර “ඔව්” යන්නයි. රටා විශේෂිත වාක්‍ය ඛණ්ඩයකින් ඔබ්බට යා යුතුය. යෙදෙන ශ්‍රිතය වස්තුවක් ලෙස ඔතා හෝ ශ්‍රිත දර්ශකයක් ලෙස සම්මත කළ හැකි නමුත් සංකල්පය මට සමාන ය. ඔබ එකඟ නොවන්නේද?
srm

20

ඔබ මෙය "සැලසුම් රටා" (පොදුවේ) සහ "එෆ්පී එදිරිව ඕඕපී" මට්ටමින් බැලීමට උත්සාහ කරන විට, ඔබට සොයාගත හැකි පිළිතුරු වඩාත් අඳුරු වනු ඇත.

කෙසේ වෙතත්, අක්ෂ දෙකෙහිම ගැඹුරට ගොස් නිශ්චිත මෝස්තර රටා සහ විශේෂිත භාෂා ලක්ෂණ සලකා බලා දේවල් වඩාත් පැහැදිලි වේ.

උදාහරණයක් ලෙස, වීජීය දත්ත වර්ග සහ රටා ගැලපීම් , වසා දැමීම් , පළමු පන්තියේ කාර්යයන් යනාදිය සහිත භාෂාවක් භාවිතා කරන විට අමුත්තන් , උපාය මාර්ග , විධාන සහ නිරීක්ෂකයා වැනි නිශ්චිත රටාවන් අනිවාර්යයෙන්ම වෙනස් වේ හෝ අතුරුදහන් වේ. 'අවට රැඳී සිටින්න'.

පොදුවේ ගත් කල, මම කියන්නේ, කාලයාගේ ඇවෑමෙන්, විශේෂිත රටාවන් නව (හෝ ජනප්‍රිය වෙමින් පවතින) භාෂා අංග මගින් ඉවත් කරනු ලැබේ. භාෂා නිර්මාණයේ ස්වාභාවික පා course මාලාව මෙයයි; භාෂා වඩාත් ඉහළ මට්ටමට පත්වන විට, උදාහරණ භාවිතා කරමින් පොතක පමණක් කලින් හැඳින්විය හැකි වියුක්ත කිරීම් දැන් විශේෂිත භාෂා අංගයක හෝ පුස්තකාලයක යෙදුම් බවට පත්වේ.

( පසෙකින්: එෆ්පී සහ සැලසුම් රටා පිළිබඳ වැඩි සාකච්ඡාවක් සඳහා වෙනත් සබැඳි ඇති මෑත බ්ලොග් අඩවියක් මෙහි දැක්වේ .)


ආගන්තුක රටාව "අතුරුදහන්" යැයි ඔබ කියන්නේ කෙසේද? එය "පොකුරක් සමඟ අමුත්තන්ගේ අතුරු මුහුණතක් සාදන්න" සිට "වෘත්තීය සමිති වර්ග සහ රටා ගැලපීම් භාවිතා කරන්න" බවට හැරෙන්නේ නැද්ද?
ගේබ්

22
ඔව්, නමුත් එය රටාවකින් වෙනස් වී ඇති අතර එය නිර්මාණ අදහසක් වන අතර එය පොතක කියවා ඔබේ කේතයට අදාළ වන අතර එය “නිකම් කේතයක්” වේ. එනම්, “වෘත්තීය සමිති වර්ග සහ රටා ගැලපීම් භාවිතා කිරීම” යනු ඔබ සාමාන්‍යයෙන් එවැනි භාෂාවකින් දේවල් කේත කරන ආකාරයයි. (සාදෘශ්යයක්: නැත භාෂා තිබුණේ නම් forවළළු හා ඔවුන් සියලු දෙනා පමණක් බව whileපසුව, වළළු ක ප්රතිඵලයක්ම රටාව විය හැකි "සඳහා" එහෙත්. forභාෂාව මගින් සහාය පමණක් ඉදිකිරීමක් කෙසේද ජනතාව කේතය සාමාන්යයෙන් වේ, එය රටාවක් නොවේ - ඔබ නෑ ' රටාවක් අවශ්‍ය නැත, එය කේතය පමණි, මිනිසා.)
බ්‍රයන්

4
තවත් ආකාරයකින් කියන්න, "එය රටාවක්ද" යන්න සඳහා නරක නොවන ලිට්මස් පරීක්ෂණයක් නම්: වර්තමාන කේතය මේ ආකාරයෙන් ලියා ඇත්තේ සීඑස් හි දෙවන වසරේ උපාධි අපේක්ෂකයෙකුට ඔබේ භාෂාවෙන් වසරක පළපුරුද්දක් සහිත වැඩසටහන් වැඩසටහන් සමඟ ය. ඔබ ඔවුන්ට කේතය පෙන්වන්නේ නම් සහ ඔවුන් යන්නේ “එය දක්ෂ නිර්මාණයක්” නම්, එය රටාවකි. ඔබ ඔවුන්ට කේතය පෙන්වන්නේ නම් සහ ඔවුන් "හොඳයි, ඩු!" යන්න යන්නේ නම්, එය රටාවක් නොවේ. (තවද ඔබ වසරක් තිස්සේ එම්එල් / එෆ් # / හස්කල් කළ ඕනෑම කෙනෙකුට මෙම "ආගන්තුකයා" පෙන්වන්නේ නම්, ඔවුන් "හොඳයි, ඩූ!" යන්නට යයි)
බ්‍රයන්

1
බ්‍රයන්: මම හිතන්නේ අපට “රටාවක්” පිළිබඳ විවිධ අර්ථකථන තිබේ. මම විය කිසිදු හඳුනාගත නිර්මාණය වියුක්තීකරණය සලකා රටාව ඔබ එකම පැහැදිලි නොවන වියුක්තයක් වීමට ඉඩ සලකා අතර, රටාව . සී # foreachහා හස්කල් සතුව ඇති mapMපමණින් ඔවුන්ට ඉටරේටර් රටාව නොමැති බව අදහස් නොකෙරේ. ඉටරේටර් රටාව IEnumerable<T>සී # හි සාමාන්‍ය අතුරුමුහුණත Traversableලෙසත් හැස්කෙල් හි ටයිප් ක්ලාස් ලෙසත් ක්‍රියාත්මක වන බව පැවසීමේ කිසිදු ගැටළුවක් මට නොපෙනේ .
ගේබ්

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

16

නොර්විග්ගේ ඉදිරිපත් කිරීම මඟින් ඔවුන් සියලු ගොෆ් රටා විශ්ලේෂණය කළ අතර, රටා 23 න් 16 ක්ම ක්‍රියාකාරී භාෂාවලින් සරල ලෙස ක්‍රියාත්මක කර ඇති බව හෝ හුදෙක් භාෂාවේ කොටසක් බව ඔවුහු කියති. එබැවින් අවම වශයෙන් ඒවායින් හතක් වත් අ) සමානව සංකීර්ණ හෝ ආ) භාෂාවේ නොතිබුණි. අවාසනාවකට මෙන්, ඒවා ගණන් බලා නොමැත!

GoF හි ඇති “නිර්මාණාත්මක” හෝ “ව්‍යුහාත්මක” රටා බොහොමයක් ජාවා හෝ සී ++ හි ඇති ප්‍රාථමික වර්ගයේ පද්ධති ඔබට අවශ්‍ය දේ කිරීමට උපක්‍රම පමණක් බව මම සිතමි. ඔබ කුමන භාෂාවකින් වැඩ කළත් අනෙක් අය සලකා බැලීම වටී.

එකක් මූලාකෘති විය හැකිය; එය ජාවාස්ක්‍රිප්ට් පිළිබඳ මූලික අදහසක් වන අතර, එය මුල සිටම වෙනත් භාෂාවලින් ක්‍රියාත්මක කළ යුතුය.

මගේ ප්‍රියතම රටාවන්ගෙන් එකක් වන්නේ ශුන්‍ය වස්තු රටාවයි: සුදුසු කිසිවක් නොකරන වස්තුවක් ලෙස යමක් නොමැතිවීම නිරූපණය කරන්න. ක්‍රියාකාරී භාෂාවකින් ආදර්ශනය කිරීම මෙය පහසු විය හැකිය. කෙසේ වෙතත්, සැබෑ ජයග්රහණය වන්නේ ඉදිරිදර්ශනය වෙනස් කිරීමයි.


2
GoF රටා විශේෂයෙන් නිර්මාණය කර ඇත්තේ පන්ති පදනම් කරගත් OOP භාෂාවන් සඳහා වන බැවින් කළ යුතු අමුතු විශ්ලේෂණයකි. විදුලි වැඩ සඳහා පයිප්ප රැළි හොඳ දැයි විශ්ලේෂණය කිරීම මඳක් පෙනේ.
munificent

unmunificent: ඇත්තටම නැහැ. වස්තු-දිශානතිය බහුමාපකය සපයයි; ක්‍රියාකාරී ක්‍රමලේඛනය සාමාන්‍යයෙන් බහුමාපකය සපයයි.
මාකින්

Ar මාසින් ඕ ඕ ක්‍රමලේඛකයෙකු යනු ක්‍රියාකාරී ක්‍රමලේඛකයෙකුට වඩා බහුමාපකයෙන් බෙහෙවින් වෙනස් දෙයකි.
ඇන්ඩ rew සී

Nd ඇන්ඩ rew සී මම එකඟ නොවෙමි. OO ක්‍රමලේඛකයා ඔවුන් වෙනස් දෙයක් අදහස් කරන බව සිතිය හැකිය, නමුත් ඔවුන් එසේ නොකරයි.
මාකින්

3
Arc මාකින් මගේ අත්දැකීම් අනුව, OO ක්‍රමලේඛකයෙකු සාමාන්‍යයෙන් උප ප්‍රභේද බහුමාපකය (බොහෝ විට වස්තුව භාවිතා කිරීම), එය සාක්ෂාත් කර ගැනීම සඳහා වාත්තු භාවිතා කිරීම හෝ තාවකාලික බහුමාපකය (අධි බර පැටවීම යනාදිය) ගැන සඳහන් කරයි. ක්‍රියාකාරී ක්‍රමලේඛකයෙකු බහුමාපකය යැයි පැවසූ විට ඔවුන් අදහස් කරන්නේ පරාමිතික බහුමාපකය (එනම් ඕනෑම වර්ගයක දත්ත සඳහා ක්‍රියා කරයි - Int, function, list), එය OO හි සාමාන්‍ය ක්‍රමලේඛයට වඩා බොහෝ විට OO ක්‍රමලේඛකයින් සාමාන්‍යයෙන් බහුමාපකය ලෙස හැඳින්වේ.
ඇන්ඩ rew සී

15

මම කියන්නේ ඔබට ලිස්ප් වැනි භාෂාවක් මැක්‍රෝස් සඳහා සහය දක්වන විට, ඔබට ඔබටම ඩොමේන්-විශේෂිත වියුක්ත කිරීම්, සාමාන්‍ය වියුක්ත විසඳුම් වලට වඩා බොහෝ විට වඩා හොඳ වියුක්ත කිරීම් ගොඩනගා ගත හැකි බවයි.


මට සම්පූර්ණයෙන්ම අහිමි වෙලා. වියුක්තයන් සමඟ යමක් කිරීමට ... එයින් අදහස් කරන්නේ කුමක්ද?
tuinstoel

2
ඔබට මැක්‍රෝස් නොමැතිව වසම් විශේෂිත වියුක්ත කිරීම් (කාවැද්දූ ඒවා පවා) සෑදිය හැකිය. අභිරුචි සින්ටැක්ස් එකතු කිරීමෙන් මැක්‍රෝස් ඔබට ඒවා අලංකාර කිරීමට ඉඩ දෙයි.
ජේඩී

2
ක්‍රමලේඛන භාෂාවන් තැනීම සඳහා ලිස්ගෝ සමූහයක් ලෙස ඔබට ලිස්ප් ගැන සිතිය හැකිය - එය භාෂාවක් නමුත් එය ද මෙටලැන්ගුවකි. එයින් අදහස් වන්නේ ඕනෑම ගැටළු සහිත වසමක් සඳහා, ඔබට පැහැදිලි අඩුපාඩු නොමැති භාෂාවක් අභිරුචිකරණය කළ හැකි බවයි. එයට යම් පුහුණුවක් අවශ්‍ය වනු ඇති අතර කර්ට් ගොඩෙල් එකඟ නොවිය හැකි නමුත් එය මේසය වෙත ගෙන එන්නේ කුමක්දැයි බැලීමට ලිස්ප් සමඟ යම් කාලයක් ගත කිරීම වටී (ඉඟිය, මැක්‍රෝස්).
ග්‍රෙග්

9

OO සැලසුම් රටා විසඳුම් පවා භාෂා විශේෂිත වේ.

සැලසුම් රටා යනු ඔබේ ක්‍රමලේඛන භාෂාව ඔබ වෙනුවෙන් විසඳන්නේ නැති පොදු ගැටළු වලට විසඳුම් වේ. ජාවා හි, සිංගල්ටන් රටාව එක් දෙයක් (සරල කළ) ගැටළුව විසඳයි.

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


8

රටා යනු නැවත නැවතත් දැකගත හැකි සමාන ගැටළු විසඳීමේ ක්‍රම වේ, පසුව විස්තර කර ලේඛනගත කරන්න. එබැවින් නැත, එෆ්පී රටා ආදේශ කිරීමට යන්නේ නැත; කෙසේ වෙතත්, එෆ්පී විසින් නව රටා නිර්මාණය කළ හැකි අතර වර්තමාන "හොඳම භාවිතයන්" රටා "යල්පැන ඇති" බවට පත් කළ හැකිය.


4
GoP රටා යනු යම් ආකාරයක ක්‍රමලේඛන භාෂාවක සීමාවන් පිළිබඳ ගැටළුව විසඳීමේ ක්‍රම වේ. උදාහරණයක් ලෙස "මට පන්ති වලට වක්‍රව යාමට අවශ්‍යය, වස්තූන් සෑදීමට ඔවුන්ට කියන්න" -> "ඔබට බැහැ, නමුත් ඔබට කර්මාන්තශාලාවක් ලෙස හඳුන්වන මෙටැක්ලාස් වැනි වස්තු සෑදිය හැකිය". "මට බහුවිධ යැවීමක් අවශ්‍යයි" -> "ඔබට බැහැ, නමුත් ඔබට ක්‍රියාත්මක කළ හැකි අමුත්තන්ගේ රටාව නමින් හැඳින්විය හැකිය". ආදිය. ඔබ නිශ්චිත සීමාවන් සහිත OOP භාෂාවක නොමැති නම් කිසිදු රටාවක් අර්ථවත් නොවේ.
Kaz

1
ඔවුන්ගෙන් කිසිවෙකු වෙනත් භාෂාවලින් අර්ථවත් කිරීම ගැන මම නොදනිමි, නමුත් ඔවුන්ගෙන් බොහෝ දෙනෙක් වෙනත් භාෂාවලින් තේරුමක් නැති බව මම එකඟ වෙමි. ඇඩැප්ටරය සහ පාලම වැඩි බහුභාෂා හැකියාවන් ඇති බව පෙනේ, නරඹන්නන් සඳහා එය ටිකක් අඩු වන අතර සමහර විට සවන්දෙන්නන්ට ටිකක් අඩු වේ. කෙසේ වෙතත්, භාෂාවන්හි රටාවන් සැමවිටම "භාෂාවේ X හි භාෂාව Y භාෂාවෙන් ක්‍රියා කරන්නේ කෙසේද" යන්නෙන් පීඩා විඳින්නේ භාෂාවේ ස්වාභාවික සීමාවන් ඉක්මවා යාමෙනි. කදිම නිදසුනක් නම්, සිංගල්ටන් රටාව, මූලික වශයෙන්, ඕඕපී හි සී ග්ලෝබල් ලබා ගන්නේ කෙසේද? (මම පිළිතුරු දෙන්නම්, ඔබ එසේ නොකළ යුතුයි).
එඩ්වින් බක්

1
මම දෙවන කස්: රටාව යනු “නැවත නැවතත් දැකිය හැකි සමාන ගැටළු විසඳීමේ ක්‍රමයක්” නොව “නැවත නැවතත් දැකිය හැකි සමාන ගැටළු විසඳීමේ ක්‍රමය” සහ භාෂාව කෙනෙකුට ඉඩ නොදෙන නිසා නැවත නැවත ලිවිය යුතුය. එය එක් වරක් පමණක් ලියන්න ". වෙනත් වචන වලින් කිවහොත්, පුස්තකාලය / පංතිය / මොඩියුලය වැනි රටාවන් රටාව උකහා ගැනීමට / සාරාංශ කිරීමට ඉඩ දුන්නේ නම් එය රටාවක් වීම නවත්වන නමුත් පුස්තකාලයක් / පන්තියක් / මොඩියුලයක් බවට පත්වේ. එෆ්පී හි, ශ්‍රිතයකට කේත ටිකක් උපුටා ගැනීම / සාරාංශ කිරීම වඩා පහසු ය, එබැවින් “රටාව” නැවත භාවිතා කළ හැකි කේතයකින් පහසුවෙන් පරිවර්තනය කළ හැකි අතර ඒවා රටාවක් නොවේ.
mb14

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

1
වසර ගණනාවකට පසු නැවත මෙම සංවාදයට ඇවිදිමින්, බොහෝ දෙනෙක් රටා විශේෂිත ක්‍රමලේඛන භාෂාවක් හෝ විශේෂිත ක්‍රමලේඛන ආදර්ශයක් සමඟ සම්බන්ධ කර ඇතැයි මම සිතමි. එවැනි සන්දර්භයක් තුළ ඒවා භාවිතා කළ හැකි නමුත් වැඩසටහන්කරණයට පෙර ඒවා පැවතුනි. “කාලානුරූපීව ගොඩනැඟීමේ ක්‍රමයක්” ගෘහ නිර්මාණ ශිල්පය සහ ප්‍රජා සැලසුම්කරණය පිළිබඳ සාකච්ඡා කරන්නන් සාකච්ඡා කරයි. මෙයින් ගම්‍ය වන්නේ ගොඩනැඟිලි ඉදිකිරීම ක්‍රමලේඛන භාෂාවක් ලෙස හැඳින්වීමට ඔබට අවශ්‍ය නම් මිස රටාවක දිශානතිය “භාෂාවක සීමාවන්ට” පිටින් භාවිතා කළ හැකි බවයි :)
එඩ්වින් බක්

8

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

ස්කලා "සිංගල්ටන් රටාව" ඉවත් කරන්නේ කෙසේදැයි බලන්න: ඔබ හුදෙක් පංතියක් වෙනුවට වස්තුවක් ප්‍රකාශ කරයි . තවත් අංගයක්, රටා ගැලපීම, නරඹන්නන්ගේ රටාවේ නොගැලපීම වළක්වා ගැනීමට උපකාරී වේ. මෙහි සංසන්දනය බලන්න: ස්කලාගේ රටා ගැලපීම = ස්ටෙරොයිඩ් මත නරඹන්නන්ගේ රටාව

F # වැනි පරිමාණය OO- ක්‍රියාකාරීත්වයේ විලයනයකි. මම F # ගැන නොදනිමි, නමුත් බොහෝ විට මෙවැනි ලක්ෂණ ඇත.

වසා දැමීම් ක්‍රියාකාරී භාෂාවෙන් පවතින නමුත් ඒවා ඒවාට පමණක් සීමා නොවිය යුතුය. ඔවුන් නියෝජිත නියෝජිත රටාවට උදව් කරයි.

තවත් එක් නිරීක්ෂණයක්. මෙම කේත කැබැල්ල රටාවක් ක්‍රියාත්මක කරයි: එය එතරම් සම්භාව්‍ය වන අතර එය කෙතරම් මූලද්‍රව්‍යයද යත් අපි එය සාමාන්‍යයෙන් "රටාවක්" ලෙස නොසිතන්නෙමු, නමුත් එය නිසැකවම:

for(int i = 0; i < myList.size(); i++) { doWhatever(myList.get(i)); }

ජාවා සහ සී # වැනි අත්‍යවශ්‍ය භාෂාවන් මේ සමඟ කටයුතු කිරීම සඳහා අත්‍යවශ්‍යයෙන්ම ක්‍රියාකාරී ඉදිකිරීමක් අනුගමනය කර ඇත: “foreach”.


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

අදහස් ******* වගේ නම්, හොඳයි ... ඉතිරි පිළිතුරු දෙස බලන්න. "ඔබ හුදෙක් පංතියක් වෙනුවට වස්තුවක් ප්‍රකාශ කරයි" යන්න සත්‍යයකි, මම එය පැහැදිලිවම වස්තුවක් ලෙස හඳුන්වන්නෙමි (එනම් var singleton = {};). Foreach රටාව ගැන සඳහන් කිරීමට ද මම කැමතියි. අවාසනාවකට මෙන්, මෙම ප්‍රශ්නයට පිළිතුරු දුන් / අදහස් දැක්වූ බොහෝ දෙනෙකුට ක්‍රියාකාරී ක්‍රමලේඛනය තේරෙන්නේ නැති අතර OOP සැලසුම් රටා භාවිතය සාධාරණීකරණය කරයි. සංයුක්ත උදාහරණ සැපයීම සඳහා +1, මට හැකි නම් මම තවත් දෙන්නෙමි.
ඉවාන් ප්ලේස්

AcJacquesB මට Scala / Haskell ගැන අදහස් දැක්විය නොහැක, නමුත් JavaScript හි (එනම් දෙමුහුන් ක්‍රියාකාරී / අත්‍යවශ්‍ය) වස්තු වචනාර්ථමය වාක්‍ය ඛණ්ඩ, නිර්නාමික ශ්‍රිත, පළමු කාර්යයන් පසුකරමින් ඔබ වස්තූන් ප්‍රකාශ කරන ආකාරය වෙනස් කිරීමට බොයිලර් පුවරුවක් නොමැත. පංති සාමාජිකයන්, සහ බහු උරුමයට ඉඩ දීම (අතුරු මුහුණත් ගිවිසුම්වල අවශ්‍යතාවය ඉවත් කිරීම).
ඉවාන් ප්ලේස්

8

GoF නිර්මාණ රටා යනු ජාවා සහ සී ++ වැනි සිමියුලා 67 න් පැවත එන OO භාෂා සඳහා වැඩ කිරීමේ වට්ටෝරු කේතනය කිරීමයි .

සැලසුම් රටා මගින් ප්රතිකාර කරන බොහෝ "රෝග" වලට හේතු වන්නේ:

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

විසඳුම අත්‍යවශ්‍යයෙන්ම අනුරූප මෝස්තර රටාවට සමාන ආකාරයකින් ව්‍යුහගත කර තිබුණද, පොදු ලිස්ප් වස්තු පද්ධතිය තුළ අතුරුදහන් නොවන මෙම සැලසුම් රටාවන්ගෙන් එකක්වත් නොමැත. (එපමණක් නොව, එම වස්තු පද්ධතිය දශකයකට වැඩි කාලයක් ගොෆ් පොතට පෙරාතුව විය. පොදු ලිප්ස් එම පොත ප්‍රථම වරට ප්‍රකාශයට පත් කළ වර්ෂයේම ANSI ප්‍රමිතියක් බවට පත්විය.)

ක්‍රියාකාරී ක්‍රමලේඛනය සම්බන්ධයෙන් ගත් කල, එයට රටා අදාළ වේද නැද්ද යන්න රඳා පවතින්නේ දී ඇති ක්‍රියාකාරී ක්‍රමලේඛන භාෂාවට කිසියම් වස්තු පද්ධතියක් තිබේද යන්න සහ එය රටා වලින් ප්‍රයෝජන ලබන වස්තු පද්ධති අනුව සකස් කර තිබේද යන්න මතය. එම වර්ගයේ වස්තු-දිශානතිය ක්‍රියාකාරී ක්‍රමලේඛනය සමඟ හොඳින් මිශ්‍ර නොවේ, මන්ද යත් රාජ්‍යයේ විකෘතිය ඉදිරිපස හා මධ්‍යයේ ඇති බැවිනි.

ඉදිකිරීම් සහ විකෘති නොවන ප්‍රවේශය ක්‍රියාකාරී ක්‍රමලේඛන සමඟ අනුකූල වන අතර එම නිසා වියුක්ත ප්‍රවේශය හෝ ඉදිකිරීම සමඟ කළ යුතු රටාවන් අදාළ විය හැකිය: කර්මාන්තශාලා, ෆැසෙඩ්, ප්‍රොක්සි, සැරසිලි සහ ආගන්තුක වැනි රටා.

අනෙක් අතට, රාජ්‍ය හා උපාය මාර්ග වැනි චර්යා රටා ක්‍රියාකාරී OOP තුළ කෙලින්ම අදාළ නොවන්නේ රාජ්‍ය විකෘතිය ඔවුන්ගේ හරය වන බැවිනි. මෙයින් අදහස් කරන්නේ ඒවා අදාළ නොවන බවයි; සමහර විට ඒවා විකෘති තත්වයක් අනුකරණය කිරීම සඳහා ඇති ඕනෑම උපක්‍රම සමඟ ඒකාබද්ධව අදාළ වේ.


2
"ගොෆ් සැලසුම් රටා වැඩකරන වට්ටෝරු කේතනය කරයි" යනු හුදෙක් අසත්‍ය ප්‍රකාශයකි.
ජෝන් පීටර්ස්

7

ජෙරමි ගිබන්ස් විසින් රචිත විශිෂ්ට නමුත් තරමක් paper න කඩදාසි කිහිපයක් සම්බන්ධ කිරීමට මම කැමතියි: “ඉහළ පෙළේ දත්ත සමුදා-සාමාන්‍ය වැඩසටහන් ලෙස මෝස්තර රටා” සහ “ඉටරේටර් රටාවේ සාරය” (දෙකම මෙහි ඇත: http: // www. comlab.ox.ac.uk/jeremy.gibbons/publications/ ).

වෙනත් (වස්තු-නැඹුරු) සැකසුම් වල නිශ්චිත සැලසුම් රටාවන්ගෙන් ආවරණය වන භූමි ප්‍රදේශය මුග්ධ ක්‍රියාකාරී ව්‍යුහයන් ආවරණය කරන්නේ කෙසේද යන්න මේ දෙකම විස්තර කරයි.


6

වර්ග පද්ධති ගෙන ඒමකින් තොරව ඔබට මෙම සාකච්ඡාව පැවැත්විය නොහැක.

ක්‍රියාකාරී ක්‍රමලේඛනයේ ප්‍රධාන අංග අතර පළමු පන්තියේ අගයන්, ව්‍යංජන, වෙනස් කළ නොහැකි අගයන් යනාදිය ඇතුළත් වේ. OO සැලසුම් රටා එම ඕනෑම අංගයක් ආසන්න වශයෙන් ගණනය කරන බව මට නොපෙනේ.

එයට හේතුව මෙම අංගයන් OOP කරන ගැටළු වලටම විසඳුම් නොදක්වන බැවිනි ... ඒවා අත්‍යවශ්‍ය වැඩසටහන්කරණයට විකල්ප වේ. OOP සඳහා FP පිළිතුර පවතින්නේ ML සහ Haskell යන වර්ගවල පද්ධති වලය ... විශේෂයෙන් එකතුව වර්ග, වියුක්ත දත්ත වර්ග, ML මොඩියුල සහ හැස්කල් ටයිප් ක්ලාස්.

නමුත් ඇත්ත වශයෙන්ම FP භාෂාවලින් විසඳා නැති නිර්මාණ රටා තවමත් පවතී. සිංගල්ටන් එකකට සමාන FP යනු කුමක්ද? (සිංගල්ටන් සාමාන්‍යයෙන් භාවිතා කිරීමට භයානක රටාවක් බව මොහොතකට නොසලකා හැරීම)

ටයිප් ක්ලාස් විසින් කරන පළමු දෙය නම් තනි බොත්තම් අවශ්‍යතාවය තුරන් කිරීමයි.

ඔබට 23 ලැයිස්තුව හරහා ගොස් තවත් ඉවත් කළ හැකිය, නමුත් මට දැන් කාලය නැත.


6
ටයිප් ක්ලාස් (OOP අතුරුමුහුණත් වලට සමාන FP) තනි බොත්තම් (ගෝලීය තත්වයට සමාන FP) අවශ්‍යතාවය ඉවත් කරන්නේ කෙසේද?
ගේබ්

4

ක්‍රියාකාරී ක්‍රමලේඛන තර්කනය ස්වාභාවික OO භාෂාවට හඳුන්වා දීම සඳහා නිර්මාණය කර ඇත්තේ GoF නිර්මාණ රටා දෙකක් පමණක් යැයි මම සිතමි. මම උපාය මාර්ග හා විධානය ගැන සිතමි. සැලසුම සරල කිරීම සහ අරමුණ තබා ගැනීම සඳහා ක්‍රියාකාරී වැඩසටහන් මඟින් තවත් සමහර ගොෆ් සැලසුම් රටා වෙනස් කළ හැකිය.


4
බොහෝ රටාවන්ගේ ප්‍රධාන කාරණය වන්නේ එෆ්පී සංකල්ප සඳහා යහපත් සහය ස්වයංක්‍රීයව ඉඩ දිය හැකි දේවල් කිරීම සඳහා බහුමාපකය යොදා ගැනීමයි. . ඒවා "නැවත ඇමතුමක් ලබා දෙන්න" හෝ "ඇමතුම් ලබා ගැනීමේ ශබ්ද කෝෂයක් ඇත" - සහ විවිධ තනන්නන් පන්ති, උදාහරණයක් ලෙස, සියල්ල අතුරුදහන් විය හැකිය. IMO රටාවක් රටාවක් වීම නවත්වන්නේ එය ක්‍රියාත්මක කිරීමට අවශ්‍ය දෙයකට වඩා දේවල් ක්‍රියා කරන ආකාරය තරම් සුළු වූ පසුවය .
cHao

4

අත්යවශ්යයෙන්ම, ඔව් !

  • විට රටාවක් circumvents අතුරුදන් පහසුකම් (ඉහළ නියෝගයක් ක්රියාත්මක, ඇළ මෙහෙයුම් ...) බව ultimalty පහසුකම් සංයුතිය .
  • රටා නැවත නැවත ලිවීමේ අවශ්‍යතාවය නැවත නැවතත් ක්‍රියාත්මක කිරීම භාෂා සුවඳක් ලෙස දැකිය හැකිය .

මීට අමතරව, මෙම පිටුව (AreDesignPatternsMissingLanguageFeatures) ඔබ කැණීමට කැමති නම් "රටා / විශේෂාංග" පරිවර්තන වගුවක් සහ හොඳ සාකච්ඡා කිහිපයක් සපයයි.


3

ක්‍රියාකාරී ක්‍රමලේඛන සැලසුම් රටා ප්‍රතිස්ථාපනය නොකරයි. සැලසුම් රටා ප්රතිස්ථාපනය කළ නොහැක.

රටා සරලව පවතී; කාලයත් සමඟ ඒවා ඉස්මතු විය. ගොෆ් පොත ඒවායින් සමහරක් විධිමත් කළේය. සංවර්ධකයින් ආකර්ෂණීය දේවල් වන ක්‍රියාකාරී ක්‍රමලේඛන භාෂාවන් භාවිතා කරන බැවින් නව රටාවන් එළියට එන්නේ නම්, සමහර විට ඒවා ගැන ලියා ඇති පොත් ද ඇත.


1
සැලසුම් රටා ප්රතිස්ථාපනය කළ නොහැකිද? මම හිතන්නේ ටිකක් සංවෘත මනසක්. සැලසුම් රටා යනු ක්‍රමලේඛන ගැටලු විසඳීම සඳහා බව අප සැවොම එකඟ විය හැකි අතර, අවම වශයෙන් යම් දවසක අපට සැලසුම් රටා නොමැතිව එම ගැටලු විසඳා ගත හැකි යැයි මම බලාපොරොත්තු වෙමි.
මෙට්‍රොපොලිස්

3
ඕනෑම විශේෂිත රටාවක් ප්‍රතිස්ථාපනය කළ හැකි නමුත් රටා පිළිබඳ සංකල්පයට එය කළ නොහැකිය. ගෘහ නිර්මාණ ක්‍ෂේත්‍රයේ “රටාව” යන යෙදුම ඇති වූ බව මතක තබා ගන්න .
ෆ්‍රෑන්ක් ෂෙයාර්

1
රටා යනු ක්‍රමලේඛන ගැටලු විසඳීම සඳහා නොවේ. රටා යනු අප වැඩසටහන් කරන ක්‍රම වේ. රටා ලේඛනගත කිරීම යනු ක්‍රමලේඛන ගැටලු විසඳීමට උපකාරී වේ.
Torbjørn

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

1
රටාවන් සැබවින්ම පවතින්නේ සන්නිවේදනයට පහසුකම් සැලසීම සඳහා පමණි. වෙනත් අරමුණක් නැත. මම වසර ගණනාවක් තිස්සේ සහභාගී වූ සියලුම සැලසුම් රැස්වීම්වලදී, ඇල්ගොරිතම පිළිබඳ සාකච්ඡාවක් යනු වැදගත් වන්නේ රටාව නොව. ඕනෑම අර්ථවත් අර්ථයකින් සැබවින්ම සිදුවන්නේ කුමක්ද යන්න රටාව කලාතුරකින් පැහැදිලි කළේය. O (n) එදිරිව O (n ලොග් (n)) බලපෑම් එය හරියටම පැහැදිලි කරයිද? එය දැනට පවතින ගෘහ නිර්මාණ ශිල්පයට කොතරම් පහසුවෙන් ගැලපේද යන්න පැහැදිලි කරයිද? නැත. පූර්ණ පරිමාණ ඇල්ගොරිතම සාකච්ඡා කරයි. රටාවන් විශ්‍රාම ගත යුතු යැයි මම තර්ක නොකරමි, නමුත් ඒවා එසේ නම්, එහි ප්‍රති nothing ලයක් ලෙස කිසිවක් දුක් විඳින්නේ නැත.

3

“ක්‍රියාකාරී ක්‍රමලේඛන රටා - ස්කාලා සහ ක්ලෝජුරේ” නම් නව 2013 පොතේ කර්තෘ මයිකල් බී. බොහෝ අවස්ථාවන්හිදී ගොෆ් රටාවන් සඳහා සංසන්දනය කිරීම හා ප්‍රතිස්ථාපනය සැපයීම ලින් විසින් යහපත් කාර්යයක් ඉටු කරන අතර 'වලිග පුනරාවර්තනය', 'මතක තබා ගැනීම', 'කම්මැලි අනුක්‍රමය' වැනි නව ක්‍රියාකාරී රටාවන් ද සාකච්ඡා කරයි.

මෙම පොත ඇමේසන් මත ලබා ගත හැකිය. දශක දෙකක OO පසුබිමකින් පැමිණෙන විට මට එය ඉතා තොරතුරු සහ දිරිගැන්වීමක් විය.


3

OOP සහ GoF රටා රාජ්‍යයන් සමඟ කටයුතු කරයි. කේත පදනම යථාර්ථයේ දී ඇති අවශ්‍යතාවන්ට හැකි තරම් ආසන්නව තබා ගැනීම සඳහා OOP යථාර්ථය ආදර්ශනය කරයි. GoF සැලසුම් රටා යනු පරමාණුක තාත්වික ලෝක ගැටලු විසඳීම සඳහා හඳුනාගත් රටාවන් ය. ඔවුන් රාජ්ය ගැටළුව අර්ථකථන ආකාරයෙන් හසුරුවයි.

සැබෑ ක්‍රියාකාරී ක්‍රමලේඛනයේ දී මෙන් කිසිදු රාජ්‍යයක් නොපවතින බැවින්, GoF රටා යෙදීම අර්ථවත් නොවේ. GoF සැලසුම් රටා ඇති ආකාරයටම ක්‍රියාකාරී සැලසුම් රටා නොමැත. සෑම ක්‍රියාකාරී මෝස්තර රටාවක්ම යථාර්ථයට වඩා වෙනස්ව කලාත්මක වන අතර කාර්යයන් ගණිතයේ ව්‍යුහයන් මිස යථාර්ථය නොවේ.

කාර්යයන් කාලය පිළිබඳ සංකල්පය නොමැති බැවින් ඒවා වර්තමාන පරාසය කුමක් වුවත් සෑම විටම එකම අගයක් ලබා දෙන බැවින් කාලය ක්‍රියාකාරී පරාමිතීන්හි කොටසක් නොවන්නේ නම් “අනාගත ඉල්ලීම්” සැකසීමට අපහසු වේ. දෙමුහුන් භාෂා එම සංකල්ප මිශ්‍ර කිරීමෙන් භාෂාවන් සැබෑ ක්‍රියාකාරී ක්‍රමලේඛන භාෂාවන් නොවේ.

ක්‍රියාකාරී භාෂාවන් ඉහළ යන්නේ එක් දෙයක් නිසා පමණි: භෞතික විද්‍යාවේ වර්තමාන ස්වාභාවික සීමාවන්. භෞතික නීති හේතුවෙන් අද දින සකසනයන්ට උපදෙස් සැකසීමේ වේගය සීමිතය. ඔරලෝසු සංඛ්‍යාතයේ එකතැන පල්වීමක් ඔබ දකින නමුත් හරය සැකසීමේ ප්‍රසාරණයකි. නවීන යෙදුම්වල වේගය වැඩි කිරීම සඳහා උපදෙස්වල සමාන්තරකරණය වඩ වඩාත් වැදගත් වන්නේ එබැවිනි. අර්ථ දැක්වීම අනුව ක්‍රියාකාරී වැඩසටහන්කරණයට කිසිදු තත්වයක් නොමැති අතර එම නිසා අතුරු ආබාධ නොමැති බැවින් සමාන්තරව කාර්යයන් ආරක්ෂිතව සැකසීම ආරක්ෂිත වේ.

GoF රටා යල්පැන නැත. සැබෑ ලෝක අවශ්‍යතා ආදර්ශනය කිරීම සඳහා ඒවා අවම වශයෙන් අවශ්‍ය වේ. නමුත් ඔබ ක්‍රියාකාරී ක්‍රමලේඛන භාෂාවක් භාවිතා කරන්නේ නම් ඒවා ඒවායේ දෙමුහුන් සමානකම් බවට පරිවර්තනය කළ යුතුය. අවසාන වශයෙන් ඔබ නොපසුබට උත්සාහයක් භාවිතා කරන්නේ නම් ක්‍රියාකාරී වැඩසටහන් පමණක් සෑදීමට ඔබට අවස්ථාවක් නැත. ඔබේ වැඩසටහනේ දෙමුහුන් අංග සඳහා GoF රටා භාවිතා කිරීමේ අවශ්‍යතාවය පවතී. තනිකරම ක්‍රියාකාරී වන වෙනත් ඕනෑම මූලද්‍රව්‍යයක් සඳහා රාජ්‍යයක් නොමැති නිසා GoF රටා භාවිතා කිරීමේ අවශ්‍යතාවයක් නොමැත.

සැබෑ ක්‍රියාකාරී ක්‍රමලේඛනය සඳහා GoF රටා අවශ්‍ය නොවන නිසා, SOLID මූලධර්ම අදාළ නොවිය යුතු යැයි එයින් අදහස් නොවේ. SOLID මූලධර්ම ඕනෑම භාෂා පරමාදර්ශයකින් ඔබ්බට ය.


2
එෆ්පීයට රාජ්‍ය තිබිය හැකිය - ගෝලීය, හවුල් හෝ විකෘති තත්වයක් නැත.
vt5491

2

ක්‍රියාකාරී වැඩසටහන්කරණයේදී, සැලසුම් රටාවන්ට වෙනස් අර්ථයක් ඇත. ඇත්ත වශයෙන්ම, බොහෝ OOP සැලසුම් රටා ක්‍රියාකාරී ක්‍රමලේඛනයේ අනවශ්‍ය වන්නේ ඉහළ මට්ටමේ වියුක්ත කිරීම් සහ HOFs ගොඩනැඟිලි කොටස් ලෙස භාවිතා කිරීම නිසා ය.

HOF හි මූලධර්මය යනු වෙනත් කාර්යයන් සඳහා තර්ක ලෙස ශ්‍රිත සම්මත කළ හැකි බවයි. සහ ශ්‍රිතයන්ට අගයන් ආපසු ලබා දිය හැකිය.


1

පිළිගත් පිළිතුර පැවසූ පරිදි, ඕඕපී සහ එෆ්පී සියල්ලටම ඒවායේ නිශ්චිත රටා ඇත.

කෙසේ වෙතත්, සමහර රටාවන් ඉතා සුලභ වන අතර මට සිතිය හැකි සියලුම ක්‍රමලේඛන වේදිකා තිබිය යුතුය. මෙන්න (අසම්පූර්ණ) ලැයිස්තුවක්:

  • ඇඩැප්ටරය. ලෝකයට කතා කිරීමට අවශ්‍ය නොවන තරම් පුළුල් (සහ ස්වයං-සපුරා ඇති) ප්‍රයෝජනවත් ක්‍රමලේඛ වේදිකාවක් ගැන මට සිතිය නොහැකිය. එය එසේ කිරීමට යන්නේ නම්, ඇඩැප්ටරයක් ​​අනිවාර්යයෙන්ම අවශ්‍ය වේ.

  • ෆැසෙඩ්. විශාල ප්‍රභව කේත හැසිරවිය හැකි ඕනෑම ක්‍රමලේඛන වේදිකාවලට මොඩියුලරීකරණය කළ හැකිය. ඔබ වැඩසටහනේ අනෙකුත් කොටස් සඳහා මොඩියුලයක් නිර්මාණය කිරීමට නම්, ඔබට කේතයේ "අපිරිසිදු" කොටස් සඟවා එය ලස්සන අතුරු මුහුණතක් ලබා දීමට අවශ්‍ය වනු ඇත.

  • පරිවර්තකය. පොදුවේ ගත් කල, ඕනෑම වැඩසටහනක් කරන්නේ කාරණා දෙකක් පමණි: විග්‍රහ කිරීම ආදානය සහ මුද්‍රණ ප්‍රතිදානය. මවුස් යෙදවුම් විග්‍රහ කිරීමට අවශ්‍ය වන අතර කවුළු විජට් මුද්‍රණය කළ යුතුය. එමනිසා, කාවැද්දූ පරිවර්තකයෙකු සිටීම මඟින් දේවල් අභිරුචිකරණය කිරීමට වැඩසටහනට අමතර බලයක් ලබා දේ.

සාමාන්‍ය එෆ්.පී. භාෂාවක් වන හස්කල්, ගොෆ් රටාවන්ට සමාන යමක් ඇති නමුත් විවිධ නම් වලින් මම දුටුවෙමි. මගේ මතය අනුව මෙයින් ඇඟවෙන්නේ එෆ්පී සහ ඕඕපී භාෂා දෙකෙන්ම විසඳීමට පොදු ගැටලු කිහිපයක් ඇති නිසා ඔවුන් එහි සිටි බවයි.

  • මොනාඩ් ට්‍රාන්ස්ෆෝමර් සහ සැරසිලි කරන්නා. කලින් භාවිතා කළ මොනාඩ් එකකට අමතර හැකියාවක් එක් කිරීමට කලින් භාවිතා කළ අතර, දෙවැන්න පවතින වස්තුවකට අමතර හැකියාවක් එක් කරයි.

1

මම හිතන්නේ එක් එක් ආදර්ශය වෙනස් අරමුණක් ඉටු කරන අතර මේ ආකාරයට සැසඳිය නොහැකිය.

GoF සැලසුම් රටා සෑම භාෂාවකටම අදාළ වන බව මා අසා නැත. ඒවා සියලුම OOP භාෂාවන්ට අදාළ වන බව මා අසා ඇත. ඔබ ක්‍රියාකාරී ක්‍රමලේඛයක් භාවිතා කරන්නේ නම් ඔබ විසඳන ගැටළු වල වසම OO භාෂාවන්ට වඩා වෙනස් වේ.

පරිශීලක අතුරුමුහුණතක් ලිවීමට මම ක්‍රියාකාරී භාෂාව භාවිතා නොකරමි, නමුත් C # හෝ Java වැනි OO භාෂාවලින් එකක් මෙම කාර්යය පහසු කරයි. මම ක්‍රියාකාරී භාෂාවක් ලියන්නේ නම් OO නිර්මාණ රටා භාවිතා කිරීම ගැන මම නොසිතමි.


1

OOP සහ FP එකිනෙකට වෙනස් අරමුණු ඇත. මෘදුකාංග සංරචකවල සංකීර්ණතා / චලනය වන කොටස් සංයුක්ත කිරීම OOP අරමුණු කරන අතර මෘදුකාංග සංරචකවල සංකීර්ණත්වය සහ පරායත්තතාවයන් අවම කිරීම FP අරමුණු කරයි.

කෙසේ වෙතත්, මෙම උපමා දෙක අනිවාර්යයෙන්ම 100% පරස්පර විරෝධී නොවන අතර ලෝක දෙකෙන්ම ප්‍රතිලාභ ලබා ගැනීම සඳහා එකට යෙදිය හැකිය.

C # වැනි ක්‍රියාකාරී වැඩසටහන් සඳහා ස්වදේශීයව සහාය නොදක්වන භාෂාවක් සමඟ වුවද, ඔබ FP මූලධර්ම තේරුම් ගන්නේ නම් ඔබට ක්‍රියාකාරී කේත ලිවිය හැකිය. ඔබ OOP මූලධර්ම, රටා සහ හොඳම භාවිතයන් තේරුම් ගන්නේ නම් ඔබට F # භාවිතා කරමින් OOP මූලධර්ම යෙදිය හැකිය. ඔබ භාවිතා කරන ක්‍රමලේඛන භාෂාව නොසලකා ඔබ විසඳීමට උත්සාහ කරන තත්වය සහ ගැටලුව මත පදනම්ව ඔබ නිවැරදි තේරීමක් කරනු ඇත.


1

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

බහු-පරමාදර්ශී භාෂාවකින් (රූබි) වර්ධනය වන මගේ අත්දැකීම් අනුව, එෆ්පී ක්‍රියාවට නැංවීම සරල අවස්ථාවන්හිදී හොඳින් ක්‍රියාත්මක වේ, නමුත් සන්දර්භය වඩාත් සංකීර්ණ වන විට GoF OOP පදනම් කරගත් ප්‍රවේශය වඩා සුදුසුය.

FP ප්රවේශය OOP ප්රවේශය ප්රතිස්ථාපනය නොකරයි, එය එය සම්පූර්ණ කරයි.


0

ක්‍රියාකාරී ක්‍රමලේඛනයේ ප්‍රධානතම ලක්ෂණය වන්නේ IMHO, ඔබ ප්‍රකාශන හැර වෙනත් කිසිවක් නොමැති බවයි - ප්‍රකාශන තුළ ඇති ප්‍රකාශන තුළ ඇති ප්‍රකාශන සියල්ලම ඇගයීමට ලක් කරන අවසාන, අවසාන ප්‍රකාශනය දක්වා “ඇගයීමේදී යන්ත්‍රය උණුසුම් කරයි”.

වස්තු-නැඹුරු වැඩසටහන්කරණයේ ප්‍රධානතම ලක්ෂණය වන IMHO යනු ඔබ අභ්‍යන්තර තත්වයක් ඇති වස්තූන් සමඟ ක්‍රමලේඛනය කිරීමයි. පිරිසිදු කාර්යයන් තුළ ඔබට අභ්‍යන්තර තත්වය තිබිය නොහැක - වස්තු-නැඹුරු ක්‍රමලේඛන භාෂාවන්ට දේවල් සිදුවීමට ප්‍රකාශ අවශ්‍ය වේ. (ක්‍රියාකාරී වැඩසටහන්කරණයේ කිසිදු ප්‍රකාශයක් නොමැත.)

ඔබ ඇපල් දොඩම් සමඟ සංසන්දනය කරයි. ක්‍රියාකාරී ක්‍රමලේඛනය ප්‍රකාශන සමඟ ක්‍රමලේඛනය වන අතර වස්තු-නැඹුරු වැඩසටහන්කරණය අභ්‍යන්තර තත්වය සමඟ ක්‍රමලේඛනය වන හෙයින් වස්තු-නැඹුරු වැඩසටහන්කරණයේ රටා ක්‍රියාකාරී වැඩසටහන්කරණයට අදාළ නොවේ.


හ්ම්, ප්‍රශ්නයට පිළිතුරු දීමට පෙර වයස අවුරුදු එකොළහක් බව මා දැක තිබිය යුතුය. :-)
ජිම් ගංවතුර

0

ඔබම සන්නද්ධ වන්න.

මෝස්තර රටා ප්‍රතිස්ථාපනය කර SOLID සහ DRY ඉවත් කර ඇති බව මා පවසන විට එය බොහෝ දෙනෙකුගේ සිත් තැවුලට පත් කරනු ඇත. මම කවුරුත් නැහැ. එසේ වුවද, මම සාමූහික (නිෂ්පාදන) ගෘහ නිර්මාණ ශිල්පය නිවැරදිව ආකෘතිගත කර ඇති අතර එහි පිටුපස ඇති කේතය සහ විද්‍යාව සමඟ අමුත්තන් ගොඩනැඟීමේ ක්‍රියාවලීන් සඳහා වන නීති මගේ වෙබ් අඩවිය වන http://www.powersemantics.com/ හි ප්‍රකාශයට පත් කළෙමි .

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

  • නිෂ්පාදනය = සෑම පියවරක්ම එක් නිෂ්පාදනයක් සමඟ අන්තර් ක්‍රියා කරයි
  • OOP = සෑම පියවරක්ම තමා හා අනෙකුත් මොඩියුලයන් සමඟ අන්තර්ක්‍රියා කරයි, නිෂ්පාදිතය ලක්ෂ්‍යයේ සිට ලක්ෂ්‍යය දක්වා වැඩකට නැති කාර්යාල සේවකයින් මෙන් ගමන් කරයි

මෙම ගෘහ නිර්මාණ ශිල්පය කිසි විටෙකත් ප්‍රතිනිර්මාණය කිරීම අවශ්‍ය නොවේ. සංකීර්ණතාවයට බලපාන කේන්ද්‍රීයකරණය සහ බෙදා හැරීම පිළිබඳ නීති ද ඇත. නමුත් ඔබේ ප්‍රශ්නයට පිළිතුරු සැපයීම සඳහා, ක්‍රියාකාරී ක්‍රමලේඛනය යනු සැකසුම් අර්ථකථන සමූහයක් මිස මහා අභිරුචි ක්‍රියාවලීන් සඳහා ගෘහ නිර්මාණ ශිල්පයක් නොවේ. 1) ප්‍රභව මාර්ගගත කිරීම (ස්ක්‍රිප්ට්) ලේඛනයක් ලෙස පවතින අතර වෙඩි තැබීමට පෙර වයිල්ඩර්ට නැවත ලිවිය හැකි අතර 2) මොඩියුල පහසුවෙන් සහ ගතිකව එකතු කිරීම හෝ ඉවත් කිරීම.

අපට කිව හැක්කේ ඕඕපී යනු “දෘ c කේත ක්‍රියාවලියක්” වන අතර සැලසුම් රටා එම ආදර්ශය වළක්වා ගත හැකි ක්‍රම බවයි. මහා අභිරුචිකරණය යනු එයයි. සැලසුම් රටා ගතික ක්‍රියාවලීන් අවුල් සහගත දෘඩ කේතයක් ලෙස දක්වයි. කිසිම තේරුමක් නැහැ. F # මඟින් පරාමිතියක් ලෙස ක්‍රියා කිරීමට ඉඩ ලබා දීම යන්නෙන් අදහස් වන්නේ ක්‍රියාකාරී සහ OOP භාෂාවන් එකවරම විශාල අභිරුචිකරණයක් සිදු කිරීමට උත්සාහ කිරීමයි.

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


0

ඉහළ මට්ටමේ ක්‍රියාකාරී පීඑල් (පංති, මොඩියුල ආදිය සහිත ඕකාම් වැනි) නිසැකවම ඕඕපී අත්‍යවශ්‍ය භාෂාවන් වර්ගයේ බහුකාර්යතාවයෙන් සහ ප්‍රකාශන ශක්තියෙන් අභිබවා යයි. වියුක්තයන් කාන්දු නොවේ, ඔබේ අදහස් බොහොමයක් කෙලින්ම වැඩසටහන තුළ ප්‍රකාශ කළ හැකිය. එමනිසා, ඔව්, එය මෝස්තර රටා ප්‍රතිස්ථාපනය කරයි, ඒවායින් බොහොමයක් කෙසේ හෝ ක්‍රියාකාරී රටාවන්ට සාපේක්ෂව හාස්‍යජනක ලෙස සරල ය.

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.