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

نام تاپیک: فرق Interface با abstract class

  1. #1

    فرق Interface با abstract class

    سلام من تو چند تا کتاب مفهوم Interface رو خوندم ولی فرقشو با Absract class نفهمیدم . کسی میتونه با یه مثال توضیح بده؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    Iran
    پست
    801
    این دو از جهات زیادی به هم شباهت دارن و یکی از وجوه بارز اونها پیاده‌سازی مفهوم چند ریختی است ولی تفاوت اونها در اینه که اینترفیس هیچ گونه پیاده‌سازی متدی نداره ولی در کلاس Abstarct فقط متدهای Abstract پیاده سازی ندارند ولی سایر متدها میتوانند تعریف شوند.
    همچنین کلاس Abstract همانند سایر کلاسها به ارث میرسد و تنها متدهای Abstarct باید Override بشوند ولی برای اینترفیس این گونه نیست و اینترفیسها باید به طور کامل در یک کلاس پیاده‌سازی شوند.

  3. #3
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    دلایل استفاده از Interface و Absract class به اندازه‌ای از هم متفاوتند که لیست کردن فرقهاشان مانند لیست کردن فرقهایه پیچ‌گوشتی با آچار فرانسه میماند. اگرچه میشه با هر دوشان میخ‌کوبید ولی اینکه بخواهیم فرقهاشان را به این سورت لیست کنیم معنی نمیده.
    Interface برایه نشان دادن قابلیتها است. اینکه یک کلاس چه قابلیتهایی دارد.
    Absract class برایه نشان دادن نوع کلاس است.
    برایه مثال درخت باینری ، از نوع درخت است،دو تا از قابلیتهاش این است که نُدهاش را یکی یکی از کم به زیاد لیست کند یا خودش را سورت کند.
    برایه همین اینکه درخت باینری از یک کلاس ابسترکت کلاس "درخت" به ارث ببره و اینترفیسهایه ISortable و IEnumerable را پیاده سازی کند به نظر درست میاد.
    حالا میشه در مورد کلی نکات بیربط دیگر یک Interface با یک Abstract Class فرق پیدا کرد ولی هر کدام برایه بیان کردن مفاهیم کاملا مختلفی استفاده میشند.
    در ضمن شباهتی که بیان شده "و یکی از وجوه بارز اونها پیاده‌سازی مفهوم چند ریختی است " مفهوم چند ریختی یک نوع نیست، چندین نوع مختلف است، اینترفیس برایه بیان کردن قابلیتهایه چندریختی است و ابسترکت کلاس برایه بیان کردن نوع هایه چند ریختی. پس در اصل این شباهتشان نیست بلکه فرق اصلیشان است.

  4. #4
    با کسب اجازه از اساتید.
    من توی این بحث شرکت میکنم چون می خواهم اطلاعاتی رو که توی ذهنم دارم و رو بیان کنم ، تا اگه اشتباه هست و مشکلی داره دوستان اصلاح کنند و در نتیجه به اطلاعات صحیح برسم. مثل موضوعی که درباره Singleton بود و دوست بسیار عزیز و دانایم جناب ارژنگ من رو راهنمایی کردند.

    یکی فرق بین Interface و Abstract Class اینهست که ، Abstract همینطور که از اسمش پیداست یک کلاس هست ولی Interface یک قانون هست که مشخص میکند که یک کلاس چطوری باید پیاده سازی شود. یک کلاس فقط از یک کلاس Abstract می تواند ارث بپذیرد ولی از n تا interface می تواند ارث ببرد.
    در یک interface نمی توان متد را پیاده سازی کرد و یا حتی variables/constants را تعریف کنید ولی در Abstract می توانید.
    فرق مهم یک Abstract Class با یک Class این است که شما نمی توانید از یک Abstract Class نمونه سازی کنید (Instance) .

  5. #5
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط hassan razavi مشاهده تاپیک
    با کسب اجازه از اساتید.
    من توی این بحث شرکت میکنم چون می خواهم اطلاعاتی رو که توی ذهنم دارم و رو بیان کنم ، تا اگه اشتباه هست و مشکلی داره دوستان اصلاح کنند و در نتیجه به اطلاعات صحیح برسم. مثل موضوعی که درباره Singleton بود و دوست بسیار عزیز و دانایم جناب ارژنگ من رو راهنمایی کردند.

    یکی فرق بین Interface و Abstract Class اینهست که ، Abstract همینطور که از اسمش پیداست یک کلاس هست ولی Interface یک قانون هست که مشخص میکند که یک کلاس چطوری باید پیاده سازی شود. یک کلاس فقط از یک کلاس Abstract می تواند ارث بپذیرد ولی از n تا interface می تواند ارث ببرد.
    در یک interface نمی توان متد را پیاده سازی کرد و یا حتی variables/constants را تعریف کنید ولی در Abstract می توانید.
    فرق مهم یک Abstract Class با یک Class این است که شما نمی توانید از یک Abstract Class نمونه سازی کنید (Instance) .
    با سلام خدمت جناب رضوی، لطف دارید :)
    این فرقهایی که بیان کردید همه درست هستند، ولی سوال واقعی اصلا چیزه دیگریست.
    من هم مدتها همین فرقها را به عنوان فرقهایه بینشان فکر میکردم ولی بازهم از این جواب راضی نبودم.
    سوال واقعی این نیست که فرق بینشان چی هست، چونکه بین دو ابزار مختلف (مانند پیچ‌گوشتی و آچار فرانسه) فرق زیاد میشه پیدا کرد ولی فایده‌ این نوع تفاوت گذاری بین دو ابزار که هر کدام برایه کاره بخصوصی استفاده میشند . فایده‌ای نداره!

    باید پرسید که اینترفیس را برایه چه کاری استفاده میکنیم؟ و ابسترکت کلاس را برایه چه کاری؟

    پلیمرفیزم (چند شکلی بودن) نوعهایه متفاوت دارد.
    برنامه نویسی در حقیقت یک روش ساختن مدل هست. در ساخن مدل باید بشه ابراز کرد که اشیائ مختلف در مدل به همدیگر چه رابطه‌ای دارند.

    Type Polymorphism : برایه ابراز جابجایی نوعی هست. مثالا یک درخت سیب از نوع درخت هستش ولی درخت یک ابسترکت کلاس تعریف شده

    Interface Polymorphisim: برایه ابراز جابجایی قابلیت است. اینکه یک لیست داریم و یا یک گراف مهم نیست، اگر هردوشان IEnumerable را پشتیبانی میکنند بدانه دانستن نوعشان میتوانیم از هر دو از طریق قابلیت IEnumarable درخواست کنیم که یکی یکی عضوهاشان را برگردانند.

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

    یک کلاس درست است که از یک ابسترکت کلاس میتواند ارث ببرد ولی وقتی که در مورد اینترفیس حرف میزنیم باید واژه‌هایمان را عوض کنیم.
    یک کلاس میتواند که ابراز کند که چه اینترفیسهایی را پشتیبانی میکند (نه اینکه ارث میبرد).
    پشتیبانیه یک کلاس از یک اینترفیس و یا ارث بریش از یک ابسترکت کلاس دیدهایه متفاوتی را بین یک کلاس و کلاسهایه دیگر و قابلیتهاش با قابلیتهایه کلاسهایه دیگر که از نظر نوعی به هم هیچ ربطی ندارند را مهیا میکند.

  6. #6

    نقل قول: فرق Interface با absteract class

    سلام.
    یه سوالی برام پیش اومده : چرا C#‎ از ارث بری چندگانه پشتیبانی نمیکنه؟ این یک نقصه ؟

  7. #7
    کاربر دائمی آواتار I,Nobody
    تاریخ عضویت
    خرداد 1385
    محل زندگی
    کانادا
    پست
    464

    نقل قول: فرق Interface با absteract class

    - کلاس abstract مثل کلاس های دیگه هست با این تفاوت که این امکان رو داره که پیاده سازی متدهایی رو برای کلاسهایی که ازش مشتق میشن، اجباری کنه. کلاس abstract رو نمیتونید final کنید. متدهای abstract نمیتونن private باشند.

    - اینترفیس ها فقط پیاده سازی متدهایی رو برای کلاسهایی که از اونها به عنوان رابط استفاده میکنند، اجباری میکنند.
    - یک کلاس میتونه از چند اینترفیس implement بشه.
    - به هیچ وجه نمی تونید یک متد رو توی interface پیاده سازی کنید.

    مثال:

    /* example of abstract and using that */
    abstract class car{
    public abstract function start();
    public abstract function drive();
    public abstract function stop();
    public function enginOff(){
    //turn the engine off
    }
    }


    class sedan extends car{
    public function start(){
    //Turn the engine on
    }
    public function drive(){
    //Change the gear to D
    }
    public function stop(){
    //Change the gear to P
    }
    }


    //===================================


    /* example of interface and using that */
    interface car{
    public function start();
    public function drive();
    public function stop();
    public function enginOff();
    }


    class sedan implements car{
    public function start(){
    //Turn the engine on
    }
    public function drive(){
    //Change the gear to D
    }
    public function stop(){
    //Change the gear to P
    }
    public function enginOff(){
    //turn the engine off
    }
    }
    آخرین ویرایش به وسیله Mahmoud.Afrad : پنج شنبه 05 آذر 1394 در 16:17 عصر

  8. #8

    نقل قول: فرق Interface با abstract class

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

    1: نمیتوانیم از
    کلاس
    Abstract
    نمونه (شیئ) ایجاد کنیم. ولی از
    Interface میشه.
    2: کلاس Interface میتونه multiple-inherited بشه ، یعنی مثلا کلاس گربه از کلاس اینترفیس حیوان و کلاس اینترفیس چهار پایان ارث بری میکنه ولی کلاس ابسترکت نمیتونه
    multiple-inherited
    بشه.
    3: در Interface نمیتوتن data member داشته باشیم یعنی مثلا یک متغییر اینتیجر در private یا public. ولی در Abstract این امر امکان داره.
    4: در Interface نمیتوانیم پیاده‌سازی متدی کنیم ولی در Abstract میتوانیم. مثلا یک تابع برای جمع دو عدد.
    5:در Abstract حداقل باید یک pure virtual یا به عبارت دیگر یک Abstract یا به عبارت دیگر تابع virtual که مساوی 0 هست داشته باشیم و بقیه توابع میتواند نرمال باشد. ولی در Interface همه توابه باید pure virtual و تابع destructor باید virtual باشد نه pure virtual یعنی مساوی صفر نکنیم و وجودش ضروری هست.


    class test // interface class
    {
    public:
    virtual ~test(); // virtual function
    virtual void method_1(int x) = 0; // pure virtual function || Abstract Member Function
    virtual void method_2(int y) = 0; // pure virtual function || Abstract Member Function
    virtual void methpd_3() = 0; // pure virtual function || Abstract Member Function
    };

    class test // abstract class
    {
    public:
    virtual void method_1() = 0; // pure virtual function || Abstract Member Function
    virtual void method_2(); // Virtual function. Non Abstract Member Function1
    void method_3(); // Non Abstract Member Function1
    };




    آخرین ویرایش به وسیله tami64 : سه شنبه 03 آذر 1394 در 16:15 عصر

  9. #9

    نقل قول: فرق Interface با abstract class

    نقل قول نوشته شده توسط tami64 مشاهده تاپیک
    سلام خدمت دوستان عزیز. پست های قبلی رو خوندم یا اشتباه جواب داده شده و یا ناقص.یک توصیه به هیچ عنوان از کتاب های فارسی برای یادگیری شی گرا استفاده نکنید و از مرجع انگلیسی استفاده کنید.1: نمیتوانیم از
    کلاس
    Abstract
    نمونه (شیئ) ایجاد کنیم. ولی از
    Interface میشه.
    2: کلاس Interface میتونه multiple-inherited بشه ، یعنی مثلا کلاس گربه از کلاس اینترفیس حیوان و کلاس اینترفیس چهار پایان ارث بری میکنه ولی کلاس ابسترکت نمیتونه
    multiple-inherited
    بشه.
    3: در Interface نمیتوتن data member داشته باشیم یعنی مثلا یک متغییر اینتیجر در private یا public. ولی در Abstract این امر امکان داره.
    4: در Interface نمیتوانیم پیاده‌سازی متدی کنیم ولی در Abstract میتوانیم. مثلا یک تابع برای جمع دو عدد.5:در Abstract حداقل باید یک pure virtual یا به عبارت دیگر یک Abstract یا به عبارت دیگر تابع virtual که مساوی 0 هست داشته باشیم و بقیه توابع میتواند نرمال باشد. ولی در Interface همه توابه باید pure virtual و تابع destructor باید virtual باشد نه pure virtual یعنی مساوی صفر نکنیم و وجودش ضروری هست.

    class test   //  interface class{  public:    virtual ~test(); // virtual function      virtual void method_1(int x) = 0; // pure virtual function || Abstract Member Function      virtual void method_2(int y) = 0; // pure virtual function || Abstract Member Function      virtual void methpd_3() = 0;      // pure virtual function || Abstract Member Function  };class test  //  abstract class { public:  virtual void method_1() = 0; // pure virtual function || Abstract Member Function  virtual void method_2();     // Virtual function. Non Abstract Member Function1   void method_3();             // Non Abstract Member Function1 };
    اگر میشه یه کتاب در ازین زمینه با زبان اصلی معرفی کنید ممنون می شم

  10. #10
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: فرق Interface با abstract class

    C#‎ 6.0 in a nutshell

  11. #11

    نقل قول: فرق Interface با abstract class

    نقل قول نوشته شده توسط javady_joon مشاهده تاپیک
    اگر میشه یه کتاب در ازین زمینه با زبان اصلی معرفی کنید ممنون می شم
    این صفحه فکر میکنم که بتونه کمک کنه
    http://www.codeproject.com/Articles/...rsus-Interface

  12. #12

    نقل قول: فرق Interface با abstract class

    نقل قول نوشته شده توسط archi مشاهده تاپیک
    سلام من تو چند تا کتاب مفهوم Interface رو خوندم ولی فرقشو با Absract class نفهمیدم . کسی میتونه با یه مثال توضیح بده؟
    سایت زیر بصورت کامل کلاس Abstract را با Interface مقایسه کرده است:
    http://javapro.ir/news_98966-utab

تاپیک های مشابه

  1. دلیل استفاده از Interface و Abstract
    نوشته شده توسط syst3m_f4ult در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 15
    آخرین پست: چهارشنبه 06 بهمن 1395, 16:37 عصر
  2. مبتدی: interface ,abstract class
    نوشته شده توسط com8383 در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 1
    آخرین پست: سه شنبه 25 اسفند 1388, 14:02 عصر
  3. سوال: مفهوم interface و abstract class با مثال
    نوشته شده توسط HOSSEINGHOLI در بخش C#‎‎
    پاسخ: 2
    آخرین پست: پنج شنبه 12 آذر 1388, 20:44 عصر
  4. سوال: کجا از اینترفیس و کجا از abstract class باید استفاده بشه؟؟؟؟
    نوشته شده توسط hanieh66 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 10 مهر 1387, 17:14 عصر
  5. abstract class یا interface
    نوشته شده توسط Peyman_Ranjbar در بخش C#‎‎
    پاسخ: 9
    آخرین پست: جمعه 24 شهریور 1385, 05:26 صبح

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

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