PDA

View Full Version : فضای نام در برنامه نویسی C++



C3phalex1n_0x
جمعه 24 مرداد 1393, 22:03 عصر
سلام و خسته نباشید دوستان برنامه نویس.

همانطور که از موضوع تایپیک بنده مشخص هست، سوال من در مورد مبحث Namespaces در برنامه نویسی با C++ می باشد. به تازگی در پروسه یادگیری زبان C++ به این قسمت رسیدم که کمی درک عملکرد آن برای من گنگ بود. به هر حال، دوستان می خواستم بدونم دلیل استفاده از همچین مفهوم انتزاعی در برنامه نویسی با زبان سی چیست؟! یا به عبارت دیگر، کاربرد آن چیست؟! تا به حال از آن برای مبحثی بهره مند شدید؟! اگر بله، آن چه مبحثی بوده؟! خیلی دوست دارم بدونم چرا همچین چیزی در زبان برنامه نویسی C++ وجود دارد. (گویا در زبان های دیگر مانند C شارپ هم هست، البته در حالت کلی بنده C++ را مد نظر دارم، چونکه با دیگر زبان ها آشنایی دقیقی ندارم).

سپاس گزارم.

motherboard
جمعه 24 مرداد 1393, 22:28 عصر
سلام و خسته نباشید دوستان برنامه نویس.

همانطور که از موضوع تایپیک بنده مشخص هست، سوال من در مورد مبحث Namespaces در برنامه نویسی با C++‎ می باشد. به تازگی در پروسه یادگیری زبان C++‎ به این قسمت رسیدم که کمی درک عملکرد آن برای من گنگ بود. به هر حال، دوستان می خواستم بدونم دلیل استفاده از همچین مفهوم انتزاعی در برنامه نویسی با زبان سی چیست؟! یا به عبارت دیگر، کاربرد آن چیست؟! تا به حال از آن برای مبحثی بهره مند شدید؟! اگر بله، آن چه مبحثی بوده؟! خیلی دوست دارم بدونم چرا همچین چیزی در زبان برنامه نویسی C++‎ وجود دارد. (گویا در زبان های دیگر مانند C شارپ هم هست، البته در حالت کلی بنده C++‎ را مد نظر دارم، چونکه با دیگر زبان ها آشنایی دقیقی ندارم).

سپاس گزارم.
معلومه هنوز شی گرایی رو متوجه نشدی!!! معمولا تو کتاب ها مبحث فضای نام بعد از شی گرایی گفته می شود.در مورد فواید فضای نام این رو می تونم بگم که با استفاده از اون ها تمیز تر و مرتب تر میشه کد نویسی کرد.برای فهمیدن فضای نام برو اول شی گرایی رو کامل متوجه شو.

کامبیز اسدزاده
جمعه 24 مرداد 1393, 23:15 عصر
سلام و خسته نباشید دوستان برنامه نویس.

همانطور که از موضوع تایپیک بنده مشخص هست، سوال من در مورد مبحث Namespaces در برنامه نویسی با C++‎ می باشد. به تازگی در پروسه یادگیری زبان C++‎ به این قسمت رسیدم که کمی درک عملکرد آن برای من گنگ بود. به هر حال، دوستان می خواستم بدونم دلیل استفاده از همچین مفهوم انتزاعی در برنامه نویسی با زبان سی چیست؟! یا به عبارت دیگر، کاربرد آن چیست؟! تا به حال از آن برای مبحثی بهره مند شدید؟! اگر بله، آن چه مبحثی بوده؟! خیلی دوست دارم بدونم چرا همچین چیزی در زبان برنامه نویسی C++‎ وجود دارد. (گویا در زبان های دیگر مانند C شارپ هم هست، البته در حالت کلی بنده C++‎ را مد نظر دارم، چونکه با دیگر زبان ها آشنایی دقیقی ندارم).

سپاس گزارم.

سلام

فرض کنید میخواهید بیشتر از یک کلاس ایجاد کنید که نامشون مشابه هم هستش خب مسلما خطا رخ خواهد داد چرا چون دو کلاس بانام های مشابه در نظر گرفتیم برای رفع این مشکل از قابلیت namespace استفاده میکنیم که کلاس جدید رو با نام مشابه در namespace ایجاد میکنیم تا بتونیم از کلاس جدید که با نام مشابه موجود از قبل ایجاد شده قابل استفاده باشه.

وقتی من بیام از namespace استفاده کنم به راحتی میتونم هرچند تا کلاس رو با یکم نام همراه با زیرمجموعه هاش استفاده کنم مثلا std::string امکان این رو میده مستقیم string موجود در فضای نام std رو فراخوانی کنم.

C3phalex1n_0x
جمعه 24 مرداد 1393, 23:15 عصر
معلومه هنوز شی گرایی رو متوجه نشدی!!! معمولا تو کتاب ها مبحث فضای نام بعد از شی گرایی گفته می شود.در مورد فواید فضای نام این رو می تونم بگم که با استفاده از اون ها تمیز تر و مرتب تر میشه کد نویسی کرد.برای فهمیدن فضای نام برو اول شی گرایی رو کامل متوجه شو.

ممنونم که به سوال من پاسخ دادید. در مورد شی گرایی هم باید بگم که حرف شما درست هست! بنده هنوز مطالعه فلسفه شی گرایی و عمق استفاده آن را آغاز نکردم.
صرفا چون در حال نوشتن یک پروژه هستم بدون مطالعه عمیق به مطالعه سینتکس C++‎‎‎ پرداخته ام که با این مبحث رو به رو شدم و خواستم که کاربرد آن را متوجه شوم.
طبق توضیحاتی که در Tutorialspoint برای این مبحث اومده، پیرو حرف شما بود که صرفا Namespace ها باعث مرتب شدن کد ها می شوند و از Conflicit شدن کد ها جلوگیری به عمل می آورند. به هر حال، مرسی.


سلام

فرض کنید میخواهید بیشتر از یک کلاس ایجاد کنید که نامشون مشابه هم هستش خب مسلما خطا رخ خواهد داد چرا چون دو کلاس بانام های مشابه در نظر گرفتیم برای رفع این مشکل از قابلیت namespace استفاده میکنیم که کلاس جدید رو با نام مشابه در namespace ایجاد میکنیم تا بتونیم از کلاس جدید که با نام مشابه موجود از قبل ایجاد شده قابل استفاده باشه.

وقتی من بیام از namespace استفاده کنم به راحتی میتونم هرچند تا کلاس رو با یکم نام همراه با زیرمجموعه هاش استفاده کنم مثلا std::string امکان این رو میده مستقیم string موجود در فضای نام std رو فراخوانی کنم.

مرسی، توضیحات شما کامل بود.
تشکر

ciavosh
جمعه 31 مرداد 1393, 16:52 عصر
در واقع فضای اسمی هیچ ارتباطی با شی گرا بودن ندارد. مورد استفاده آن این است که کد نوشته شده توسط یک برنامه نویس به علت هم اسم بودن تعریفات با کدی که در یک مدول دیگر توسط برنامه نویسان دیگر نوشته نشده تداخل پیدا نکند.

همچنین جهت مجزا کردن و مدوله سازی منطقی ساختار کد به کار میره.

motherboard
جمعه 31 مرداد 1393, 20:48 عصر
در واقع فضای اسمی هیچ ارتباطی با شی گرا بودن ندارد. مورد استفاده آن این است که کد نوشته شده توسط یک برنامه نویس به علت هم اسم بودن تعریفات با کدی که در یک مدول دیگر توسط برنامه نویسان دیگر نوشته نشده تداخل پیدا نکند.
فضای نام و یا استراکچر و یا یونیون و یا شی گرایی و یا یک سری نوع های دیگر همشون از دم یک الماسن.البته که با همدیگر فرق هم دارند.ولی کلا از نظر گرامری و عملکرد شباهت های زیادی رو دارند.اینکه به استارتر گفتم در درجه اول شی گرایی رو مسلط شو دقیقا به خاطر شباهت هایی است که به همدیگر دارند.مثلا تو استراکچر هم شما میایید یک نوعی رو درست می کنید که توش یک سری عضو هستش.و بعدش از نوعتون یک اسمی رو انتخاب می کنید و بعد با میانجیگری یک دات(نقطه) مقدار دهی می کنید.همه ی این ها در شی گرایی هم وجود داره.البته شی گرایی ویژگی های مخصوص خودش رو هم داره. همین فضای نام هم وقتی داریم از اون استفاده می کنیم از گرامر هایی استفاده می کنیم که قبلا هم در استراکچر و شی گرایی استفاده کردیم.علت اینکه اون فرد متوجه فضای نام نمیشه به این دلیله که گرامر هایی که در بخش شی گرایی خونده هنوز براش جا نیفتاده.فضای نام هم هیچ چیز خاصی رو نداره.ولی استارتر چون هنوز تو باغ مباحث قبل از فضای نام نیست.فضای نام براش یک چیز نامفهومی تداعی میشه.