PDA

View Full Version : دليل استفاده از ليست ها در برنامه نويسي ؟



sky_in_iran
یک شنبه 08 فروردین 1389, 10:09 صبح
سلام بر اساتيد گرامي
سال نو بر شما مبارك

من جاهايه زيادي ديدم كه از ليست ها استفاده ميشه اما دليل منطقي استفاده از اين ابزار و تا به حال درك نكردم ميخواستم بدونم دليل استفاده از ليست ها چيه ؟
مثلا در يك برنامه يك ليست از نوع كلاسي تعريف ميكنن بعد اطلاعات و به ليست اضافه كرده و در بخش ديگه ثبت بانك مي كنند . خوب در اينجا استفاده از ليست كاره اضافه اي نيست ؟ ميشه يك كلاس كه پروپرتي داره مقدار دهي كرد به صورت پارامتريك به كلاس ديگه ارسال كرد و بعد ثبت بانك كرد !! چرا به ليست اضافه ميشه و بعد از ليست خونده ميشه و بعد ثبت بانك ميشه ؟؟؟؟؟
كاره ليست چيه تو اين مثال ؟ اضافه نيست ؟

keivan mousavi
یک شنبه 08 فروردین 1389, 13:37 عصر
لیست ها مربوط به مبحث Generic ها میباشد
برای اینکه مجموعه ها به یک ویژگی قدرتمند تبدیل شوند و همچنین کارائی و قابلیت استفاده از آنها افزایش پیدا کند Generic ها در زبان C#‎‎ با عرضه NET FrameWork2. معرفی شدند ایده مربوط به Generic ها چیز جدیدی نیست آنها به الگوی Templates زبان ++C بسیار شبیه می باشند شما همچنین Generic ها را در سایر زبانها نیز پیدا میکنید
Generic ها شما را قادر می سازند تا یک مجموعه عمومی را ایجاد نمایید که هنوز هم به صورت مستحکمی تعیین نوع شده اند که احتمال ایجاد خطاها را به حداقل می رساند (زیرا آنها در زمان طراحی رخ میدهند) کارایی رو افزایش میدهند و ویژگی IntelliSense را در هنگام کار با مجموعه ها در اختیارتان قرار میدهند
الگوریتم List به این صورت هستش که اطلاعات رو به صورت خطی و پشت سرهم میفرسته از آنجایی که در حدود 30 نوع Generic داریم بهتر هستش که به کتابهای مرجع مراجعه کنید

Amir Oveisi
یک شنبه 08 فروردین 1389, 14:39 عصر
من جاهايه زيادي ديدم كه از ليست ها استفاده ميشه اما دليل منطقي استفاده از اين ابزار و تا به حال درك نكردم ميخواستم بدونم دليل استفاده از ليست ها چيه ؟
مثلا در يك برنامه يك ليست از نوع كلاسي تعريف ميكنن بعد اطلاعات و به ليست اضافه كرده و در بخش ديگه ثبت بانك مي كنند . خوب در اينجا استفاده از ليست كاره اضافه اي نيست ؟ ميشه يك كلاس كه پروپرتي داره مقدار دهي كرد به صورت پارامتريك به كلاس ديگه ارسال كرد و بعد ثبت بانك كرد !! چرا به ليست اضافه ميشه و بعد از ليست خونده ميشه و بعد ثبت بانك ميشه ؟؟؟؟؟
كاره ليست چيه تو اين مثال ؟ اضافه نيست ؟

میشه یک نمونه قرار بدید؟ اینجوری بهتر میشه جواب داد.

sky_in_iran
یک شنبه 08 فروردین 1389, 21:48 عصر
با تشكر از اساتيد محترم
يك كد نمونه ميزارم از يه برنامه ساده كه يه جوري آموزش كار با ليسته اما تو همين كد كلي سوال هست مثلا تو كد اطلاعات به ليست اضافه ميشه و بعد تو grid ريخته ميشه خوب چرا مستقيم اين كار يعني اضافه كردن به grid نباشد ؟
استاد موسوي از توضيحاتتون خيلي ممنونم اما خوب من كاملا متوجه توضيحاتتون نشدم ميشه كمي روانتر توضيح بديد لطفا!!:خجالت:
چه كارايي بالا مي بره ؟

Vahid_moghaddam
یک شنبه 08 فروردین 1389, 22:43 عصر
http://www.15seconds.com/issue/031024.htm

http://msdn.microsoft.com/en-us/library/ms172192.aspx

و .....

Amir Oveisi
یک شنبه 08 فروردین 1389, 22:52 عصر
با تشكر از اساتيد محترم
يك كد نمونه ميزارم از يه برنامه ساده كه يه جوري آموزش كار با ليسته اما تو همين كد كلي سوال هست مثلا تو كد اطلاعات به ليست اضافه ميشه و بعد تو grid ريخته ميشه خوب چرا مستقيم اين كار يعني اضافه كردن به grid نباشد ؟
استاد موسوي از توضيحاتتون خيلي ممنونم اما خوب من كاملا متوجه توضيحاتتون نشدم ميشه كمي روانتر توضيح بديد لطفا!!:خجالت:
چه كارايي بالا مي بره ؟

سلام
تو این برنامه ای که گذاشتید سعی شده که با استفاده از یک کلاس به اسم Person یک لایه ایجاد بشه و دید object oriented بده برای کار با database و در حالت عادی نیازی به انجام چنین کاری نیست که تو این برنامه وجود داره.

موفق باشید

FastCode
یک شنبه 08 فروردین 1389, 23:57 عصر
سعی شده که با استفاده از یک کلاس به اسم Person
ولی نشده.

خیلی قشنگ گفتی.

sky_in_iran
دوشنبه 09 فروردین 1389, 08:18 صبح
سلام
در حالت عادی نیازی به انجام چنین کاری نیست که تو این برنامه وجود داره.


استاد از توضيحاتتون سپاسگزارم اما منظورتونو از عادي نفهميدم !! ميشه غير عاديشم توضيح بديد!!!
موفق باشيد

Vahid_moghaddam
دوشنبه 09 فروردین 1389, 10:04 صبح
اگر در مثال شما بدون دلیل از لیست ها استفاده شده به این معنی نیست که دلیلی برای استفاده از لیست ها وجود نداره. به عنوان یک دلیل مثالی رو که در زیر توضیح داده شده بخونید:

http://www.codeguru.com/csharp/sample_chapter/article.php/c11637__1/

Vahid_moghaddam
دوشنبه 09 فروردین 1389, 10:10 صبح
ميشه غير عاديشم توضيح بديد!!!

فرض کنید من می خوام یه فروشگاه آنلاین داشته باشم. به عنوان یک روش:

کلاسی طراحی می کنم که مشخصات سفارش رو نگه داره. مثل order

یک لیست از نوع کلاس order نعریف می می کنم.

هر سفارشی که داده می شه، من یه نمونه از کلاس رو می سازم و در لیست قرار می دم. این سفارش مستقیما در دیتابیس ذخیره نمی شه. سعی می کنم هزینه اتصال به دیتابیس رو کاهش بدم. لیست خرید رو cache می کنم و بنا بر شرایطی این لیست رو وارد دیتابیس می کنم.

این یک نمونه.

keivan mousavi
دوشنبه 09 فروردین 1389, 13:02 عصر
استاد موسوي از توضيحاتتون خيلي ممنونم اما خوب من كاملا متوجه توضيحاتتون نشدم ميشه كمي روانتر توضيح بديد لطفا!!:خجالت:
چه كارايي بالا مي بره ؟

عملیات Boxing و UnBoxing را راحتر و سریعتر میکند برای مثال انواع مقداری بر روی پشته stack ذخیره میشود انواع ارجاعی بر روی heap ذخیره میشود کلاسهای #C از نوع ارجاعی هستند در حالی که ساختارها از انواع مقداری میباشد NET. عمل تبدیل انواع مقداری به انواع ارجاعی را ساده میکند بنابراین شما میتوانید هر کجا که به یک آبجکت نیاز دارید (که یک نوع ارجاعی است) از یک نوع مقداری استفاده کنید برای مثال یک int را میتوان به آبجکت اختصاص داد عمل تبدیل یک نوع مقداری به یک نوع ارجاعی اصطلاحاً Boxing نامیده میشود عمل Boxing بصورت خودکار اگر یک متد به یک آبجکت بعنوان یک پارمتر نیاز دارد اتفاق می افتد و آن آبجکت بعنوان یک نوع مقداری ارسال میشود از طرف دیگر یک نوع مقداری Box شده را میتوان با عمل UnBoxing به یک نوع مقداری تبدیل کرد

AliRezaPro
دوشنبه 09 فروردین 1389, 16:35 عصر
ببینید

http://www.barnamenevis.org/forum/showthread.php?p=483546

sky_in_iran
سه شنبه 10 فروردین 1389, 09:08 صبح
از اينكه اساتيد محترم وقت گذاشتيد خيلي ممنونم جواب و گرفتم واقعا سپاسگزارم يه سوال برام پيش اومد مثلا من يه برنامه تحت وب مينويسم بعد براي اينكه زياد به ديتابيس متصل نشم براي ثبت اطلاعات و داخل ليست نگه ميدارم (catch) ميكنم و در يك شرايط خاص حالا هرچي باشه اطلاعات و ثبت ديتابيس مي كنم حالا مثلا 10 اطلاعات ثبت ليست شده و هنوز شرايطي كه براي ثبت در نظر گرفتم به وجود نيمده فرض كنيد سرور به هر دليل قطع بشه يا كرش كنه خوب اينجوري من 10 از اطلاعاتم و از دست دادم اينجا برنامه ضرر كرده خوب حالا چه بايد كرد ؟ براي جلوگيري از اينجور اتفاقات چه كنيم ؟

keivan mousavi
سه شنبه 10 فروردین 1389, 12:24 عصر
در این مواقع ما از WCF استفاده میکنیم WCF تابعه ای برای مدیرت داده ها در محیط شبکه های بزرگ هستش مفاهیمش خیلی سنگینه و در قالب تایپیک نیستش این توضیحی که من دادم بخش کوچکی از مبحث WCF هستش حالا برای مدیریت داده ها ما میاییم روالی تعریف میکنیم که از مقصد مبدا داده مورد نظر معلوم هستش و در این صورت اگر مسیر ارتباطی ما قطع بشه میاییم یک RollBack از سمت Client میگیریم

mrsalam
سه شنبه 10 فروردین 1389, 12:33 عصر
با اجازه اساتید
LINQ لیستها را ساپورت می کند ولی آرایه ها را نه.

sky_in_iran
چهارشنبه 11 فروردین 1389, 11:01 صبح
استاد موسوي wcf مربوط به تكنولوژي فريمورك 3 هست اطلاعات دقيق ندارم در حال حاضر اما با توجه به اطلاعات چند ماه قبلم هنوز سرور ها در ايران به طور كامل و خوب قابليت پشتيباني از فريمورك 3 رو ندارند درسته ؟ اگه اشتباه ميگم لطفا راهنمايي بفرماييد .
در ضمن ما همش داريم از تكنولوژي ها استفاده مي كنيم و سعي مي كنيم به روز باشيم اما هيچوقت خودمون به دنبال راه حل نيستيم و مصرف كننده صرفيم منتظر ميمونيم كه يه مشكل حل بشه بعد ارايه بشه و ما از اون استفاده كنيم!!!! چرا اينجوري ؟ ما همش خودمون و با جمله اي كه به نظر شخصي من يه جمله كاملا بي محتواست (تا چرخ هست چرا به دنبال درست كردن چرخ بريم) خودمون گرفتيم .
خواهشن ميشه يه راهنمايي كنيد كه ساخت تفكر خودمون باشه تا بشه روش كار كرد و بهينه ترش كرد
لطفا كمك كنيد ممنون ميشم
موفق باشيد

keivan mousavi
چهارشنبه 11 فروردین 1389, 11:41 صبح
حال حاضر اما با توجه به اطلاعات چند ماه قبلم هنوز سرور ها در ايران به طور كامل و خوب قابليت پشتيباني از فريمورك 3 رو ندارند درسته ؟ اگه اشتباه ميگم لطفا راهنمايي بفرماييد .

ما با WCF خودمون یک Web Service مینویسیم این وظیفه سیستم عامل سرور نیستش که برنامه ما رو Handler کنه


در ضمن ما همش داريم از تكنولوژي ها استفاده مي كنيم و سعي مي كنيم به روز باشيم اما هيچوقت خودمون به دنبال راه حل نيستيم و مصرف كننده صرفيم منتظر ميمونيم كه يه مشكل حل بشه بعد ارايه بشه و ما از اون استفاده كنيم!!!! چرا اينجوري ؟ ما همش خودمون و با جمله اي كه به نظر شخصي من يه جمله كاملا بي محتواست (تا چرخ هست چرا به دنبال درست كردن چرخ بريم) خودمون گرفتيم .

خوب اگر شما وقتت زیادی کرده با Soket Programing یک تابعه ای مثل WCF بنویس
این خاصیت هایی که میکروسافت در نرم افزارهایش قرارداده برای اینکه سرعت برنامه نویس بیشتر بشه ولی بعضاً به مشکلاتی بر میخوریم که خودمون مجبوریم یک تابعه ای مثل WCF بنویسیم
به هر حال برای نوشتن پروژه ها در سطح محدود گزینه عالی هستش

Vahid_moghaddam
چهارشنبه 11 فروردین 1389, 15:18 عصر
جمله اي كه به نظر شخصي من يه جمله كاملا بي محتواست

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

اما عدم استفاده از مثلا WCF دقیقا اختراع دوباره چرخه.