نمایش نتایج 1 تا 7 از 7

نام تاپیک: Generics

  1. #1
    کاربر دائمی آواتار java_nith
    تاریخ عضویت
    اردیبهشت 1388
    محل زندگی
    Norway | Oslo
    پست
    144

    Generics

    سلام دوستان
    من چند روزی دارم روی این موضوع Generics کار می‌کنم...
    ولی‌ زیاد در موردش متوجه نمیشم

    می‌شه یکی‌ خیلی‌ ساده موضوع رو توضیح بعده؟
    و چنتا هم مثل بزنه
    و در چه مورد‌های استفاده می‌شه،


    مرسی‌

  2. #2
    کاربر دائمی آواتار cups_of_java
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    تهران
    سن
    40
    پست
    1,544

    نقل قول: Generics

    فرض کن می خوای یک سری منطق (کار) برای انواع موجودیت ها به طور یه شکل انجام شه! مثلن می خوای یه stack داشته باشی که هر نوع داده ای رو (فارغ ار نوع اون داده) بتونه push , pop کنه! ok!?
    خب حالا کلاس Stack رو چطوری می نویسی؟ اگه فکر کنی می بینی باید یه Object data; توش تعریف کنی که بشه به طور کلی یه شی گرفت و نوع دقیقش معلوم نباشه! و مثلن push این شکلی خواهد شد:
    public void push( Object data );


    خب این چه بدی ای داره؟ اولین موضوع اینه که شما تایپ واقعی یه data رو گم کردی. موضوع تایپ و تطابق صحیحی نوع داده ها خیلی مهمه! شما فرض کن stackی از int داری! فرض کن stackی از string داری! این ها یه جور کار می کنن اما نمی خوای تو stackی که از int هست بزاری string هم پوش شه! ok!? خب تو این راه خیلی باید خودت کد بزنی چون تایپ data رو گم کردی.
    اگه احیانن یه روزی بر اساس تایپش بخوای تصمیمی بگیری نمی تونی و اینکه از نظر طراحی در زبان هایی که ساختار شی ایه تک ریشه ای ندارن (یعنی Object ندارن)‌امکان پذیر نیست و خیلی امکانات رو هم در مورد data نداری. نهایتن این راه امکان پذیر هست اما راه درستش نیست.
    راه درست استفاده از همین Generics هست. از اسمش هم معلومه! شما یه کلاس رو بر اساس یک نوع کلی (عمومی) generic می نویسی تا از مشخص کردن نوع در زمان کد نویسی خلاص شی و بزاری generics نوع رو در زمان اجرا به برنامت بده. (در قالب همون نوع generic که ازش استفاده کردی)

    حالا نسخه generic رو ببین:

    Class Stack<DataType> {
    DataType data;

    public void push( DataType data ) {
    ...
    }
    }


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


    Stack<String> myStringStack = new Stack<String>();
    myStringStack.push( "hehehe" );
    Integer i = new Integer( 2 );
    myStringStack.push( i ); // Error! type mismatch


    نمی دونم تونستم کوتاه پایه ای ترین کاربردش رو توضیح بدم یا نه. ولی Generics از اینجا شروع می شهو این رو بفهمی می تونی بقیه اش رو هم یاد بگیری. کتاب بخون (مثلن کتاب Thinking In Java که کاملن توضیح داده این مطالب رو).
    ضمنن به خاطر همین نوع کاربرد Generics که برای کلی سازی یک کلاس بر اساس نوع کلاس دیگه ای و دادن دید یکسان بدون توجه به نوع اون کلاس (یعنی چند ریختی) هست از اون به عنوان Static Polymorphism هم یاد می کنن.

  3. #3
    کاربر دائمی آواتار java_nith
    تاریخ عضویت
    اردیبهشت 1388
    محل زندگی
    Norway | Oslo
    پست
    144

    نقل قول: Generics

    خیلی‌ خیلی‌ خیلی‌ خوب توضیح دادید،
    دقیقا متوجه شدم

    خیلی‌ عالی‌ بود، فکر کنم این تاپیک بدن‌ها بدرد خیلیا بخوره،

    حالا که این بحث شروع شد میتونید در مورد Colletction framework هم یکم توضیح بدید،
    چون به این موضوع خیلی‌ مربوط می‌شه

    یکم مثلا در مورد List و Map
    چه کار‌ها انجام میدان، فرقشون، قابلیت‌هاشون و و و...

  4. #4
    کاربر دائمی آواتار cups_of_java
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    تهران
    سن
    40
    پست
    1,544

    نقل قول: Generics

    Collection framework یک کتابخانه استاندارد در Java SE هست برای استفاده از ساختمان داده های مختلف تو برنامه های جاوا
    انواع ساختمان داده ها رو داره و عملیاتی که روی هر کدوم هست و با ویژگی های مختلف...
    علت ارتباط این دو موضوع بهم اینه که اصولن زمانی که شما می خوای از ساختمان های داده برای نگهداری اشیاتون استفاده کنید بحث تایپ اشیا پیش می آد و... اصولن ساختمان های داده جنریک می تونن یه تایپ (همون تایپ جنریک) از اشیا رو نگهداری کنند. استفاده از ساختمان داده های جنریک کد شما رو امن تر می کنه. مثال:
    معمولی:

    String data = (String) list.get( i );


    ولی در حالت جنریک شما یه لیست از String ها داری پس میگی:

    String data = list.get( i) ;


    استفاده کردن از cast کد رو می تونه غیر امن و کثیف بکنه! و کد دوم ترجیح داده می شه چون چک لازم رو کامپایلر انجام می ده برا برنامه نویس.

    خب! کتابخانه Collection اساسن ۳ مدل اصلی از ساختمان ها رو تعریف می کنه:
    ۱. مجموعه ها (Set): نمی تونند عضو نکراری داشته باشند.
    ۲. لیست ها(List): می تونند عضو تکراری داشته باشند.
    ۳. جدول ها (Map): که برای نگهداری زوج های کلبد-مقدار هستند که می شه باهاشون برای هر کلید یک (یا چند) مقدار رو نگهداری کرد.
    هر کدوم اینا چند پیاده سازی ازشون هست مثلن لیست ها هم به صورت لینک لیست LinkList هستند هم به صورت آرایه ArrayList
    و مجموعه ها و جدول ها به صورت درختی و هش Hash وپیاده سازی شده اند: HashSet, HashMap, TreeSet, TreeMap
    اینکه فرق اینا چیه باید شما مفاهیم ساختمان دادهها رو بدونید. به طور خلاصه درختی ها عناصر رو مرتب نگهداری می کنند ولی hash ها مرتب نگهداری نمی کنند بلکه بر اساس الگوریتم های Hash دسترسی سریع تر می دن.
    برنامه نویس بسته به نیازش از هر کدوم از اینها استفاده می کنه...تازه ساختمان های دیگه ای مثل Queue و ... هم داریم...
    همین طور نسخه های همروند شون هم هست که برای برنامه هایی که به صورت همروند و موازی اجرا می شن باید استفاده بشن مثل:
    ConcurrentHashMap و ...

    برای اطلاعات کامل برید بخش Collection کتاب Thinking In Java رو با دقت بخونید.

  5. #5
    کاربر دائمی آواتار java_nith
    تاریخ عضویت
    اردیبهشت 1388
    محل زندگی
    Norway | Oslo
    پست
    144

    نقل قول: Generics

    دوسته عزیز واقعا دستت درد نکنه
    خیلی‌ خوب توضیح دادی، مرسی‌

    من توی دانشگاه اینو خندم، ولی‌ خوب متوجه نشدم، ولی‌ با توضیحات شما قشنگ فهمیدم
    یکم دیگه گوگل کنم همه چی‌ یاد میگیرم
    بازم مرسی‌

  6. #6
    کاربر دائمی آواتار Cold.82
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    تبریز
    پست
    204

    نقل قول: Generics

    نقل قول نوشته شده توسط java_nith مشاهده تاپیک
    خیلی‌ خیلی‌ خیلی‌ خوب توضیح دادید،
    دقیقا متوجه شدم

    خیلی‌ عالی‌ بود، فکر کنم این تاپیک بدن‌ها بدرد خیلیا بخوره،

    حالا که این بحث شروع شد میتونید در مورد Colletction framework هم یکم توضیح بدید،
    چون به این موضوع خیلی‌ مربوط می‌شه

    یکم مثلا در مورد List و Map
    چه کار‌ها انجام میدان، فرقشون، قابلیت‌هاشون و و و...
    برای map و list
    فایل های ضمیمه فایل های ضمیمه

  7. #7
    کاربر دائمی آواتار java_nith
    تاریخ عضویت
    اردیبهشت 1388
    محل زندگی
    Norway | Oslo
    پست
    144

    نقل قول: Generics

    نقل قول نوشته شده توسط Cold.82 مشاهده تاپیک
    برای map و list
    دستت درد نکنه دوسته عزیز
    الان دارم میخونمش

    با توضیحات "cups_of_java" جان خیلی‌ خیلی‌ کامل تر شد
    مرسی‌

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •