Intentional programming
કોમ્પ્યુટર પ્રોગ્રામિંગમાં, ઇરાદાપૂર્વકનું પ્રોગ્રામિંગ એ ચાર્લ્સ સિમોની દ્વારા વિકસાવવામાં આવેલ એક પ્રોગ્રામિંગ નમૂનારૂપ છે જે સોફ્ટવેર સ્રોત કોડમાં ચોક્કસ હેતુને એન્કોડ કરે છે જે પ્રોગ્રામરો (અથવા વપરાશકર્તાઓ) તેમના કાર્યની કલ્પના કરતી વખતે ધ્યાનમાં રાખે છે. એબ્સ્ટ્રેક્શનના યોગ્ય સ્તરનો ઉપયોગ કરીને કે જેના પર પ્રોગ્રામર વિચારી રહ્યો છે, કમ્પ્યુટર પ્રોગ્રામ બનાવવાનું અને જાળવવાનું સરળ બને છે. હેતુઓ માટેની ચિંતાઓને અલગ કરીને અને તેઓ કેવી રીતે સંચાલિત થઈ રહ્યા છે તેના પર, સોફ્ટવેર વધુ મોડ્યુલર બને છે અને વધુ ફરીથી વાપરી શકાય તેવા સોફ્ટવેર કોડ માટે પરવાનગી આપે છે. ઇરાદાપૂર્વકનું પ્રોગ્રામિંગ માઇક્રોસોફ્ટના ભૂતપૂર્વ મુખ્ય આર્કિટેક્ટ ચાર્લ્સ સિમોની દ્વારા વિકસાવવામાં આવ્યું હતું, જેમણે માઇક્રોસોફ્ટ રિસર્ચમાં એક ટીમનું નેતૃત્વ કર્યું હતું, જેણે પ્રતિમાન વિકસાવ્યું હતું અને આઇપી (ઇરાદાપૂર્વકના પ્રોગ્રામિંગ માટે) તરીકે ઓળખાતું સંકલિત વિકાસ વાતાવરણ (આઇ. ડી. ઇ.) બનાવ્યું હતું જેણે પ્રતિમાનનું પ્રદર્શન કર્યું હતું. માઇક્રોસોફ્ટે ઇરાદાપૂર્વકના પ્રોગ્રામિંગ નમૂનાનું ઉત્પાદન ન કરવાનું નક્કી કર્યું, કારણ કે 2000ના દાયકાની શરૂઆતમાં માઇક્રોસોફ્ટે જાવા અપનાવવાનો સામનો કરવા માટે C #અને. NET બહાર પાડ્યા હતા. ચાર્લ્સ સિમોનીએ માઇક્રોસોફ્ટની મંજૂરી સાથે, તેમના વિચારને માઇક્રોસોફ્ટમાંથી બહાર કાઢવાનો અને તેને પોતે વ્યાપારીકરણ કરવાનો નિર્ણય લીધો. તેમણે આને આગળ વધારવા માટે ઈન્ટેન્શનલ સોફ્ટવેર કંપનીની સ્થાપના કરી હતી. માઇક્રોસોફ્ટે ઈન્ટેન્શનલ પ્રોગ્રામિંગ પેટન્ટને લાઇસન્સ આપ્યું હતું, જે સિમોનીએ માઈક્રોસોફ્ટમાં હતા ત્યારે મેળવ્યું હતું, પરંતુ ઈન્ટેન્શનલ સોફ્ટવેરને કોઈ સ્રોત કોડ નહોતો. માઇક્રોસોફ્ટ રિસર્ચ ખાતે વિકસાવવામાં આવેલા ઇરાદાપૂર્વકના પ્રોગ્રામિંગનું વિહંગાવલોકન જનરેટિવ પ્રોગ્રામિંગઃ મેથડ્સ, ટૂલ્સ એન્ડ એપ્લિકેશન્સ પુસ્તકના પ્રકરણ 11માં આપવામાં આવ્યું છે. વિકાસ ચક્ર સિમોની દ્વારા કલ્પના કરવામાં આવી છે તેમ, ઇરાદાપૂર્વકના પ્રોગ્રામિંગ દાખલા દ્વારા નવી એપ્લિકેશન વિકસાવવી નીચે મુજબ આગળ વધે છે. પ્રોગ્રામર આપેલ સમસ્યા ક્ષેત્ર (જેમ કે ઉત્પાદકતા કાર્યક્રમો અથવા જીવન વીમો) માટે યોજના અને વ્યવસાયિક જ્ઞાનના સંકેતને ટેકો આપતા WYSIWYG જેવા વાતાવરણનું નિર્માણ કરે છે. વપરાશકર્તાઓ પછી તેમના હેતુઓને પકડવા માટે આ વાતાવરણનો ઉપયોગ કરે છે, જે ઉચ્ચ સ્તરના અમૂર્તતા પર રેકોર્ડ કરવામાં આવે છે. પર્યાવરણ આ ઇરાદાઓ પર કામ કરી શકે છે અને સ્પ્રેડશીટની જેમ પ્રક્રિયા અને અમલ કરી શકાય તેવા અર્થપૂર્ણ રીતે સમૃદ્ધ દસ્તાવેજો બનાવવા માટે વપરાશકર્તાને મદદ કરી શકે છે. નોંધાયેલ જ્ઞાન મૂલ્યાંકનકાર દ્વારા ચલાવવામાં આવે છે અથવા અંતિમ કાર્યક્રમ બનાવવા માટે સંકલિત કરવામાં આવે છે. ક્રમિક ફેરફારો માત્ર WYSIWYG સ્તરે જ કરવામાં આવે છે. વર્ડ પ્રોસેસર્સ, સ્પ્રેડશીટ્સ અથવા પ્રેઝન્ટેશન સોફ્ટવેરથી વિપરીત, ઇરાદાપૂર્વકના વાતાવરણમાં વ્યક્ત કરવાના હેતુઓની રચના અને શબ્દાર્થ માટે વધુ ટેકો હોય છે, અને ઇન્ટરેક્ટિવ દસ્તાવેજો બનાવી શકે છે જે વપરાશકર્તા શું પરિપૂર્ણ કરવાનો પ્રયાસ કરી રહ્યો છે તે વધુ સમૃદ્ધ રીતે મેળવે છે. એક ખાસ કેસ એ છે કે જ્યારે સામગ્રી પ્રોગ્રામ કોડ હોય અને પર્યાવરણ એક બુદ્ધિશાળી IDE બની જાય. સ્રોત કોડ સંગ્રહ અને પ્રસ્તુતિને અલગ પાડવી ઇરાદાપૂર્વકના પ્રોગ્રામિંગના ફાયદાઓની ચાવી એ છે કે ડોમેન કોડ કે જે હેતુઓને મેળવે છે તે સ્રોત કોડ ટેક્સ્ટ ફાઇલોમાં સંગ્રહિત નથી, પરંતુ વૃક્ષ-આધારિત સંગ્રહમાં (દ્વિસંગી અથવા XML હોઈ શકે છે) સંગ્રહિત છે. સ્ટોરેજ ફોર્મેટ સાથે પર્યાવરણનું ચુસ્ત એકીકરણ સોર્સ કોડમાં ડેટાબેઝના સામાન્યકરણની કેટલીક સારી સુવિધાઓ લાવે છે. દરેક વ્યાખ્યાને એક અનન્ય ઓળખ આપીને અને ચલ અને સંચાલકોના નામને બરાબર એક જ જગ્યાએ સંગ્રહિત કરીને રિડન્ડન્સી દૂર કરવામાં આવે છે. આનાથી ઘોષણાઓને સંદર્ભોથી આંતરિક રીતે અલગ પાડવાનું સરળ બને છે, અને પર્યાવરણ તેમને અલગ રીતે બતાવી શકે છે. પ્રોગ્રામમાં વ્હાઇટસ્પેસ પણ સ્રોત કોડના ભાગ રૂપે સંગ્રહિત નથી, અને પ્રોજેક્ટ પર કામ કરતા દરેક પ્રોગ્રામર સ્રોતની ઇન્ડેન્ટેશન ડિસ્પ્લે પસંદ કરી શકે છે. વધુ આમૂલ વિઝ્યુલાઇઝેશનમાં નિવેદનની સૂચિને નેસ્ટેડ બોક્સ તરીકે દર્શાવવી, શરતી અભિવ્યક્તિઓને લોજિક ગેટ્સ તરીકે સંપાદિત કરવી અથવા ચાઇનીઝમાં નામોને ફરીથી પ્રસ્તુત કરવાનો સમાવેશ થાય છે. આ સિસ્ટમ સી + + અને જાવા જેવી લોકપ્રિય ભાષાઓ માટે સામાન્ય ભાષાનો ઉપયોગ કરે છે, જ્યારે પર્યાવરણના વપરાશકર્તાઓને એફિલ અને અન્ય ભાષાઓના વિચારો સાથે મિશ્રણ અને મેળ કરવા દે છે. ઘણીવાર ડોમેન-વિશિષ્ટ ભાષાઓ અને પાસા-લક્ષી પ્રોગ્રામિંગ દ્વારા ભાષા-લક્ષી પ્રોગ્રામિંગ જેવા જ સંદર્ભમાં ઉલ્લેખ કરવામાં આવે છે, આઇ. પી. જનરેટિવ પ્રોગ્રામિંગમાં કેટલીક સફળતાઓ પ્રદાન કરવાનો હેતુ ધરાવે છે. આ તકનીકો વિકાસકર્તાઓને કોઈપણ નવી ભાષાઓ માટે સંપૂર્ણ સંકલનકાર અને સંપાદક લખવામાં રોકાણ કર્યા વિના ડોમેન-વિશિષ્ટ રચનાઓ મેળવવા માટે ભાષાના વાતાવરણને વિસ્તૃત કરવાની મંજૂરી આપે છે. પ્રોગ્રામિંગ ઉદાહરણ એક જાવા પ્રોગ્રામ કે જે કર્લી કૌંસ વાક્યરચનાનો ઉપયોગ કરીને 1 થી 10 સુધીની સંખ્યાઓ લખે છે, તે આના જેવો દેખાઈ શકે છેઃ માટે (પૂર્ણાંક i = 1; i <= 10; i + +) {System.out.println ("સંખ્યા છે" + i);} ઉપરના કોડમાં મોટાભાગની પ્રોગ્રામિંગ ભાષાઓની સામાન્ય રચના છે, બાઉન્ડેડ લૂપ, આ કિસ્સામાં ફોર કન્સ્ટ્રક્ટ દ્વારા રજૂ થાય છે. કોડ, જ્યારે સંકલિત કરવામાં આવે, જોડવામાં આવે અને ચલાવવામાં આવે, ત્યારે તે 10 વખત લૂપ કરશે, તેને છાપ્યા પછી દરેક વખતે i ની કિંમતમાં વધારો કરશે. પરંતુ આ કોડ પ્રોગ્રામરના હેતુઓને પકડતો નથી, એટલે કે "1 થી 10 નંબરો છાપવા". આ સરળ કિસ્સામાં, કોડ જાળવવા માટે પૂછવામાં આવેલા પ્રોગ્રામર કદાચ તે શું કરવાનો છે તે સમજી શકે છે, પરંતુ તે હંમેશા એટલું સરળ હોતું નથી. લૂપ્સ કે જે ઘણી રેખાઓ અથવા પૃષ્ઠોમાં વિસ્તરે છે, તે સમજવું ખૂબ જ મુશ્કેલ બની શકે છે, ખાસ કરીને જો મૂળ પ્રોગ્રામર અસ્પષ્ટ લેબલ્સનો ઉપયોગ કરે છે. પરંપરાગત રીતે કોડનો ઈરાદો સૂચવવાનો એકમાત્ર રસ્તો સ્રોત કોડ ટિપ્પણીઓ ઉમેરવાનો હતો, પરંતુ ઘણીવાર ટિપ્પણીઓ ઉમેરવામાં આવતી નથી, અથવા અસ્પષ્ટ હોય છે, અથવા તેઓ મૂળ રીતે વર્ણવેલ સ્રોત કોડ સાથે સુમેળમાંથી બહાર નીકળી જાય છે. ઇરાદાપૂર્વકની પ્રોગ્રામિંગ પ્રણાલીઓમાં ઉપરોક્ત લૂપને અમુક સ્તરે રજૂ કરી શકાય છે, જેમ કે "1 થી 10 નંબરો પ્રિન્ટ કરો". સિસ્ટમ પછી સ્રોત કોડ જનરેટ કરવાના હેતુઓનો ઉપયોગ કરશે, સંભવતઃ ઉપરના કોડ જેવું જ કંઈક. મુખ્ય તફાવત એ છે કે ઇરાદાપૂર્વકની પ્રોગ્રામિંગ સિસ્ટમો સિમેન્ટીક સ્તર જાળવી રાખે છે, જેનો સ્રોત કોડમાં અભાવ છે, અને જે મોટા પ્રોગ્રામ્સમાં વાંચનીયતાને નાટ્યાત્મક રીતે સરળ બનાવી શકે છે. મોટાભાગની ભાષાઓમાં ચોક્કસ પ્રકારની અમૂર્તતા મેળવવા માટેની પદ્ધતિઓ હોય છે, તેમ છતાં આઇ. પી., ભાષાઓના લિસ્પ પરિવારની જેમ, સંપૂર્ણપણે નવી પદ્ધતિઓ ઉમેરવાની મંજૂરી આપે છે. આમ, જો વિકાસકર્તાએ સી જેવી ભાષાથી શરૂઆત કરી હોય, તો તેઓ કમ્પાઇલર વિકાસકર્તાઓ તેમને ઉમેરવાની રાહ જોયા વિના સી + + જેવી સુવિધાઓ સાથે ભાષાને વિસ્તૃત કરી શકશે. સામ્યતા દ્વારા, પ્રોગ્રામરો દ્વારા માત્ર વર્ગો અને પ્રક્રિયાઓ કરતાં ઘણી વધુ શક્તિશાળી અભિવ્યક્તિ પદ્ધતિઓનો ઉપયોગ કરી શકાય છે. ઓળખ આઇ. પી. ઓળખની વિભાવના પર ધ્યાન કેન્દ્રિત કરે છે. મોટાભાગની પ્રોગ્રામિંગ ભાષાઓ સ્રોત કોડને સાદા લખાણ તરીકે રજૂ કરે છે, તેથી પદાર્થોને નામો દ્વારા વ્યાખ્યાયિત કરવામાં આવે છે, અને તેમની વિશિષ્ટતાનું સંકલનકર્તા દ્વારા અનુમાન લગાવવું પડે છે. ઉદાહરણ તરીકે, સમાન પ્રતીકાત્મક નામનો ઉપયોગ વિવિધ ચલ, પ્રક્રિયાઓ અથવા પ્રકારોને નામ આપવા માટે પણ થઈ શકે છે. કોડમાં કે જે ઘણા પૃષ્ઠો સુધી ફેલાયેલો છે-અથવા, વૈશ્વિક સ્તરે દૃશ્યમાન નામો માટે, બહુવિધ ફાઇલો માટે-તે કહેવું ખૂબ જ મુશ્કેલ બની શકે છે કે શું પ્રતીક વાસ્તવિક ઑબ્જેક્ટનો સંદર્ભ આપે છે. જો કોઈ નામ બદલવામાં આવે, તો તે કોડ જ્યાં તેનો ઉપયોગ કરવામાં આવે છે તેની કાળજીપૂર્વક તપાસ કરવી આવશ્યક છે. તેનાથી વિપરીત, આઇ. પી. પ્રણાલીમાં, તમામ વ્યાખ્યાઓ માત્ર પ્રતીકાત્મક નામો જ નહીં, પણ વસ્તુઓને અનન્ય ખાનગી ઓળખકર્તાઓ પણ આપે છે. આનો અર્થ એ છે કે આઇપી વિકાસ વાતાવરણમાં, ચલ અથવા પ્રક્રિયાનો દરેક સંદર્ભ માત્ર એક નામ નથી-તે મૂળ અસ્તિત્વની કડી છે. આનો મુખ્ય ફાયદો એ છે કે જો કોઈ અસ્તિત્વનું નામ બદલવામાં આવે, તો કાર્યક્રમમાં તેના તમામ સંદર્ભો માન્ય રહે છે (સંદર્ભિત અખંડિતતા તરીકે ઓળખાય છે). આનો અર્થ એ પણ થાય છે કે જો એક જ નામનો ઉપયોગ વિવિધ નેમસ્પેસમાં અનન્ય વ્યાખ્યાઓ માટે કરવામાં આવે છે (જેમ કે ". to _ સ્ટ્રિંગ ()"), તો સમાન નામના સંદર્ભોનું નામ બદલવામાં આવશે નહીં પરંતુ અલગ ઓળખ હશે, જેમ કે ક્યારેક વર્તમાન સંપાદકોમાં શોધ/રિપ્લેસ સાથે થાય છે. આ સુવિધા કાર્યક્રમની બહુભાષી આવૃત્તિઓ રાખવાનું પણ સરળ બનાવે છે; તેમાં તમામ વ્યાખ્યાઓ માટે અંગ્રેજી ભાષાના નામોનો સમૂહ તેમજ જાપાની ભાષાના નામોનો સમૂહ હોઈ શકે છે જેને ઈચ્છા પ્રમાણે બદલી શકાય છે. પ્રોગ્રામમાં દરેક વ્યાખ્યાયિત ઓબ્જેક્ટ માટે એક અનન્ય ઓળખ રાખવાથી સ્વચાલિત રીફેક્ટરિંગ કાર્યો કરવાનું પણ સરળ બને છે, તેમજ વર્ઝનિંગ સિસ્ટમ્સમાં કોડ ચેક-ઇન્સને સરળ બનાવે છે. ઉદાહરણ તરીકે, ઘણી વર્તમાન કોડ સહયોગ પ્રણાલીઓમાં (દા. ત. Git), જ્યારે બે પ્રોગ્રામરો તે સંઘર્ષમાં ફેરફારો કરે છે (એટલે કે. જો એક પ્રોગ્રામર ફંક્શનનું નામ બદલે છે જ્યારે અન્ય તે ફંક્શનની એક લીટીમાં ફેરફાર કરે છે), તો વર્ઝનિંગ સિસ્ટમ વિચારશે કે એક પ્રોગ્રામરે નવું ફંક્શન બનાવ્યું છે જ્યારે અન્યએ જૂના ફંક્શનમાં ફેરફાર કર્યો છે. આઇપી સંસ્કરણ પ્રણાલીમાં, તે જાણશે કે એક પ્રોગ્રામરે માત્ર નામ બદલ્યું છે જ્યારે બીજાએ કોડ બદલ્યું છે. વિગતવાર આઇપી સિસ્ટમોના સ્તરો પણ વિગતના ઘણા સ્તરો પ્રદાન કરે છે, જે પ્રોગ્રામરને "ઝૂમ ઇન" અથવા આઉટ કરવાની મંજૂરી આપે છે. ઉપરના ઉદાહરણમાં, પ્રોગ્રામર એવું સ્તર મેળવવા માટે ઝૂમ આઉટ કરી શકે છે જે કંઈક આવું કહેશેઃ <<1 થી 10 નંબરો પ્રિન્ટ કરો>> આમ આઇ. પી. સિસ્ટમો મોટા પ્રમાણમાં સ્વ-દસ્તાવેજીકરણ કરે છે, જે પ્રોગ્રામરને સંપૂર્ણ રીતે પ્રોગ્રામનું સારું ઉચ્ચ-સ્તરનું ચિત્ર રાખવાની મંજૂરી આપે છે. સમાન કાર્યો એવા પ્રોજેક્ટ્સ છે જે ઉચ્ચ સ્તરના અમૂર્તતા સાથે કોડ બનાવવા માટે સમાન વિચારોનો ઉપયોગ કરે છે. તેમાં નીચેનાનો સમાવેશ થાય છેઃ કન્સેપ્ટ પ્રોગ્રામિંગ લેંગ્વેજ-ઓરિએન્ટેડ પ્રોગ્રામિંગ (એલ. ઓ. પી.) ડોમેન-સ્પેસિફિક લેંગ્વેજ (ડી. એસ. એલ.) પ્રોગ્રામ ટ્રાન્સફોર્મેશન સિમેન્ટીક-ઓરિએન્ટેડ પ્રોગ્રામિંગ (એસ. ઓ. પી.) લિટર પ્રોગ્રામિંગ મોડલ-ડ્રિવન આર્કિટેક્ચર (એમ. ડી. એ.) સોફ્ટવેર ફેક્ટરી મેટાપ્રોગ્રામિંગ લિસ્પ (પ્રોગ્રામિંગ લેંગ્વેજ) ઓટોમેટિક પ્રોગ્રામિંગ ઓબ્જેક્ટ ડેટાબેઝ પ્રોગ્રામિંગ બાય ડેમોન્સ્ટ્રેશન આર્ટેફાકટુર સિમેન્ટીક રિઝોલ્યુશન ટ્રી સ્ટ્રક્ચર એડિટર સંદર્ભો બાહ્ય લિંક્સ ઈન્ટેન્શનલ સોફ્ટવેર-ચાર્લ્સ સિમોનીની કંપની ધ ડેથ ઓફ કમ્પ્યુટર લેંગ્વેજીઝ, ધ બર્થ ઓફ ઈન્ટેન્શનલ પ્રોગ્રામિંગ, ચાર્લ્સ સિમોનીનો ટેકનિકલ રિપોર્ટ (1995) ઈન્ટેન્શનલ પ્રોગ્રામિંગ-ઇનોવેશન ઇન ધ લેગસી એજ, ચાર્લ્સ સિમોનીનો એક ટોક (1996) - માર્ટિન ફોલ્લરનો સામાન્ય વર્ગના સાધનો પરનો લેખ જેનું ઇરાદાપૂર્વકનું પ્રોગ્રામિંગ એક ઉદાહરણ છે. મંગળવાર, જાન્યુઆરી 9,2007, સ્કોટ રોસેનબર્ગ, ટેક્નોલોજી રિવ્યૂ વેઇટિંગ ધ ડે વ્હેન એવરીવન રાઈટ્સ સોફ્ટવેર, ધ ન્યૂ યોર્ક ટાઇમ્સ, 28 જાન્યુઆરી 2007 ઇઝ પ્રોગ્રામિંગ એ એન્ક્રિપ્શનનું એક સ્વરૂપ છે?, ચાર્લ્સ સિમોની દ્વારા (2005) એબ્સ્ટ્રેક્શનના યોગ્ય સ્તરો, ચાર્લ્સ સિમોની દ્વારા (2005) કાર્યક્રમોની માહિતી સામગ્રી, ચાર્લ્સ સિમોની દ્વારા (2005) લક્ષણ Xને હાનિકારક માનવામાં આવે છે, ચાર્લ્સ સિમોની દ્વારા (2005) સંકેતો અને પ્રોગ્રામિંગ ભાષાઓ, ચાર્લ્સ સિમોની દ્વારા (2005) વિકાસકર્તા તરફથી વ્યક્તિગત અવલોકનો, માર્ક એડલ દ્વારા (2005) માઇક્રોસોફ્ટ રિસર્ચનું શૈક્ષણિક વીડિયો તેમની ઇરાદાપૂર્વકની પ્રોગ્રામિંગ સિસ્ટમ (2005) રજૂ કરે છે.