PDA

View Full Version : برنامه نویسی اصولی



rezaee2
دوشنبه 02 دی 1392, 11:03 صبح
سلام و خسته نباشید
یه سوال کلی دارم

سوال: برنامه نویسی اصولی در سی شارپ رو چطور تعریف میکنید؟

توضیح منظور از سوال:
مثلا برنامه نویسی اصولی حتما باید شی گرا باشه و اینکه از معماری مدل ویو کنترل استفاده بشه؟
آیا باید قابلیت برنامه نویسی تیمی داشته باشه؟
آیا باید از تکنولوژی های مشترک استفاده بشه؟ مثلا لینکیو که یک راه ارتباطی مشترک برای دسترسی به انواع مختلف منابع ایجاد میکنه؟


لطفا روش مورد نظر رو نام ببرید و درصورت امکان خلاصه توضیح بدید.

متشکر

mthreat.info
دوشنبه 02 دی 1392, 11:11 صبح
سلام و خسته نباشید
یه سوال کلی دارم

سوال: برنامه نویسی اصولی در سی شارپ رو چطور تعریف میکنید؟

توضیح منظور از سوال:
مثلا برنامه نویسی اصولی حتما باید شی گرا باشه و اینکه از معماری مدل ویو کنترل استفاده بشه؟
آیا باید قابلیت برنامه نویسی تیمی داشته باشه؟
آیا باید از تکنولوژی های مشترک استفاده بشه؟ مثلا لینکیو که یک راه ارتباطی مشترک برای دسترسی به انواع مختلف منابع ایجاد میکنه؟


لطفا روش مورد نظر رو نام ببرید و درصورت امکان خلاصه توضیح بدید.

متشکر

شی گرا باشه و اینکه داکیومنت هم باید داشته باشه

esafb52
دوشنبه 02 دی 1392, 12:07 عصر
شما مگه اصلا میتونین تو سی شارپ غیر شی گرا کد بزنید؟؟؟!!!!!!یه مثال بزنین

rezaee2
دوشنبه 02 دی 1392, 12:09 عصر
شما مگه اصلا میتونین تو سی شارپ غیر شی گرا کد بزنید؟؟؟!!!!!!یه مثال بزنین
شما توی درک مطلب مشکل دارید

mthreat.info
دوشنبه 02 دی 1392, 16:15 عصر
شما مگه اصلا میتونین تو سی شارپ غیر شی گرا کد بزنید؟؟؟!!!!!!یه مثال بزنین
نگاه کنید این یک نمونه ی شی گراست
http://barnamenevis.org/showthread.php?432170-%D9%BE%DB%8C%D8%AF%D8%A7-%DA%A9%D8%B1%D8%AF%D9%86-tag-%DB%8C%DA%A9-label-%D8%A7%D8%B2-%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF-%D9%86%D8%A7%D9%85%D8%B4%D8%AE%D8%B5%DB%8C-%D8%A7%D8%B2-label
حالا فرض کن برای نوشتن یک ماشین حساب بخوای به باتن اعداد دونه به دونه فرمان بدی :D که منطقی نیت ولی میشه

esafb52
دوشنبه 02 دی 1392, 20:01 عصر
دوست عزیز مغلطه نکنین یا شما نمی دونی شی چیه یا .... آیا شما در اون حالت دوم میتونی خارج از کلاس و استفاده از اشیا کد بزنی؟؟؟اگه میتونی 2 خط کد بذارین که بدون استفاده از شی و کلاس باشه!!ما حین کار با زبان کاملا شی گرا سی شارپ سعی میکنیم تا کدمون رو جوری بنویسم که قابلیت استفاده مجدد داشته باشه !پس میایم متد و کلاس و.. ایجاد میکنیم تا درون برنامه مجدد استفاده بشن البته اگر نیاز شد!!
موفق باشین

vb8334
دوشنبه 02 دی 1392, 20:25 عصر
صحبت های جناب esafb52 تآیید میشه بعلاوه اینکه مثلآ در صورتی که شما برای کارهای تجاری برنامه مینویسید مثل کارهای حسابداری و... باید از تکنیک layering استفاده کنی(3 لایه)

اما مثلآ برای نوشتن درایور یا کارهای سیستمی نمیتونی از تکنیک سه لایه استفاده کنی و اونم تکنیک layering خاص خودش رو داره

mthreat.info
دوشنبه 02 دی 1392, 20:31 عصر
من که حرفی نزدم منو این طوری ... :D من منظورم این بود میشه تو باتن هر دکمه ی اعداد کد های جدا نوشت یا یه کد زد واسه ی یک دکمه و اونت همه رو به اون دکمه وصل کنیم که این میشه شی گرایی ولی کد برای هر دکمه میشه غیر شی گرایی

winner1
دوشنبه 02 دی 1392, 21:41 عصر
دوست من شما مفهوم شی گراییرو اگه بدونین میفهمین برنامه نویسی اصولی چیه
بذارین اینطوری بهتون بگم بهتره به هر برنامرو به عنوان یه ماشین یا دستگاه در نظر بگیر که این دستگاه
از همکاری چند دستگاه دیگه به وجود میاد هر بخشی کار خودشو انجام میده ولی در نهایت یه هدف و دنبال می کنن برای مثال سیستم برق خودرو کار خودشو انجام میده سیستم احتراق کار خودشو ولی در نهایت هدف اینه که اتومبیل کار کنه

rezaee2
دوشنبه 02 دی 1392, 21:50 عصر
پس به نظر شما اگه بخواییم که یه برنامه نویس اصولی کار میکنه کفایت میکنه که بگیم شئ گرا کد مینویسه و برای یه برنامه نویسی اصولی شی گرا بودن کافیه.
درست متوجه نظر جمع شدم؟

winner1
دوشنبه 02 دی 1392, 21:56 عصر
پس به نظر شما اگه بخواییم که یه برنامه نویس اصولی کار میکنه کفایت میکنه که بگیم شئ گرا کد مینویسه و برای یه برنامه نویسی اصولی شی گرا بودن کافیه.
درست متوجه نظر جمع شدم؟
اگه واقعا شی گرا کار کنین اره
یه اشتباهی که ما میکنیم اینه که فک میکنیم شی گرایی یعنی اینکه کلاس نویسی
نه مهمترین مفهوم تو شی گرایی تقسیم درست وظایف مشخص کردن هدفها پیاده سازی ساده
فک کن داری داری یه جسم فیزیکی تولید میکنی

winner1
دوشنبه 02 دی 1392, 22:36 عصر
من که حرفی نزدم منو این طوری ... :D من منظورم این بود میشه تو باتن هر دکمه ی اعداد کد های جدا نوشت یا یه کد زد واسه ی یک دکمه و اونت همه رو به اون دکمه وصل کنیم که این میشه شی گرایی ولی کد برای هر دکمه میشه غیر شی گرایی

حرفت خیلی خنده داره یکم مطالعه کن مخصوصن در مورد عامل ها

sagggad
دوشنبه 02 دی 1392, 22:43 عصر
حرفت خیلی خنده داره یکم مطالعه کن مخصوصن در مورد عامل ها

دوست من به نظر دیگران بی احترامی نکن!و اما راجع به سوال دوست عزیزمونrezaee2 باید بگم برنامه نویسی زبان هایی مانند VB و #C بر پایه ی شی گرایی هستن و در اصل بر این مبنا عمل میکنن.اما از چیزهای فرعی هم میشه استفاده کرد.
موفق باشید

mthreat.info
دوشنبه 02 دی 1392, 22:44 عصر
دوست من شما مفهوم شی گراییرو اگه بدونین میفهمین برنامه نویسی اصولی چیه
بذارین اینطوری بهتون بگم بهتره به هر برنامرو به عنوان یه ماشین یا دستگاه در نظر بگیر که این دستگاه
از همکاری چند دستگاه دیگه به وجود میاد هر بخشی کار خودشو انجام میده ولی در نهایت یه هدف و دنبال می کنن برای مثال سیستم برق خودرو کار خودشو انجام میده سیستم احتراق کار خودشو ولی در نهایت هدف اینه که اتومبیل کار کنه
ذهنیتم ریخت بهم :قهقهه: کلی سر این موضوع به بقیه گیر دادم :D ، الان اینی که من میگفتم چی بود؟ (کاملا جدی گفتم) اسم روش و ... میخوام :D یعنی من که C#‎ کار میکنم یعنی شی گرام یا نه ؟

winner1
دوشنبه 02 دی 1392, 22:47 عصر
دوست من به نظر دیگران بی احترامی نکن!و اما راجع به سوال دوست عزیزمونrezaee2 باید بگم برنامه نویسی زبان هایی مانند VB و #C بر پایه ی شی گرایی هستن و در اصل بر این مبنا عمل میکنن.اما از چیزهای فرعی هم میشه استفاده کرد.
موفق باشید
دوست من من به نظر کسی بی احترامی نکردم من هر طور که دلم بخواد حرف میزنم قرار نیست که همه اتو کشیده حرف بزنن

rezaee2
دوشنبه 02 دی 1392, 22:49 عصر
حرفت خیلی خنده داره یکم مطالعه کن مخصوصن در مورد عامل ها

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

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

تو جامعه علمی مخصوصا انجمن های اینترنتی ما با این مشکل مواجه هستیم که اشخاص چه با دانش کم یا زیاد به سادگی به خودشون اجازه اظهار نظر درباره شخصیت افراد و شخصیت فنی افراد میدن. اگه سوالی مطرح شده ما یا دربارش اطلاعی داریم یا نداریم.. بجای پرداختن به اون میاییم چیزای بی ربط میگیم: شما مگه اصلا میتونین تو سی شارپ غیر شی گرا کد بزنید؟؟؟!!!!!!یه مثال بزنین . خیلی بهتر میشد بجای این جواب گفت: چون ویژوال استدیو و زبان های توسعه داده شده توسط ماکروسافت هستن و همه چیز در قالب اشیا هست، در نتیجه هر کدی درش نوشته بشه شی گرا هست. البته من این حرف رو قبول ندارم و میدونم که منظور دوستمون هم این نبوده ولی بهتره که جوابی ندیم اگه میخوایم فقط یه چیزی بپرونیم. چیزی باید گفته بشه که ارزش شنیدن یا خوندن داشته باشه و ارزش اون از طریق توجه به هدف کسی که سوال رو مطرح کرده سنجیده میشه.

البته خواهشا وارد این حاشیه ها توی هیچ پستی نشید.. البته اگه جواب ندادن به این پست باعث نمیشه که شب خوابتون نبره و یا مشکلات دیگه ای براتون ایجاد نمیکنه.

لطفا از موضوع سوال خارج نشید!

خصوصیات کسی که اصولی برنامه نویسی میکنه.

sagggad
دوشنبه 02 دی 1392, 22:53 عصر
دوست من من به نظر کسی بی احترامی نکردم من هر طور که دلم بخواد حرف میزنم قرار نیست که همه اتو کشیده حرف بزنن

خوب دوست من،تو این سایت هر کس نمیتونه هرجور دلش بخواد حرف بزنه.ضمنا به دوستانی که تجربه ای در این زمینه ندارن توصیه میکنم نظر خاصی ندن که باعث گمراه شدن افراد نشه.البته اصلا منظور خاصی ندارم.لینک زیر هم یه تایپیک خوب هست برای آموزش شی گرایی:
http://barnamenevis.org/showthread.php?404437-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D9%85%D9%84-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&highlight=%D8%B4%DB%8C+%DA%AF%D8%B1%D8%A7%DB%8C%DB %8C
موفق باشید

mthreat.info
دوشنبه 02 دی 1392, 22:58 عصر
خوبی این تاپیک این بود که من مفهوم شی گرایی رو گرفتم تقریبا :D ، من از طرز صحبت ایشون اصلا ناراحت نشدم کلا هر چیزی که بهم آموزش بده رو قبول میکنم حالا میخواد با زور باشه یا ... ، از دوست خوبم هم ممنون که منو از اشتباه در آوردن
،الان که دارم میخونم به این مثال رسیدم که نوشته که منظورم تقریبا این بود
"Inheritance ارث بری

پدر و فرزندی را در نظر بگیرید . هر پدری مشخصات فردی به خصوصی دارد . فرزند وی می تواند همه خصوصیات او را به ارث برد و خصوصیتهای دیگری نیز داشته باشد که پدرش ندارد . این یعنی ارث بری !

در برنامه نویسی شی گرا از مفهوم ارث بری استفاده های زیادی می شود . قابلیت استفاده دوباره از کد (Reusability) یکی از مزیات اصلی ارث بری است."
تازه فهمیدم که من فکر میکردم شی گرایی فقط همین :D ولی عجب دنیایی بود نمی دونستما :D

rezaee2
دوشنبه 02 دی 1392, 22:58 عصر
اگه واقعا شی گرا کار کنین اره
یه اشتباهی که ما میکنیم اینه که فک میکنیم شی گرایی یعنی اینکه کلاس نویسی
نه مهمترین مفهوم تو شی گرایی تقسیم درست وظایف مشخص کردن هدفها پیاده سازی ساده
فک کن داری داری یه جسم فیزیکی تولید میکنی

لطف میکنید در ارتباط با این جمله بیشتر توضیح بدید. جمله تون گنگ هست:
مهمترین مفهوم تو شی گرایی تقسیم درست وظایف مشخص کردن هدفها پیاده سازی ساده
تشکر

abbas.oveissi
سه شنبه 03 دی 1392, 04:07 صبح
دیدم اینجا بحث داغه گفتم منم نظر بدم،بالاخره با بحث تخصصی دانش آدم زیاد میشه.شایدم منم اشتباه فکرمیکنم و بقیه منو از اشتباه در بیارن :لبخندساده:
در کل OOP یا همون برنامه نویسی شیء گرایی یه نوع فلسفه ی طراحی هست و وابسته به زبون خاصی نیست.ایده ی OPP اینه که همه چیو توی Object ها مختلف دسته بندی کنیم ( تقریبا مثل دنیای واقعی ) که مثلا نگهداری سیستم راحت تر بشه،بتونیم از کدها دوباره استفاده کنیم و جیزهای دیگه.
حالا خود OOP مفاهیم مختلفی داره مثل Class ها،Object ها،Properties،ارث بری،Overridding،Overloading،اینترفیس ها و .... که بعضی زبان ها همشو ساپورت میکنن و بعضی زبان ها بعضی قسمت هاشو ساپورت میکنن،منظورم اینه تفاوت هایی هست بین زبان ها مثل اینکه یه زبان ارث بری چندگانه داره اما یکی دیگه از این قابلیت پشتیبانی نمیکنه،البته این ها هم دلیل داره.
OOP حتی باعث شد DBMS ها هم سعی کنن از حالت relational (جدولی) بودن خارج بشن و تبدیل به object-relational database بشن.البته میشه هنوز از همون دیتابیس های جدولی استفاده کرد اما یه لایه به برنامه ی ما باید اضافه بشه که بتونه بین Object ها و جدول ها نگاشت برقرار کنه،اسمش هم ORM هست. [البته اجباری نیس حتما ORM باشه ]
حالا در مورد خود سی شارپ :لبخند:
از نظر من هم هر کدی توی سی شارپ نوشته بشه OOP هست ، چون کلا ما فرمی که میسازیم خودش یک کلاس هست که ارث بری میکنه،خصوصیت داره و چیزهای مختلف.یعنی بخوای نخوای کلا OOP هست حالا اگر کسی که داره کد مینویسه اصول OOP رو رعایت نمیکنه قضیه فرق داره اما شما توی پی اچ پی یه صفحه notepad باز میکنید و مینویسید
<?php
echo "Hello World";
?>
و میتونید کدتون رو اجرا کنید و نتیجه رو ببینید اما سی شارپ اینجوری نیست. ( البته باز باید بگم توی PHP هم میشه OOP نوشت )
دوباره از نظر من اصولی بودن برنامه نویسی ربطی به یک زبان خاص نداره.اگر چندتا مورد زیر رو رعایت کنیم (حالا یکی دوتا بیشتر یا کمتر ) میشه اصولی برنامه نویسی کرد :
1- اگر از OOP میخواید استفاده کنید باید اصولش رو رعایت کنید مثلا اینکه کلاس هاتون رو درست بگیرید. یا اینکه اگر آگاهانه معماری MVC رو انتخاب کردین،درست پیاده سازیش کنید.
2- استفاده از کنترل نسخه ها یا همون Source Control Version که میتونه Central باشه یا Distributed .این مورد خیلی به بدرد تیمی کار کردن میخوره،حتی اگر تنها هم خودتون فقط استفاده کنین خیلی خوبه.من خودم سعی میکنم عادت کنم به استفاده ازشون
3- از Unit testing استفاده کنیم.
4- قبل از شروع کد نویسی حداقل یه از پروژمون یه Class Diagram و UseCase Diagram داشته باشیم
5- خوانایی کد بالا باشه،کامنت گذاری شده باشه و از یه استانداری برای نام گذاری پیروی کرد
من اینا رو که الان به ذهنم رسید گفتم،در کل نظرم اینه که استفاده از Linq یا SqlServer تعیین نمیکنه برنامه نویسی ما اصولیه یا نه،اینا ابزارن.مهم اینه از ابزارها درست استفاده بشه.


پینوشت : اااا چقدر زیاد شد،تا جایی که شد کلی خلاصه کردمش!!این کادر پاسخ نوشتن کوچیک بود،نفهمیدم چقدر نوشتم !!!:متعجب::متعجب:

FastCode
سه شنبه 03 دی 1392, 05:16 صبح
C#‎ یک زبون شیئ گراست.ولی دلیل نمیشه که برنامه ای که باهاش نوشته میشه حتما شیئ گرا باشه.

بین دو کلمه 'با شیئ' و 'شیئ گرا' از زمین تا آسمون فاصلست.
شیئ گرا بودن به این گفته میشه که شما از مفاهیم شیئ گرایی مثل encapsulation, inheritance, mutability, garbage collection, ... درست استفاده کنی.
همه برنامه های داتنت اینها رو دارند.ولی دلیل نمیشه ازشون درست استفاده شده باشه.من با mthreat.info موافقم
خود شما فکر میکنید چند درصد برنامه نویسها همه این موارد رو درک میکنند؟

sagggad
سه شنبه 03 دی 1392, 07:21 صبح
C#‎ یک زبون شیئ گراست.ولی دلیل نمیشه که برنامه ای که باهاش نوشته میشه حتما شیئ گرا باشه.

بین دو کلمه 'با شیئ' و 'شیئ گرا' از زمین تا آسمون فاصلست.
شیئ گرا بودن به این گفته میشه که شما از مفاهیم شیئ گرایی مثل encapsulation, inheritance, mutability, garbage collection, ... درست استفاده کنی.
همه برنامه های داتنت اینها رو دارند.ولی دلیل نمیشه ازشون درست استفاده شده باشه.من با mthreat.info موافقم
خود شما فکر میکنید چند درصد برنامه نویسها همه این موارد رو درک میکنند؟

نظر من هم همینه.اما الان بحث سر اینه که برنامه نویسی اصولی به کدوم یک از این حالات گفته میشه؟؟که به نظر من این موضوع در زبان های #VB & C مطمئنا شی گرایی هست.چون این زبان ها بر این مبنا پایه ریزی شده ان!

esafb52
سه شنبه 03 دی 1392, 09:40 صبح
با سلام و تشکر از همه دوستان تشکر میکنم بابت اظهار نظر دوستان
با نظر جناب فست کد و بعضی از دوستان موافقم ولیکن ما در سی شارپ محکوم به استفاده از اشیا هستیم ولی بین استفاده از اشیا و پیاده سازی شی گرایی برنامه پر واضحه که تفاوت وجود دارد و شما خودتون میتونیین با ابزارهایی مثل کدمتریک میزان شی گرایی برنامه تون رو بسنجین مثلا ممکنه شما یک متد ایجاد کنین و مثلا یک شی از کلاس اس کیول کامند رو به عنوان ورودی دریافت کنین و دستورات اازم رو اجرا کنین یا در یک برنامه متوسط صد شی از این کلاس نیو کنین و ......
موفق باشین

rezaee2
چهارشنبه 04 دی 1392, 20:29 عصر
تشکر از همه دوستان از شرکت توی بحث... :بوس:
از نظر جدید هم استقبال میشه..

hmbarnamenevis
جمعه 06 دی 1392, 08:48 صبح
با احترام به تمام نظرات دوستان ، به نظر من برنامه اصولی باید اینطور باشد:
ما کاری به شی گرا بودن یا نبودن برنامه نداریم هر چند که در اصولی بودن برنامه خیلی کمک می کنند.
ممکن است شما با زبان C که غیر شئ گرایی است برنامه بنویسید مثل ویندوز و برنامه شما اصولی باشد و باز ممکن است با C#‎ برنامه بنویسید ولی اصولی نباشد؛ برای شما با مثال ثابت می کنم:

مثال 1: مثلا شما در سی شارپ بیایید پایگاه داده خود را جوری طراحی کنید که مثلا با حذف یک مشتری کالاهای خرید شده توسط مشتری به صورت اتوماتیک ، خذف نشود و بیایید در سی شارپ کد بنویسید که هر رکوردی که در جدول خرید با کد این مشتری است را حذف کند. خوب این یک روش غیر اصولی است.

مثال 2: یا مثلا بعضی ها را دیدم که در برنامه برای رفرش کردن مثلا دیتا گرید برای اینکه اطلاعاتشان همیشه به روز باشد از تایمر استفاده می کنند. که خیلی خنده دار است و شاید شما از این مطلب تعجب کنید ولی من دیدم.

مثال 3: مثلا طرف برنامه ای دارد که گرفتن یکسری اطلاعات از 5 تا 20 متغیر است مثلا یکبار باید 5 نام بگیرد ؛ در شرایط دیگر باید 12 یا در نهایت 20 نام بگیرد. خوب برنامه نویس آماتور 20 تا TextBox در فرم می گذارد و بعد اگر قرار بود 5 نام بگیرد بقیه ی TextBox ها را با خاصیت Visible مخفی می کند. حالا به نظر شما این برنامه اصولی است؟؟ در حالی که می توانست با ساخت یک نمونه در زمان اجرا مشکل را حل کند و اینقدر برنامه را سنگین نکند.

به نظر من منظور دوستمان باید از نشر اصولی بودن یا نبودن این باشد و فرقی ندارد که با کدام زبان کد می نویسید.