2008-11-19 24 views
8

कोई भी औपचारिक तरीके से रिफैक्टरिंग को परिभाषित करने का तरीका जानता है?क्या "रिफैक्टरिंग" के लिए कोई औपचारिक परिभाषा है?

अद्यतन।

एक रिफैक्टरिंग एक जोड़ी आर = (पूर्व; टी) है, जहां पूर्व पूर्व शर्त है कि कार्यक्रम को पूरा करना चाहिए है, और टी कार्यक्रम परिवर्तन है।

+0

फिर से खोल दी और upvoted - यह एक उत्कृष्ट सवाल –

+0

है क्या पृथ्वी पर आक्रामक के बारे में है इस? एक बहुत अच्छा सवाल है। – tvanfosson

+0

resonable परिवर्तनों में अपनी खुद की पूर्व शर्त शामिल हैं, इसलिए यह इस विशेषता में अनावश्यक प्रतीत होता है। –

उत्तर

-2

अच्छी तरह से नहीं, लेकिन पैसे के मामले में - मैं हाँ कह सकता हूं। मैं उस पर एक समीकरण के साथ नहीं आ सकता :)

अच्छी तरह लिखित, जटिलता से मुक्त (जो रिफैक्टरिंग के कारण हो सकता है) समय/प्रयास और इसलिए पैसे बचा सकता है।

3

यह एक दिलचस्प सवाल है और जिसे मैंने नहीं माना था। मैंने थोड़ा गुस्सा किया और एओपी में रिफैक्टरिंग पर इस paper (पीडीएफ) के साथ आया जो कि कुछ कार्यात्मक पहलुओं को पारंपरिक पहलुओं के रूप में समान लचीलापन के साथ-साथ कम जटिलता के साथ दिखाने के लिए कुछ गणितीय मॉडलिंग को लागू करने का प्रयास करता है। मैंने पूरे पेपर को नहीं पढ़ा, लेकिन आपको वहां कुछ मिल सकता है।

एक और दिलचस्प विचार संकलक अनुकूलन के समान ही रेफैक्टरिंग के बारे में सोचना होगा। अनिवार्य रूप से, कंपाइलर आपके कोड को फ्लाई पर रीफैक्टर करता है, हालांकि कोड-स्तरीय रिफैक्टरिंग से अलग-अलग लक्ष्यों के साथ। किसी भी तरह से एक विशेष रिफैक्टरिंग इसे प्रभावित करने के तरीके को प्रदर्शित करने के लिए आपको उचित तरीके से कोड जटिलता और पठनीयता को मापना होगा। मॉडल के साथ आना शायद मुश्किल हिस्सा होगा।

मुझे यह paper भी मिला जो ओओ प्रोग्रामिंग का बीजगणित स्थापित करता है और कुछ बुनियादी कानून प्राप्त करता है, फिर उन जटिल नियमों का उपयोग करता है ताकि अधिक जटिल रिफैक्टरिंग प्राप्त हो सके।

दिलचस्प सामान। उम्मीद है की यह मदद करेगा।

+0

उत्कृष्ट पाता है! –

2

रिफैक्टरिंग शुद्धता के संरक्षण परिवर्तनों की एक श्रृंखला है, लेकिन रिफैक्टरिंग मूल

से अधिक सामान्य कोड में हो सकता है तो हम सिर्फ दावा नहीं कर कार्यक्रम पी पर एक रिफैक्टरिंग परिवर्तन टी एक ही गुण है कि आर से पहले और पुनर्रचना के बाद, लेकिन गुण आर 'पुनर्संशोधित कार्यक्रम पी के' आर लिए कम से कम बराबर

given program P implies R 
refactoring transformation T(P) produces P' 
where (P' implies R') and (R' is equivalent to or subsumes R') 

हम भी जोर सकता है कि इनपुट और आउटपुट एक ही या समकक्ष रहने होना चाहिए

लेकिन आपके उदाहरण का पालन करने के लिए, शायद हम एक 4-ट्यूपल पी, आई, ओ, आर के रूप में एक रिफैक्टरिंग रूपांतरण टी को परिभाषित करना चाहते हैं जहां पी मूल कार्यक्रम है, मैं इनपुट और/या पूर्व शर्त है, ओ आउटपुट है और/या पोस्टकंडीशन, और आर परिवर्तित प्रोग्राम है, तो जोर दें (अस्थायी तर्क का उपयोग कर?) कि

P:I -> O 

परिवर्तन

T(P) -> R 

से पहले रखती परिवर्तन को परिभाषित करता है, और

R:I -> O 

परिवर्तन के बाद धारण

मेरी प्रतीकात्मक गणित जंग लगी है, लेकिन यह एक सामान्य दिशा

है

यह एक अच्छा मास्टर की थीसिस होगा

+0

नहीं। एक रिफैक्टरिंग चरण प्रोग्राम के अर्थशास्त्र को बदल सकता है। फ़ंक्शन कॉल से कोई तर्क छोड़ने पर विचार करें। –

+0

@ [ईरा बैक्सटर]: हाँ - मैं कार्यक्रम पी के इनपुट और आउटपुट का जिक्र कर रहा था, पी के भीतर एक व्यक्तिगत समारोह नहीं। बेशक आप प्रोग्राम में इनपुट छोड़ सकते हैं अगर इसका उपयोग नहीं किया गया था, लेकिन अगर यह नहीं था तब व्यावहारिक (औपचारिक के विपरीत) कार्यक्रम के अर्थशास्त्र का उपयोग नहीं किया जाता है ;-) –

2

यह ध्यान रखें कि refactorings के सबसे जोड़े में आते हैं दिलचस्प हो सकता है Btw,:

  • पैरामीटर जोड़ें - निकालें पैरामीटर
  • निकालें कक्षा/विधि - इनलाइन कक्षा/विधि
  • पुल अप फील्ड/विधि - नीचे खींचें फील्ड/विधि
  • यूनिडायरेक्शनल को बदलें द्वि-दिशा एसोसिएशन - बदलें यूनिडायरेक्शनल द्वि-दिशा
  • लिए एसोसिएशन
  • ...

जोड़ी के दो रिफैक्टरिंग को लागू करना एक शून्य परिवर्तन है।

एक रिफैक्टरिंग जोड़ी आर, आर के लिए ':

आर' (आर (कोड)) = कोड