Modern C++ Design
நவீன சி + + டிசைன்ஃ ஜெனரிக் புரோகிராமிங் அண்ட் டிசைன் பேட்டர்ன்ஸ் அப்ளைடு என்பது ஆண்ட்ரி அலெக்ஸாண்ட்ரெஸ்கு எழுதிய ஒரு புத்தகமாகும், இது 2001 இல் அடிசன்-வெஸ்லியால் வெளியிடப்பட்டது. இது ஸ்காட் மேயர்ஸால் "மிக முக்கியமான சி + + புத்தகங்களில் ஒன்றாக" கருதப்படுகிறது. இந்த புத்தகம் டெம்ப்ளேட் மெட்டாப்ரோகிராமிங் எனப்படும் சி + + நிரலாக்க நுட்பத்தைப் பயன்படுத்துகிறது மற்றும் ஆராய்கிறது. அலெக்ஸாண்ட்ரெஸ்கு இந்த நுட்பத்தை கண்டுபிடிக்கவில்லை என்றாலும், அவர் அதை புரோகிராமர்கள் மத்தியில் பிரபலப்படுத்தியுள்ளார். சி + + புரோகிராமர்கள் எதிர்கொள்ளக்கூடிய நடைமுறை சிக்கல்களுக்கான தீர்வுகள் அவரது புத்தகத்தில் உள்ளன. புத்தகத்திலிருந்து பல சொற்றொடர்கள் இப்போது சி + + சமூகத்திற்குள் பொதுவான சொற்களாக பயன்படுத்தப்படுகின்றனஃ நவீன சி + + (சி/சி + + பாணிக்கு மாறாக), கொள்கை அடிப்படையிலான வடிவமைப்பு மற்றும் தட்டச்சு பட்டியல். புத்தகத்தில் விவரிக்கப்பட்டுள்ள அனைத்து குறியீடுகளும் அவரது நூலகமான லோகியில் இலவசமாகக் கிடைக்கின்றன. இந்த புத்தகம் 2001 முதல் பல மொழிகளில் மறுபிரசுரம் செய்யப்பட்டு மொழிபெயர்க்கப்பட்டுள்ளது. கொள்கை அடிப்படையிலான வடிவமைப்பு கொள்கை அடிப்படையிலான வடிவமைப்பு, கொள்கை அடிப்படையிலான வகுப்பு வடிவமைப்பு அல்லது கொள்கை அடிப்படையிலான நிரலாக்கம் என்றும் அழைக்கப்படுகிறது, இது நவீன சி + + வடிவமைப்பில் சி + + க்கான ஒரு முத்திரையை அடிப்படையாகக் கொண்ட வடிவமைப்பு அணுகுமுறையைப் பயன்படுத்துகிறது. இது மூலோபாய வடிவத்தின் தொகுப்பு-நேர மாறுபாடு என்று விவரிக்கப்பட்டுள்ளது, மேலும் சி + + டெம்ப்ளேட் மெட்டாப்ரோகிராமிங்குடன் தொடர்புகளைக் கொண்டுள்ளது. இது முதன்முதலில் சி + + இல் ஆண்ட்ரே அலெக்ஸாண்ட்ரெஸ்குவால் நவீன சி + + டிசைன் மற்றும் சி/சி + + பயனர்கள் இதழில் ஜெனரிக் <புரோகிராமிங்> என்ற நெடுவரிசையுடன் பிரபலப்படுத்தப்பட்டது, மேலும் இது தற்போது சி + + மற்றும் டி உடன் நெருக்கமாக தொடர்புடையது, ஏனெனில் இதற்கு வார்ப்புருக்களுக்கு மிகவும் வலுவான ஆதரவுடன் ஒரு தொகுப்பாளர் தேவைப்படுகிறது, இது சுமார் 2003 க்கு முன்பு பொதுவானதாக இல்லை. அளவீடு செய்யப்பட்ட பொதுவான குறியீட்டை அடிப்படையாகக் கொண்ட இந்த வடிவமைப்பு அணுகுமுறையின் முந்தைய எடுத்துக்காட்டுகளில், எம்எல் மொழிகளின் அளவுரு தொகுதிகள் (செயல்பாடுகள்) மற்றும் நினைவக மேலாண்மைக் கொள்கைக்கு சி + + ஒதுக்கீட்டாளர்கள் அடங்கும். கொள்கை அடிப்படையிலான வடிவமைப்பில் மைய முத்திரை ஒரு வகுப்பு வார்ப்புரு (புரவலன் வகுப்பு என்று அழைக்கப்படுகிறது), பல வகை அளவுருக்களை உள்ளீடாக எடுத்துக்கொள்கிறது, அவை பயனரால் தேர்ந்தெடுக்கப்பட்ட வகைகளுடன் (கொள்கை வகுப்புகள் என்று அழைக்கப்படுகின்றன) உடனடியாக இணைக்கப்படுகின்றன, ஒவ்வொன்றும் ஒரு குறிப்பிட்ட மறைமுக இடைமுகத்தை செயல்படுத்துகின்றன (கொள்கை என்று அழைக்கப்படுகின்றன), மற்றும் உடனடி புரவலன் வகுப்பின் நடத்தையின் சில ஆர்த்தோகனல் (அல்லது பெரும்பாலும் ஆர்த்தோகனல்) அம்சத்தை இணைக்கின்றன. ஒவ்வொரு பாலிசிக்கும் வெவ்வேறு, பதிவு செய்யப்பட்ட செயல்படுத்தல்களின் தொகுப்புடன் ஒரு ஹோஸ்ட் வகுப்பை வழங்குவதன் மூலம், ஒரு நூலகம் அல்லது தொகுதி வெவ்வேறு நடத்தை சேர்க்கைகளின் அதிவேக எண்ணிக்கையை ஆதரிக்க முடியும், தொகுப்பு நேரத்தில் தீர்க்கப்படுகிறது, மேலும் ஹோஸ்ட் வகுப்பு வார்ப்புருவின் உடனடி செயல்பாட்டில் வெவ்வேறு வழங்கப்பட்ட பாலிசி வகுப்புகளை கலந்து பொருத்துவதன் மூலம் தேர்ந்தெடுக்கப்படுகிறது. கூடுதலாக, கொடுக்கப்பட்ட கொள்கையின் தனிப்பயன் அமலாக்கத்தை எழுதுவதன் மூலம், நூலக செயல்படுத்துபவரால் எதிர்பாராத நடத்தைகள் தேவைப்படும் சூழ்நிலைகளில் கொள்கை அடிப்படையிலான நூலகத்தைப் பயன்படுத்தலாம். ஒவ்வொரு கொள்கையின் ஒன்றுக்கு மேற்பட்ட அமலாக்கம் ஒருபோதும் பயன்படுத்தப்படாத சந்தர்ப்பங்களில் கூட, ஒரு வகுப்பை கொள்கைகளாக சிதைப்பது வடிவமைப்பு செயல்முறைக்கு உதவும், மாடுலாரிட்டியை அதிகரிப்பதன் மூலமும், ஆர்த்தோகனல் வடிவமைப்பு முடிவுகள் எங்கு எடுக்கப்பட்டுள்ளன என்பதை சரியாக முன்னிலைப்படுத்துவதன் மூலமும். மாற்றத்தக்க தொகுதிகளிலிருந்து மென்பொருள் கூறுகளைச் சேர்ப்பது ஒரு புதிய கருத்திலிருந்து வெகு தொலைவில் இருக்கும்போது, கொள்கை அடிப்படையிலான வடிவமைப்பு ஒரு தனிப்பட்ட வகுப்பின் நடத்தையை வரையறுக்கும் (ஒப்பீட்டளவில் குறைந்த) மட்டத்தில் அந்த கருத்தைப் பயன்படுத்தும் விதத்தில் ஒரு புதுமையைக் குறிக்கிறது. பாலிசி வகுப்புகள் கால்பேக்குகளுடன் சில ஒற்றுமைகளைக் கொண்டுள்ளன, ஆனால் அதில் வேறுபடுகின்றன, ஒரு செயல்பாட்டைக் கொண்டிருப்பதை விட, ஒரு பாலிசி வகுப்பில் பொதுவாக பல தொடர்புடைய செயல்பாடுகள் (முறைகள்) இருக்கும், அவை பெரும்பாலும் மாநில மாறிகள் அல்லது உள்ளமைக்கப்பட்ட வகைகள் போன்ற பிற வசதிகளுடன் இணைக்கப்படும். ஒரு கொள்கை அடிப்படையிலான புரவலன் வகுப்பை ஒரு வகை மெட்டாஃபங்ஷன் என்று கருதலாம், இது வகைகளால் குறிப்பிடப்படும் நடத்தைகளின் தொகுப்பை உள்ளீடாக எடுத்துக்கொள்கிறது, மேலும் வெளியீடாக திரும்புவது அந்த நடத்தைகளை ஒருங்கிணைப்பதன் விளைவாக ஒரு செயல்பாட்டு ஒட்டுமொத்தமாக குறிக்கிறது. (எவ்வாறாயினும், எம். பி. எல் மெட்டாஃபங்க்ஷன்களைப் போலல்லாமல், வெளியீடு பொதுவாக ஒரு உள்ளமைக்கப்பட்ட வெளியீட்டு வகையைக் காட்டிலும் உடனடி ஹோஸ்ட் வகுப்பால் குறிக்கப்படுகிறது.) பாலிசி முத்திரையின் ஒரு முக்கிய அம்சம் என்னவென்றால், வழக்கமாக (இது கண்டிப்பாக தேவையில்லை என்றாலும்), புரவலன் வகுப்பு (பொது) பல பரம்பரை முறைகளைப் பயன்படுத்தி அதன் ஒவ்வொரு பாலிசி வகுப்பிலிருந்தும் (தன்னை ஒரு குழந்தை வகுப்பாக மாற்றிக்கொள்ளும்) பெறப்படும். (ஒவ்வொரு பாலிசி கிளாஸ் வகையிலும் ஒரு உறுப்பினர் மாறுபாட்டை மட்டுமே ஹோஸ்ட் கிளாஸ் கொண்டிருக்க வேண்டும், அல்லது பாலிசி கிளாஸை தனிப்பட்ட முறையில் வாரிசாகப் பெற வேண்டும்; இருப்பினும் பாலிசி கிளாஸை பகிரங்கமாக வாரிசாகப் பெறுவது ஒரு பாலிசி கிளாஸ் புதிய முறைகளைச் சேர்க்க முடியும் என்பதற்கான முக்கிய நன்மையைக் கொண்டுள்ளது, இது உடனடி ஹோஸ்ட் கிளாஸால் மரபுரிமையாக பெறப்பட்டு அதன் பயனர்களுக்கு அணுகக்கூடியது, இது ஹோஸ்ட் கிளாஸுக்கு கூட தெரியாது.) கொள்கை முத்திரையின் இந்த அம்சத்தின் குறிப்பிடத்தக்க அம்சம் என்னவென்றால், பொருள் சார்ந்த நிரலாக்கத்துடன் ஒப்பிடுகையில், கொள்கைகள் அடிப்படை வகுப்புக்கும் பெறப்பட்ட வகுப்புக்கும் இடையிலான உறவை தலைகீழாக மாற்றுகின்றன-அதேசமயம் ஓஓபி இடைமுகங்களில் பாரம்பரியமாக (சுருக்கமான) அடிப்படை வகுப்புகள் மற்றும் இடைமுகங்களை செயல்படுத்துவதன் மூலம் குறிப்பிடப்படுகின்றன பெறப்பட்ட வகுப்புகள், கொள்கை அடிப்படையிலான வடிவமைப்பில் பெறப்பட்ட (ஹோஸ்ட்) வகுப்பு இடைமுகங்களைக் குறிக்கிறது மற்றும் அடிப்படை (கொள்கை) வகுப்புகள் அவற்றை செயல்படுத்துகின்றன. கொள்கைகளைப் பொறுத்தவரை, பொது பரம்பரை என்பது புரவலன் மற்றும் கொள்கை வகுப்பினருக்கு இடையிலான ஒரு உறவைக் குறிக்காது. இது பாரம்பரியமாக ஓஓபி சூழல்களில் வடிவமைப்பு குறைபாட்டின் சான்றாக கருதப்பட்டாலும், இது கொள்கை முட்டாள்தனத்தின் சூழலில் பொருந்தாது. கொள்கைகளின் தற்போதைய அவதாரத்தில் உள்ள ஒரு குறைபாடு என்னவென்றால், கொள்கை இடைமுகம் குறியீட்டில் நேரடி, வெளிப்படையான பிரதிநிதித்துவத்தைக் கொண்டிருக்கவில்லை, மாறாக டக் தட்டச்சு மூலம் மறைமுகமாக வரையறுக்கப்படுகிறது, மேலும் கருத்துகளில் தனித்தனியாகவும் கைமுறையாகவும் ஆவணப்படுத்தப்பட வேண்டும். நிலையான அமலாக்கம் மற்றும் இடைமுகம், கொள்கை அடிப்படையிலான வகுப்பு மற்றும் வெவ்வேறு கொள்கைகள் என வகையைப் பிரிக்க பொதுவான-மாறுபாடு பகுப்பாய்வைப் பயன்படுத்துவதே முக்கிய யோசனை. முக்கிய வகுப்பிற்குள் என்ன செல்கிறது, என்ன கொள்கைகளை ஒருவர் உருவாக்க வேண்டும் என்பதை அறிவதே தந்திரம். மேலே குறிப்பிடப்பட்ட கட்டுரை பின்வரும் பதிலை அளிக்கிறதுஃ சாத்தியமான வரையறுக்கப்பட்ட வடிவமைப்பு முடிவை நாம் எடுக்க வேண்டிய இடங்களில், அந்த முடிவை ஒத்திவைக்க வேண்டும், அதை பொருத்தமான பெயரிடப்பட்ட கொள்கைக்கு ஒப்படைக்க வேண்டும். கொள்கை வகுப்புகள் செயல்படுத்தல், வகை வரையறைகள் மற்றும் பலவற்றைக் கொண்டிருக்கலாம். அடிப்படையில், முக்கிய வார்ப்புரு வகுப்பின் வடிவமைப்பாளர் கொள்கை வகுப்புகள் என்ன வழங்க வேண்டும், என்ன தனிப்பயனாக்குதல் புள்ளிகளை அவர்கள் செயல்படுத்த வேண்டும் என்பதை வரையறுப்பார். ஒரு நல்ல கொள்கைகளின் தொகுப்பை உருவாக்குவது ஒரு நுட்பமான பணியாக இருக்கலாம், சரியான எண் (எ. கா., குறைந்தபட்ச தேவை). ஒன்றாக இருக்கும் வெவ்வேறு தனிப்பயனாக்குதல் புள்ளிகள், சேமிப்புக் கொள்கை, சரிபார்ப்பு கொள்கை மற்றும் பல போன்ற ஒரு கொள்கை வாதத்திற்குள் செல்ல வேண்டும். கிராஃபிக் டிசைனர்கள் தங்கள் கொள்கைகளுக்கு ஒரு பெயரைக் கொடுக்க முடியும், அவை கருத்துகளைப் பிரதிநிதித்துவப்படுத்துகின்றன, செயல்பாடுகள் அல்லது சிறிய செயல்படுத்தல் விவரங்களைக் குறிக்கும் அல்ல. கொள்கை அடிப்படையிலான வடிவமைப்பு பிற பயனுள்ள நுட்பங்களை இணைக்கலாம். எடுத்துக்காட்டாக, டெம்ப்ளேட் முறை வடிவத்தை தொகுப்பு நேரத்திற்கு மறுபரிசீலனை செய்யலாம், இதனால் ஒரு முக்கிய வகுப்பில் ஒரு எலும்புக்கூடு வழிமுறை உள்ளது, இது தனிப்பயனாக்கம் சில கொள்கைகளின் பொருத்தமான செயல்பாடுகளை சுட்டிக்காட்டுகிறது. சி + + இன் எதிர்கால பதிப்புகளில் உள்ள கருத்துக்கள் மூலம் இது மாறும் வகையில் அடையப்படும். கீழே வழங்கப்பட்ட எளிய எடுத்துக்காட்டு ஒரு சி + + ஹலோ உலக நிரலின் எளிய (திட்டமிடப்பட்ட) எடுத்துக்காட்டு, அங்கு அச்சிடப்பட வேண்டிய உரை மற்றும் அதை அச்சிடும் முறை கொள்கைகளைப் பயன்படுத்தி சிதைக்கப்படுகின்றன. இந்த எடுத்துக்காட்டில், ஹலோ வேர்ல்ட் என்பது ஒரு புரவலன் வகுப்பாகும், அங்கு இரண்டு கொள்கைகளை எடுக்கிறது, ஒன்று ஒரு செய்தியை எவ்வாறு காட்ட வேண்டும் என்பதைக் குறிப்பிடுவதற்கும் மற்றொன்று உண்மையான செய்தியை அச்சிடுவதற்கும். பொதுவான செயல்படுத்தல் ரன்னில் உள்ளது, எனவே இரண்டு கொள்கைகளும் (அச்சு மற்றும் செய்தி) வழங்கப்படாவிட்டால் குறியீட்டை தொகுக்க முடியாது என்பதை நினைவில் கொள்க. #include <ஐயோஸ்ட்ரீம்> #include <ஸ்ட்ரிங்> டெம்ப்ளேட் <தட்டச்சு பெயர் அவுட்புட் பாலிசி, தட்டச்சு பெயர் லாங்குவேஜ் பாலிசி> கிளாஸ் ஹலோ வேர்ல்ட்ஃ தனியார் அவுட்புட் பாலிசி, தனியார் மொழி கொள்கை {பொதுஃ// நடத்தை முறை. வெற்றிடமாக இயக்க () கான்ஸ்ட் {// இரண்டு கொள்கை முறைகள். பிரிண்ட் (மெசேஜ் ());} பிரைவேட்ஃ யூசிங் லாங்குவேஜ் பாலிசிஃஃ மெசேஜ்; யூசிங் அவுட்புட் பாலிசிஃஃ பிரிண்ட்;}; கிளாஸ் அவுட்புட் பாலிசி ரைட் டூ கவுட் {பாதுகாக்கப்பட்டஃ டெம்ப்ளேட் <டைப்பன்மே மெசேஜ் டைப்> வாய்ட் பிரிண்ட் (மெசேஜ் டைப் & & மெசேஜ்) கான்ஸ்ட் {எஸ்டிடிஃ: கவுட் <<மெசேஜ் <எஸ்டிடிஃஃ எண்டிஎல்;}; கிளாஸ் லாங்குவேஜ் பாலிசி இங்கிலிஷ் {பாதுகாக்கப்பட்டஃ எஸ்டிடிஃ: ஸ்ட்ரிங் மெசேஜ் () கான்ஸ்ட் {ரிட்டர்ன் "ஹலோ, வேர்ல்ட்! ";}}; வகுப்பு மொழி கொள்கை ஜெர்மன் {பாதுகாக்கப்பட்டஃ std:: சரம் செய்தி () கான்ஸ்ட் {திரும்பவும்" ஹலோ வெல்ட்! ";}}; இன்ட் மைன் () {// எடுத்துக்காட்டு 1 பயன்படுத்துவது ஹலோவேர்ல்ட்இங்கிளிஷ் = ஹலோவேர்ல்ட் <அவுட்புட் பாலிசி ரைட் டூ கவுட், லாங்குவேஜ் பாலிசிஇங்கிளிஷ்>; ஹலோவேர்ல்ட்இங்கிளிஷ் ஹலோ _ வேர்ல்ட்; hello_world.Run ();// பிரிண்ட்ஸ்" ஹலோ, வேர்ல்ட்! ". //எடுத்துக்காட்டு 2// அதையே செய்கிறது, ஆனால் மற்றொரு மொழிக் கொள்கையைப் பயன்படுத்துகிறது. பயன்படுத்துவது ஹலோ வேர்ல்ட் ஜெர்மன் = ஹலோ வேர்ல்ட் <அவுட்புட் பாலிசி ரைட் டூ கவுட், லாங்குவேஜ் பாலிசி ஜெர்மன்>; ஹலோ வேர்ல்ட் ஜெர்மன் ஹலோ _ வேர்ல்ட்2; hello_world2.Run ();// பிரிண்ட்ஸ் "ஹாலோ வெல்ட்!". வடிவமைப்பாளர்கள் உறுப்பினர் செயல்பாட்டுடன் புதிய வகுப்புகளைச் சேர்ப்பதன் மூலம் அதிக அவுட்புட் கொள்கைகளை எளிதாக எழுதலாம் மற்றும் அவற்றை புதிய அவுட்புட் கொள்கைகளாக எடுத்துக் கொள்ளலாம். லோகி நூலகம் என்பது ஆண்ட்ரே அலெக்ஸாண்ட்ரெஸ்கு தனது நவீன சி + + வடிவமைப்பு புத்தகத்தின் ஒரு பகுதியாக எழுதிய சி + + மென்பொருள் நூலகத்தின் பெயர். நூலகம் சி + + டெம்ப்ளேட் மெட்டாப்ரோகிராமிங்கை விரிவாகப் பயன்படுத்துகிறது மற்றும் பொதுவாகப் பயன்படுத்தப்படும் பல கருவிகளைப் பயன்படுத்துகிறதுஃ தட்டச்சு பட்டியல், ஃபங்க்டர், சிங்கிள்டன், ஸ்மார்ட் சுட்டிக்காட்டி, பொருள் தொழிற்சாலை, பார்வையாளர் மற்றும் பல முறைகள். முதலில் இந்த நூலகம் மிகவும் தரமான இரண்டு சி + + தொகுப்பாளர்களுடன் மட்டுமே இணக்கமாக இருந்தது (கோட் வாரியர் மற்றும் கோமோ சி/சி + +): பிற்கால முயற்சிகள் இதை பரந்த அளவிலான தொகுப்பாளர்களுடன் (பழைய விஷுவல் சி + + 6, போர்லேண்ட் சி + + பில்டர் 6, கிளாங் மற்றும் ஜி. சி. சி உட்பட) பயன்படுத்தக்கூடியதாக ஆக்கியுள்ளன. கம்பைலர் விற்பனையாளர்கள் லோகியை ஒரு பொருந்தக்கூடிய அளவுகோலாகப் பயன்படுத்தினர், இது இணக்கமான கம்பைலர்களின் எண்ணிக்கையை மேலும் அதிகரித்தது. பீட்டர் குமெல் மற்றும் ரிச்சர்ட் ஸ்போசாடோ தலைமையிலான திறந்த மூல சமூகத்தின் மூலம் லோகியின் பராமரிப்பு மற்றும் மேம்பாடு ஒரு சோர்ஸ்ஃபோர்ஜ் திட்டமாக தொடர்கிறது. பலரின் தொடர்ச்சியான பங்களிப்புகள் நூலகத்தின் ஒட்டுமொத்த வலிமை மற்றும் செயல்பாட்டை மேம்படுத்தியுள்ளன. ஏற்கனவே நிறைய புதிய கூறுகளைக் கொண்டிருப்பதால் லோகி இனி புத்தகத்துடன் பிணைக்கப்படவில்லை (எ. கா. ஸ்ட்ராங் பிடிஆர், பிரிண்ட்ஃப் மற்றும் ஸ்கோப்ப்கார்ட்). லோகி இதே போன்ற கருவிகள் மற்றும் செயல்பாட்டை ஊக்கப்படுத்தினார், இப்போது பூஸ்ட் நூலக சேகரிப்பிலும் உள்ளது. மேலும் காண்க பூஸ்ட் (சி + + நூலகங்கள்) மிக்சின் குறிப்புகள் வெளிப்புற இணைப்புகள் அலெக்ஸாண்ட்ரெஸ்குவின் வலைத்தளம் (புத்தக பிழையுடன்) ஸ்மார்ட் பாயிண்டர்ஸ் (புத்தகத்திலிருந்து மாதிரி அத்தியாயம்) புத்தக வெளியீட்டாளரிடமிருந்து அசல் மூலக் குறியீடு 2001 புனைகதை அல்லாத புத்தகங்கள் சி + + பற்றி புத்தகங்கள்