Call super
કૉલ સુપર એ કેટલીક ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ ભાષાઓની કોડ ગંધ અથવા વિરોધી પેટર્ન છે. કૉલ સુપર એ એક ડિઝાઇન પેટર્ન છે જેમાં ચોક્કસ વર્ગ નિર્ધારિત કરે છે કે વ્યુત્પન્ન પેટા વર્ગમાં, વપરાશકર્તાએ એક પદ્ધતિને ઓવરરાઇડ કરવી જરૂરી છે અને ચોક્કસ બિંદુ પર ઓવરરાઇડ કરેલા કાર્યને જ પાછા કૉલ કરવું જરૂરી છે. ઓવરરાઈડન પદ્ધતિ ઇરાદાપૂર્વક અપૂર્ણ હોઈ શકે છે, અને નિર્ધારિત રીતે તેની કાર્યક્ષમતાને વધારવા માટે ઓવરરાઈડિંગ પદ્ધતિ પર નિર્ભર હોઈ શકે છે. જો કે, હકીકત એ છે કે ભાષા પોતે આ કોલ પર સૂચવવામાં આવેલી તમામ શરતોને લાગુ કરવામાં સક્ષમ ન હોઈ શકે તે જ આને વિરોધી પેટર્ન બનાવે છે. વર્ણન ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગમાં, વપરાશકર્તાઓ પેટા વર્ગોમાં સુપરક્લાસના ગુણધર્મો અને વર્તનનો વારસો મેળવી શકે છે. પેટા વર્ગ તેના સુપરક્લાસની પદ્ધતિઓને ઓવરરાઇડ કરી શકે છે, સુપરક્લાસના અમલીકરણ માટે પદ્ધતિના તેના પોતાના અમલીકરણને બદલી શકે છે. કેટલીકવાર ઓવરરાઈડિંગ પદ્ધતિ સુપરક્લાસમાં અનુરૂપ કાર્યક્ષમતાને સંપૂર્ણપણે બદલશે, જ્યારે અન્ય કિસ્સાઓમાં સુપરક્લાસની પદ્ધતિને હજુ પણ ઓવરરાઈડિંગ પદ્ધતિમાંથી કૉલ કરવી આવશ્યક છે. તેથી, મોટાભાગની પ્રોગ્રામિંગ ભાષાઓ માટે જરૂરી છે કે ઓવરરાઈડિંગ પદ્ધતિને અમલમાં મૂકવા માટે સુપરક્લાસ પર સ્પષ્ટ રીતે ઓવરરાઈડન પદ્ધતિને કૉલ કરવી આવશ્યક છે. કોલ સુપર એન્ટી-પેટર્ન ચોક્કસ વર્ગમાંથી પેટા વર્ગ મેળવવા માટે ઇન્ટરફેસ અથવા માળખાના વપરાશકર્તાઓ પર આધાર રાખે છે, ચોક્કસ પદ્ધતિને ઓવરરાઇડ કરે છે અને ઓવરરાઇડ પદ્ધતિથી મૂળ પદ્ધતિને કૉલ કરવા માટે ઓવરરાઇડ પદ્ધતિની જરૂર પડે છેઃ આ ઘણીવાર જરૂરી હોય છે, કારણ કે સુપરક્લાસે વર્ગ અથવા માળખાને યોગ્ય રીતે કામ કરવા માટે કેટલાક સેટઅપ કાર્યો કરવા પડે છે, અથવા કારણ કે સુપરક્લાસનું મુખ્ય કાર્ય (જે આ પદ્ધતિ દ્વારા કરવામાં આવે છે) ફક્ત પેટા વર્ગ દ્વારા વધારવામાં આવે છે. વિરોધી પેટર્ન એ માતાપિતાને બોલાવવાનું છે. વાસ્તવિક કોડમાં ઘણા ઉદાહરણો છે જ્યાં પેટા વર્ગની પદ્ધતિ હજુ પણ સુપરક્લાસની કાર્યક્ષમતા ઇચ્છે છે, સામાન્ય રીતે જ્યાં તે ફક્ત પિતૃ કાર્યક્ષમતામાં વધારો કરે છે. જો તે કાર્યક્ષમતાને સંપૂર્ણપણે બદલી રહ્યું હોય તો પણ તેને હજુ પણ પેરેન્ટ ક્લાસને કૉલ કરવો પડે, તો એન્ટિ-પેટર્ન હાજર છે. આ મુદ્દાઓને ઉકેલવા માટે વધુ સારો અભિગમ એ છે કે ટેમ્પ્લેટ પદ્ધતિ પેટર્નનો ઉપયોગ કરવો, જ્યાં સુપરક્લાસમાં શુદ્ધ અમૂર્ત પદ્ધતિનો સમાવેશ થાય છે જે પેટા વર્ગો દ્વારા અમલમાં મૂકવી આવશ્યક છે અને મૂળ પદ્ધતિને તે પદ્ધતિ કહે છેઃ ભાષામાં વિવિધતા પ્રોગ્રામ્સમાં આ વિરોધી પેટર્નનો દેખાવ સામાન્ય રીતે એટલા માટે હોય છે કારણ કે કેટલીક પ્રોગ્રામિંગ ભાષાઓ કરારબદ્ધ રીતે ખાતરી કરવા માટે સુવિધા પ્રદાન કરે છે કે સુપર પદ્ધતિને વ્યુત્પન્ન વર્ગમાંથી બોલાવવામાં આવે છે. એક ભાષા જે આ લક્ષણ ધરાવે છે, તે ખૂબ જ ક્રાંતિકારી રીતે, બીટા છે. આ સુવિધા જાવા અને સી + + માં મર્યાદિત રીતે જોવા મળે છે, જ્યાં ચાઈલ્ડ ક્લાસ કન્સ્ટ્રક્ટર હંમેશા પેરેન્ટ ક્લાસ કન્સ્ટ્રક્ટરને ફોન કરે છે. કોમન લિસ્પ (ખાસ કરીને કોમન લિસ્પ ઓબ્જેક્ટ સિસ્ટમ) જેવી પદ્ધતિઓ પહેલાં અને પછી ટેકો આપતી ભાષાઓ, આ વિરોધી પેટર્નને ટાળવા માટે એક અલગ રીત પ્રદાન કરે છે. પેટા વર્ગનો પ્રોગ્રામર, સુપરક્લાસની પદ્ધતિને ઓવરરાઇડ કરવાને બદલે, વધારાની પદ્ધતિ પૂરી પાડી શકે છે જે સુપરક્લાસની પદ્ધતિ પહેલાં અથવા પછી ચલાવવામાં આવશે. ઉપરાંત, સુપરક્લાસનો પ્રોગ્રામર પેટા વર્ગની ક્રિયાઓ ઉપરાંત અમલમાં મૂકવાની ખાતરી આપતી પદ્ધતિઓ પહેલાં, પછી અને તેની આસપાસ સ્પષ્ટ કરી શકે છે. ઉદાહરણ તરીકે ધારો કે વિડિયો રેન્ટલ સ્ટોરની ઇન્વેન્ટરી વિશે અહેવાલ તૈયાર કરવા માટે એક વર્ગ છે. દરેક ચોક્કસ સ્ટોરમાં હાલમાં ઉપલબ્ધ વીડિયોને ટેબ્યુલેટ કરવાની એક અલગ રીત હોય છે, પરંતુ અંતિમ અહેવાલ બનાવવા માટેનું અલ્ગોરિધમ તમામ સ્ટોર્સ માટે સમાન છે. એક માળખું કે જે કોલ સુપર એન્ટી-પેટર્નનો ઉપયોગ કરે છે તે નીચેનો અમૂર્ત વર્ગ પ્રદાન કરી શકે છે (C #માં): અમૂર્ત વર્ગ રિપોર્ટજનરેટર {સાર્વજનિક વર્ચ્યુઅલ રિપોર્ટ ક્રિએટ રિપોર્ટ () {// સામાન્ય અહેવાલ ઑબ્જેક્ટ જનરેટ કરો//. નવો અહેવાલ પરત કરો (.);} વર્ગના વપરાશકર્તા પાસેથી આના જેવા પેટા વર્ગને અમલમાં મૂકવાની અપેક્ષા રાખવામાં આવે છેઃ વર્ગ કોંક્રિટ રિપોર્ટજનરેટરઃ રિપોર્ટજનરેટર {સાર્વજનિક ઓવરરાઇડ રિપોર્ટ ક્રિએટ રિપોર્ટ () {// સ્ટોર-વિશિષ્ટ રીતે ટેબ્યુલેટ ડેટા//.// આ વર્ગની ડિઝાઇન માટે પેરેન્ટ ક્રિએટ રિપોર્ટ () કાર્યને ઓવરરાઇડ કાર્યના// અંતમાં બોલાવવાની જરૂર છે. પરંતુ નોંધ કરો કે આ વાક્ય સરળતાથી છોડી શકાય છે, અથવા// પરત કરેલા અહેવાલને કૉલ પછી વધુ સુધારી શકાય છે, જે વર્ગ ડિઝાઇન// અને સંભવતઃ કંપની-વ્યાપી અહેવાલ બંધારણનું ઉલ્લંઘન કરે છે. રીટર્ન base.CreateReport ();} એક પ્રાધાન્યવાળું ઈન્ટરફેસ આના જેવું દેખાય છેઃ અમૂર્ત વર્ગ રિપોર્ટજનરેટર {જાહેર અહેવાલ બનાવો અહેવાલ () {ટેબ્યુલેટ ();// સામાન્ય અહેવાલ ઓબ્જેક્ટ જનરેટ કરો//. નવો અહેવાલ (.) પરત કરો;} સંરક્ષિત અમૂર્ત રદબાતલ ટેબ્યુલેટ ();} અમલીકરણ આ વર્ગને આ રીતે ઓવરરાઇડ કરશેઃ વર્ગ કોંક્રિટ રિપોર્ટજનરેટરઃ રિપોર્ટજનરેટર {સંરક્ષિત ઓવરરાઇડ રદબાતલ ટેબ્યુલેટ () {// સ્ટોર-વિશિષ્ટ રીતે ટેબ્યુલેટ ડેટા//.