پاسخ ها ( ۴ )

  1. کلاس Abstract در سی شارپ : کلاسی که نمی توانیم از آن نمونه سازی کنیم فقط در ارث بری می توانیم از آن استفاده کنیم .

    دو مثال می زنیم تا این مفهوم خوب جا بیفتد.

    تو دنیای واقعی اگر نگاه کنیم همه موجودات زنده در این کره ی خاکی هم می توانند حرکت کنند و هم می توانند نفس بکشند حرکت کردن انسان با راه رفتن است ، ماهی با شنا کردن ،کانگرو با جهیدن و……. و نفس کشیدن انسان با شش است و نفس کشیدن ماهی با آبشش

    پس هر موجود زنده دو تا متد را دارد یکی متد حرکت کردن یکی متد نفس کشیدن اگر برای یکی از آن متدها را یادمان برود مثلا رفتار حرکت کردن را براش در نظر نگیریم آن موجود زنده دیگر نتواند حرکت کند ودر یکجا ساکن بماند کم کم میمرد .

    پس من باید این را الزام کنم که تمام موجودات زنده باید دو تا رفتار نفس کشیدن و حرکت کردن را داشته باشند. برای این الزام یک کلاس Abstract در نظر می گیریم.

    Abstract یعنی خلاصه ،چکیده، یعنی به جزئیات توجه نکردن .

    یک کلاس Abstract را یک استاندارد در نظر می گیریم که همه موجودات زنده باید نفس بکشند و حرکت کنند.

    نکته: وقتی که رسید به کلاس انسان ها داخل کلاس انسان ها کلاس Abstract پیاده سازی می شود. داخل خود کلاس Abstract پیاده سازی انجام نمی دهیم فقط آن امضا تابع یا امضا آن رفتار را می نویسیم.

    الان وقتی که داخل کلاس انسان ها رسید متد حرکت کردن آن می شود راه رفتن و وقتی داخل کلاس ماهی ها رسید متد حرکت کردن آن می شود شنا کردن برای بقیه موجودات زنده هم همین طور است وقتی که رسید داخل کلاس خودشان جزیئات را برایشان بیان می کنیم.

  2. عرض سلام و ادب خدمت شما، کاربر انجمن درسمن
    جالبه که بدونید در دنیای برنامه نویسی، استانداردترین کدها آن هایی هستند که دارای کمترین تکرار کد باشند، اما گاهی موقعیت هایی به وجود می‌آید که ما مجبور می‌شویم کدهای یکسان را برای انجام کارهای تقریبا یکسان با تغییرات کوچک چندین مرتبه تکرار کنیم، در این صورت باید به دنبال راهکاری باشیم که این تکرارها را به حداقل ممکن برسانیم، پس بدین منظور می توانیم از کلاس‌ها و متدهای abstract استفاده ‌کنیم!
    موفق باشید.

  3. سلام دوست عزیزم

    در برنامه نویسی شی گرا مفهومی هست با نام abstract یا abstraction که از لحاظ واژه شناسی اگر بخوایم نزدیک ترین معنی رو براش بگیم میشه انتزاعی دیدن یا به عبارتی به جزئیات نپرداختن!

    خب حالا الان سوالی پیش میاد که این یعنی چی؟

    بزارید در دنیای واقعی اینو باهم بررسی کنیم

    مثلا نقشه های ساختمونی رو در نظر بگیرید یکسری شکل ها که به صورت مثلا مستطیل یا دایره ست رو شما میبینید مثلا پذیرایی منزل رو به شکل یک مستطیل در نظر گرفته اما دقیقا به همون متراژ واقعی پذیرایی روی صفحه کشیده نشده مثلا اگرمساحت پذیرایی ۴۰۰ مترمربع باشه اون مستطیل به اندازه طول و عرض اون نکشیده و به صورت خیلی خلاصه و انتزاعی یک مستطیل رو کشیده ولی طول و عرض اونو نوشته،یا حتی بزارید بهتر بگم مثلا اگر  پذیرایی اون خونه از استایل خاص معماری پیروی میکنه(مثلا  پذیرایی دوبلکس) دیگه اون توی نقشه آورده نشده!!!(پس به جزئیات نپرداختن رو فهمیدیم)

     

    حالا دوباره برگردیم به دنیای برنامه نویسی

    وقتی شما کلاس رو ایجاد میکنید با این قانون که این کلاس یک کلاس abstract هست دیگه این کلاس نمیتونه کل گرا باشه و از این به بعد یک نقشه ست(مثل نقشه ی ساختمونمون که بررسیش کردیم)

    برگردیم به دنیای واقعی

    اگر بخوایم دوتا رفتار تمام موجودات روی زمین رو بررسی کنیم ، میتونیم حرکت کردن و خوردن رو بررسی کنیم.

    میدونیم که انسان با راه رفتن حرکت میکنه و مار هم با خزیدن روی زمین

    حالا خودتون رو در نظر بگیرید که میخوایید برای موجودات روی زمین این دو رفتار رو پیاده سازی کنید ! اگر با abstraction هیچ آشنایی نداشته باشیم برای تمام موجودات متدی (رفتاری) درست میکنیم متناسب با نوع کلاس آن موجود

     

    مثلا برای انسان walk رو درست میکنید

    و برای مار Crawl (به معنای خزیدن)

    و برای بقیه موجودات هم به همین ترتیب

    خب آیا اینکار کمی غیر حرفه ای نیست!؟!

    میتونیم با abstract این مفهوم رو کمی ساده تر کنیم!!!

    یعنی با این دید جلو میریم که
    “من نمیدونم چه موجوداتی وجود دارند اما همه ی موجودات هم غذا میخورن هم حرکت میکنند”

    پس در سطح abstract  اینکار رو میکنیم و رفتاری درست میکنیم به نام Move به معنای حرکت

    و تمام موجودات دنیا این رفتار را پیاده سازی میکنند.

     

    پس یادمون نره abstraction یعنی:

    از بالا نگاه کردن

    به جزئیات اهمیت ندادن

    نکته جالب اینه که هیچ کلاس abstract نمیتونه نمونه سازی بشه چون abstract فقط برای مشتق شدنه(وراثت)

    مفهوم abstract با مفهوم Interface بسیار رابطه تنگاتنگی داره و باید تفاوت های هر کدوم رو دونست چون در صورت استفاده ی نادرست باعث طراحی اشتباه در سیستم شی گرا مواجه میشیم.

     

    امیدوارم مطلب رو درست بیان کرده باشم
    شاد و پیروز باشید

     

     

    آموزش سی شارپ

  4. با سلام دوست عزیز

    در دنیای برنامه نویسی استانداردترین کدها آن هایی هستند که دارای کمترین تکرار کد باشند. اما موقعیت هایی به وجود می‌آید که ما مجبور می‌شویم کدهای یکسان را برای انجام کارهای تقریبا یکسان با تغییرات کوچک بارها و بارها بنویسیم. در این وضعیت باید به دنبال راهکارهایی باشیم که این تکرارها را به حداقل ممکن برسانیم. برای مبارزه با این تکرارها از کلاس‌ها و متدهای یا انتزاعی استفاده می‌کنیم.

    استفاده از این روش خطوط کد را کاهش داده و آن را قانونمند و قابل اعتماد می‌کند. در کار تیمی، ایجاد قراردادها به سرپرست تیم کمک می‌کند کدهای یکپارچه دریافت کند. در واقع یکی از کاربرد‌های اصلی abstract زمانی است که می‌خواهید توسعه دهندگان تیم خود را مجبور کنید تعدادی متد ایجاد کنند و ترجیح می‌دهید متدهای آن‌ها حتما مطابق با ساختارهای تعیین شده از طرف شما باشد. نکته مهم دیگر این است که یک کلاس می‌تواند چندین interface را پیاده سازی کند ولی فقط از یک کلاس abstract به ارث ببرد. چرا که interface صرفا مجموعه ای از متدهای abstract است.

ارسال یک پاسخ