روی خط زندگی

گشت و گذار من در هنر نرم افزار

روی خط زندگی

گشت و گذار من در هنر نرم افزار

مفهوم Abstraction چیست؟

پنجشنبه, ۹ بهمن ۱۳۹۳، ۰۹:۰۰ ب.ظ

مفهوم Abstraction یا همان انتزاع دیدگاهی انتزاعی به اشیا یا همان Object های می باشد. در دنیای واقعی وقتی می گوییم میز، یک انتزاع کلی از مفهوم میز به ذهن متبادر می شود. کلمه میز لزوما تصویر خاصی از یک میز در ذهن نمی سازد ولی وقتی می گوییم میز ناهارخوری، برای هر شخص با مقتضیات فکری که دارد یک تصویر از یک میز نهارخوری که احتمالا آن را در خانه دارد یا در جایی مشاهده کرده در ذهن ساخته می شود.

در دنیای مجازی ما، Object ها نمونه هایی از یک Class هستند. در واقع کلاس ها دیدگاه های انتزاعی به یک شی می باشند. توجه داشته باشید که در مورد مفهوم انتزاع یا Abstraction صحبت می کنیم و نه در مورد abstract class (در واقع abstract class ها خود دیدگاهی انتزاعی از یک class می باشد که در ادامه راجعه به آن هم صحبت می کنیم)

مثلا کلاسی که برای مدیریت یک حساب بانکی است حاوی اطلاعاتی به مانند زیر است:


کلاس حساب بانکی (مثلا بانک ملت) :

  • صفت ها (attributes)
    • شماره حساب
    • نام صاحب حساب
    • موجودی
    • نوع حساب (جام، کوتاه مدت، طلایی)
  • رفتار ها (behaviors)
    • افزایش موجودی
    • کاهش موجودی
    • افتتاح حساب
    • بستن حساب

کلاس حساب بانکی، یک مفهوم انتزاعی از حساب بانکی افراد (مثلا حساب بانکی موسسه خیریه کهریزک) می باشد. در واقع اینجا مشخص نیست که شماره حساب چند است و صاحب حساب کیست. این یعنی ما یک کلاس برای حساب بانکی احمد و یک کلاس برای حساب بانکی محمود ایجاد نمی کنیم، بلکه یک کلاس برای حساب بانکی ایجاد می کنیم.

وقتی از منظر انتزاعی یا Abstraction به اشیا و مسائل نگاه می کنیم به این معنی است که:
  • به چیز های ضروری و اساسی دقت می کنیم.
  • از جزییات و موارد بی ربط به اساس مساله پرهیز می کنیم.
در بسیاری از مصاحبه های استخدامی که تاکنون با برنامه نویسان مختلف انجام داده ام وقتی می پرسم: abstraction چیست؟ می گویند: «کلاسی است که هیچ پیاده سازی ندارد.». این در حالی است که تاکید می کنم که اولا ما در حوزه مفاهیم صحبت می کنیم و نه در حوزه پیاده سازی، دوما abstraction مفهومی است که abstract class از آن نشئت می گیرد و این دو را با هم اشتباه نگیرید. برای روشن تر شدن کمی به abstract class بپردازیم تا تفاوت آن با مفهوم abstraction مشخص شود.

فرض کنید در همان مثال حساب بانکی، بخواهیم یک موجودیت انتزاعی تر از این کلاس خلق کنیم که وابستگی به یک بانک خاص نداشته باشد. برای این منظور می بایست دیدگاه انتزاعی خود را یک پله ارتقا دهیم و آنچه که موجب وابستگی این کلاس به یک بانک خاص می باشد (در این مثال نوع حساب که ممکن اسن برای هر بانک متفاوت باشد) را حذف می کنیم و موجودی به نام abstract class را با توجه به موجودیت کلاس قبلی ایجاد می کنیم.

با توجه به این مطلب، پر واضح است که abstraction مفهومی است که abstract class بواسطه آن ایجاد می شود و نباید این دو را معادل هم گرفت.
موافقین ۱ مخالفین ۰ ۹۳/۱۱/۰۹

نظرات  (۹)

عالی
سلام
اطلا قابل فهم و ملموس نبود. کلا همون چیزی هم که فهمیده بودم بهم ریخت و دچار سردرگمی شدم...
۱۰ تیر ۹۷ ، ۰۱:۳۷ مهرداد از شیراز
من یاد گیری شی گرایی رو تازه شروع کردم ، منابع زیادی خوندم به جرات میگم توضیحتون در مورد مفهوم abestraction فوق العاده بود ؛ 
به امید موفقیت روز افزون
مفید بود

متاسفانه آخر هم نفهمیدم اصل abstraction  چی بود ! 

توضیحات خوب جمع بندی نشده بود . 

ولی بازم ممنون از وقتی که گذاشتید . 

مثلا من یه ایجکت  ایجاد کردم که در اون مشخصات رو خواسته مثل اسم و فامیلی و یه فرم لاگین ایجاد کردم برنامه ای نوشتم که با هربار لاگین کاربر از همون نوع ابجکت یکی اضافه بشه اما با اسم های مختلف ایا مفهوم انتزاع اینه؟

عاااالی

@pouyaAZ این مطلب شاید مفید باشه:

 

انتزاعی و انضمامی دو مفهوم متقابل در فلسفه هستند. امور انتزاعی (به انگلیسی: abstract) فرازمانی و فرامکانی هستند مثل اعداد یا موجودات مجرد، اما امور انضمامی (به انگلیسی: concrete)، اموری زمانی و مکانی هستند. انتزاعی در اصل به معنای امر جدا شده، گسسته و مجرد و انضمامی حاوی معانی پیوستگی، گرد هم آمدن و چسبندگی است. ذهن پس از آنکه چند چیز مشابه را درک کرد، آنها را با یکدیگر مقایسه می‌کند. اوصافی را که مخصوص به هر یک از آن هاست، کنارگذاشته و وجه تشابه و صفت مشترک میان همه آنها را برمی‌گزیند. سپس از آن صفت مشترک، یک مفهوم کلی می‌سازد که دربارهٔ همه آن افراد صادق است. در این هنگام گفته می‌شود که این مفهوم، از این چیزها انتزاع شده و مفهومی انتزاعی است. فاهیم انتزاعی در خارج وجود ندارند برای مثال، چند نفر از دوستانمان را می‌بینیم. وجوه تمایز، یعنی آن اوصافی راکه هر یک را از دیگران متفاوت می‌سازد، کنار گذاشته و وجه مشترک میان همه آن‌ها را که انسانیت است، برمی‌گزینیم.

https://fa.wikipedia.org/wiki/%D8%A7%D9%86%D8%AA%D8%B2%D8%A7%D8%B9%DB%8C_%D9%88_%D8%A7%D9%86%D8%B6%D9%85%D8%A7%D9%85%DB%8C

سلام و عرض ادب

بسیار ساده و قابل فهم توضیح دادید. خیلی ممنون. بهره بردم

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی