رفتن به مطلب
برنامه نویسی من

Mostafa

مدیر سایت
  • تعداد ارسال ها

    2,718
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    10

پست ها ارسال شده توسط Mostafa


  1. Eset Smart Security Premium /Internet Security /Antivirus / Mobile Security
    Full (1 Device)

    مخفی

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


    Eset Endpoint Security /Internet Security /Antivirus /Mobile Security
    60 DAYS (99 DEVICES)
    EXPIRATION DATE: 19/04/2021

    مخفی

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


    Eset Smart Security Premium
    30 DAYS (1 DEVICE)
    EXPIRATION DATE: 19/03/2021
     

    مخفی

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

     


  2. مخفی

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

    در بخش های مقدماتی و تکمیلی برنامه نویسی اندروید (Android)، مفاهیم اصلی و عمومی در برنامه اندروید را فرا گرفتیم. در این بخش مفاهیم پیشرفته تر مورد بررسی قرار گرفته و در حین آموزش تلاش شده پروژه ها و مثال های گوناگون برای تفهیم بیشتر، حل و بررسی شوند. نحوه ارتباط با اینترنت، ساخت ویوهای اختصاصی، دریافت اطلاعات مکانی کاربر، کار با سنسور اثر انگشت، نمونه یک بازی ساده با استفاده از کتابخانه های گرافیکی و … مباحث مطرح شده در این دوره آموزشی هستند.

    سرفصل :

    نقل قول


        درس یکم: ساخت ویوهای اختصاصی
            استفاده از ترکیب چند ویو (ساخت Value Selector)
            ساخت ویو از پایه و بدون ترکیب ویوهای موجود (ساخت ValueBar)
            استفاده از انیمیشن برای تغییر مقادیر و حفظ حالت قبلی
            ساخت لود بار به صورت دایره ای ( Circular Progress)
        درس دوم: آشنایی با SnackBar و اعمال تغییرات برای شخصی سازی اسنک بار
        درس سوم: ارتباط با اینترنت در اندروید
            آشنایی با سورس نمایشی وب سایت و دریافت آن در اندروید (نحوه ایجاد ارتباط با اینترنت)
            آشنایی با کلاس AsyncTask
            ارسال پارامترها به سمت سرور و تشخیص آن ها در وب سرویس
        درس چهارم: استفاده از کتابخانه Volley برای ارتباط ساده تر و آشنایی با متدهای مختلف آن
        درس پنجم: پروژه دریافت اطلاعات آب و هوا
            آشنایی با API
            نمایش وضعیت با آیکون های مختلف
            مدل سازی اطلاعات شهرها و مختصات جغرافیایی در دیتابیس SQLite
            انتخاب شهرهای مورد نظر برای دریافت وضعیت آب و هوا
            نمایش وضعیت آب و هوای شهرهای منتخب
            دریافت و نمایش پیش بینی چند روز آینده
        درس ششم: استفاده از GPS - آپدیت وضعیت کاربر در صورت تغییر مکان و یا با فواصل زمانی مشخص
        درس هفتم: آشنایی با BroadcastReceiver همراه با مثال
        درس هشتم: آشنایی با بلوتوث و پیاده سازی اپلیکیشن نمونه چت بلوتوث بین دو دستگاه
        درس نهم: آشنایی با نحوه استفاده از فونت های فارسی و نمایش صحیح متن فارسی
        درس دهم: آشنایی با نحوه رسم نمودارهای مختلف در اپلیکیشن های اندرویدی
        درس یازدهم: ارسال و دریافت پیامک با SMS API اندروید
        درس دوازدهم: دانلود فایل از اینترنت در اندروید
        درس سیزدهم: آشنایی با نحوه اعتبارسنجی با اثر انگشت در دستگاه های اندرویدی
        درس چهاردهم: استفاده از حساب کاربری گوگل برای ورود به برنامه و تشخیص کاربران

     

     

    دانلود دوره آموزش برنامه نویسی پیشرفته اندروید

     


  3. مخفی

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

    آردوینو بردهایی هستند که براساس برخی از میکروکنترلرها ساخته شده اند و امکان احساس کنترل فضای بیشتری از دنیای فیزیکی را فراهم می کند. در اصل یک پلتفرم متن باز برای نمونه سازی و انجام پروژه های الکترونیکی به شمار می رود. هدف این دوره ، آموزش به شکلی است که چه کاربران مبتدی که دانش کافی از برنامه نویسی ندارند و چه برنامه نویسان حرفه ای که با پلتفرم آردوینو آشنایی دارند، به کمک این ماژول امکان ساخت مجموعه های پیچیده را داشته باشند.

     

    دانلود دوره آموزش برنامه نویسی آردوینودوره آموزش آردوینو  (صفر تا 100برد Arduino)

     


  4. مخفی

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

     

     

    ▪️اگر راجع به موضوعی هیچی نمیدونید اول سرچتون بزنید eli5  که خلاصه Explain like I'm 5 یعنی یه جوری توضیح بده انگار 5 سالمه و توضیحات مختصر مفید تو اون زمینه رو میاره

    + این یه ساب ردیت بوده که بعدا گسترش پیدا کرده و جاهای دیگه هم ازش استقبال شده


  5. پیشنهاد هیئت مدیره به مجمع عمومی فوق العاده در خصوص افزایش سرمایه شرکت قند اصفهان - نماد: قصفها


    موضوع:  پیشنهاد هیئت مدیره به مجمع عمومی فوق العاده در خصوص افزایش سرمایه 

    با عنایت به ماده 3 دستورالعمل مراحل زمانی افزایش سرمایه شرکت های ثبت شده نزد سازمان بورس و اوراق بهادار (مصوب 1395/07/17 هیئت مدیرة سازمان بورس و اوراق بهادار و اوراق بهادار) به پیوست گزارش توجیهی هیئت مدیرة به منظور پیشنهادافزایش سرمایه از مبلغ 195,000,000,000 ریال به مبلغ 10,557,979,387,682 ریال از محل مازاد تجدید ارزیابی دارایی ها به منظور بهبود ساختار مالي که در تاریخ 1399/11/12 به تصویب هیئت مدیره رسیده و جهت اظهارنظر به حسابرس و بازرس قانونی ارسال شده، ارائه می گردد.اظهارنظر بازرس قانونی نسبت به گزارش مذکور متعاقبا اطلاع رسانی می گردد.
    بدیهی است انجام افزایش سرمایة یادشده منوط به موافقت سازمان بورس و اوراق بهادار و تصویب مجمع عمومی فوق العاده می باشد.

     

     


  6. مخفی

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

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

     

     

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

     


  7. مخفی

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

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

     

    دانلود دوره آموزش سریع محاسبات ریاضی


  8. سلام خدمت کاربران عزیز تا حالا شده هنگاه استفاده از تابع Curl به خطای SSL certificate problem: unable to get local issuer certificate بربخورید؟

    اگر راه حل برطرف کردن این مشکل را نمی دانید ، در این مطلب میخواهم به شما آموزش بدهم.برای این کار کافیست فایل ضمیمه را دانلود کنید.

    سپس دستور زیر را به فایل PHP.ini خود اضافه کنید

    مخفی

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

    البته curl.cainfo معمولاً در فایل وجود دارد. مسیر را با توجه به نسخه php مورد استفاده خودتان می باشد.

     

     

    مخفی

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


  9. مخفی

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

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

    فهرست سردرس های مطرح شده در این دوره آموزش، در ادامه آمده اند:
    • درس یکم: ورود و ویرایش فرمول
      • ورود و ویرایش فرمول
      • اولویت های محاسباتی
      • خطاهای محاسباتی
      • فرمول های دو بعدی و سه بعدی و چهار بعدی
      • استفاده از آدرس مطلق و نسبی و ترکیبی
      • نام‌ گذاری و فواید استفاده از آن
      • فرمول های برداری و کاربردهای آن
    • درس دوم: توابع در اکسل
      • معرفی انواع توابع در اکسل
      • شیوه های مختلف ورود تابع
        • استفاده از نوار فرمول
        • استفاده از کادر Formula
        • ترکیب فرمول و تابع
      • چند تابع‌ پرکاربرد (ریاضی و آماری)
        • تابع جمع (Sum)
        • میانگین (Average-Averagea)
        • حداکثر(Maxa-Max)
        • حداقل (Mina-Min)
        • شمارش (Count-Countblank-Counta)
        • تابع گرد کردن (Round-Roundup-Rounddown-Celling-Floor)
        • تابع تو در تو (Round , Sum و یا Round , PI)
        • تابع شرطی IF, And,Or
    • درس سوم: توابع خاص
      • توابع مرتبط با متن
        • Left-Right-Mid-Len-Substitute
      • توابع مرتبط با تاریخ
        • Now-Today-Day-Month-Year-Hour-Minute-Second-Weekday
      • توابع مرتبط با جمع‌ بندی و شمارش شرطی
        • Countifs-Sumifs-Averageifs-Dsum-Dcount-Daverage
      • توابع جستجو و مرجع
        • Vlookup-Hlookup-lookup-match-index
      • توابع محاسبات مالی
        • PMT-PPMT-IPMT-PV-NperFV-Rate-SLN-DB-DDB

     

     

    دانلود دوره آموزشی در کانال تلگرام


  10. مخفی

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

     

    بی راه نگفته ایم اگر بگوییم، ابزار Adobe Photoshop Lightroom بسیاری از عکاسان جدید را سردرگم می کند. احتمالاً پیش خود می پرسید که این اپلیکیشن نام فوتوشاپ را یدک می کشد اما در حقیقت نرم افزاری با قابلیت های فوتوشاپ نیست. به طور کلی باید بگوییم که Lightroom اپلیکیشنی مهم برای عکاسان است.

    لایت روم هم اکنون روی پلتفرم های ویندوز، مک، اندروید و iOS (هرچند نسخه ی دیوایس های همراه آن چنان قوی نیستند) به عنوان یک برنامه ی مستقل با قیمتی معادل 149 دلار در دسترس است. همچنین قادر هستید این نرم افزار را تحت برنامه ی Creative Cloud Photography Plan شرکت ادوبی با هزینه ی ماهانه 9.99 دلار تهیه نمایید.

    لایت روم از تصاویر شما فهرست های مختلف می سازد

    اولین و مهم ترین چیزی که باید در مورد این ابزار بدانید این است که لایت روم برای هر عکسی که می گیرید یک فهرست (کاتالوگ) به حساب می آید. لایت روم شباهت کمی به فوتوشاپ داشته و بیشتر مشابه Picasa یا Apple Photos عمل می کند و برای عکاسان حرفه ای و یا آماتورهایی که به صورت جدی به دنبال این حرفه هستند، ساخته شده است.

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

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

    در ادامه قادر هستید، عکس های قابل قبول و یا رد شده را علامت بزنید و به آن ها امتیاز دهید. پس از آن نیز می توانید به فیلتر کردن این تصاویر به وسیله امتیاز و یا فرا داده دیگر بپردازید. این به شما کمک می کند تا به عنوان مثال با استفاده از فیلترهای 5 ستاره و سال 2016 بهترین تصاویری که طی سال گذشته به ثبت رسانده اید را ببینید.

    لایت روم از ابزار قدرتمند فهرست نویسی برخوردار است؛ این در حالی است که اپلیکیشن های دیگر مثل Picasa یا Apple Photos تنها به ذخیره کردن تصاویر می پردازند و گزینه های زیادی را برای ذخیره سازی، دسته بندی و پیدا کردن عکس های دلخواه در اختیار شما قرار نمی دهند.

    برای مثال در Apple Photos تنها می توانید تصاویر مورد علاقه ی خود را مشخص کنید و هیچ راهی برای امتیاز دادن به آن ها و یا علامت گذاری موارد رد شده وجود ندارد. اگر عکس های زیادی می گیرید، لایت روم ابزار مناسبی برای پیگیری آن ها محسوب می شود.

    و .....

     

     

    دانلود دوره آموزشی در کانال تلگرام

     

     


  11. منظور از چکیده‌سازی داده فراهم کردن حداقل اطلاعات برای دنیای خارج و مخفی‌سازی جزئیات پس زمینه است، یعنی اطلاعات مورد نیاز بدون ارائه جزئیات نمایش داده می‌شود.

    چکیده‌سازی داده یک تکنیک برنامه‌نویسی و طراحی است که مبتنی بر جداسازی رابط میانجی (interface) از پیاده‌سازی (implementation) می‌باشد.

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

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

    در ++C، کلاس‌ها سطح بالایی از چکیده‌سازی داده را فراهم می‌کنند. این کلاس‌ها توابع عمومی‌ کافی را برای دنیای خارج از خود فراهم کرده تا قابلیت‌های اشیا نمایان شده و امکان دستکاری داده‌های شی مثل وضعیت (state)، بدون اطلاع از نحوه‌ی پیاده‌سازی درونی کلاس فراهم گردد.

    برای مثال، برنامه شما می‌تواند برای مرتب‌سازی، تابع ()sort را بدون اطلاع از الگوریتم به کار رفته در آن فراخوانی کند. در حقیقت، پیاده‌سازی پشت پرده این تابع مرتب‌ساز، با انتشار نسخه‌های کتابخانه آن ممکن است تغییر کند، اما تا زمانی‌که رابط آن ثابت بماند، فراخوانی تابع شما کماکان کار می‌کند.

    در ++C از کلاس‌ها  برای تعریف چکیده‌سازی نوع داده (Abstract Data Type- ADT) استفاده می‌شود. می‌توان از شی cout از کلاس ostream برای استریم کردن داده به خروجی استاندارد استفاده کرد، مانند مثال زیر:

    مخفی

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

    در اینجا، نیازی نیست که بدانید cout چگونه متن را روی صفحه نمایش نشان می‌دهد. تنها چیزی که باید بدانید رابط عمومی ‌آن است و بنابراین هیچ محدودتی برای تغییر در پیاده‌سازی پشت پرده cout بوجود نمی‌آید.

    برچسب‌های دسترسی (Access Label) منجر به چکیده‌سازی می‌شود

    در ++C، با استفاده از برچسب‌های دسترسی برای یک کلاس رابط چکیده تعریف می‌کنیم. یک کلاس می‌تواند تعدادی برچسب دسترسی داشته باشد یا هیچ برچسبی نداشته باشد.

    • اعضای تعریف شده در یک کلاس با برچسب عمومی ‌از همه بخش‌های برنامه قابل دسترسی هستند. نمای چکیده شده یک نوع داده از طریق اعضای عمومی‌اش تعریف می‌شود.
    • اعضای تعریف شده در یک کلاس با برچسب خصوصی، برای کدهای استفاده کننده قابل دسترسی نیستند. بخش‌های خصوصی کلاس، پیاده‌سازی آن را از دید کاربران مخفی می‌کند.

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

    مزایای چکیده‌سازی داده

    چکیده‌سازی داده دو مزیت مهم مهیا می‌سازد.

    • بخش‌های درونی کلاس را از اشتباهات سهوی کاربر، که منجر به خراب کردن وضعیت شی شود در امان نگه می‌دارد.
    • پیاده‌سازی تابع در طول زمان و در پاسخ به مقتضیات یا گزارش خرابی‌ها ممکن است تکامل پیدا کند.

    با تعریف داده‌های عضو در بخش‌های خصوصی کلاس، نویسنده کلاس برای تغییر در داده‌ها آزادی عمل پیدا می‌کند. اگر پیاده‌سازی تغییر کند، برای مشاهده تاثیرات این تغییر، تنها کافی است که کد کلاس آزمایش شود. اگر داده‌ها عمومی‌ باشند، آنگاه ممکن است هر تابعی که مستقیماً به این داده‌های عضو دسترسی دارد  نیز از کار بیفتد.

    مثال چکیده‌سازی داده

    هر برنامه ++Cای که یک کلاس را با اعضای خصوصی و عمومی ‌پیاده‌سازی کند، نمونه ای از چکیده‌سازی داده می‌باشد. مثال زیر را ملاحظه کنید.

    مخفی

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

    با اجرای کد فوق، خروجی زیر حاصل می‌شود.

    مخفی

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

     کلاس بالا دو عدد را باهم جمع کرده و حاصل جمع را برمی‌گرداند. اعضای عمومی، addNum و getTotal رابط‌های میانجی به دنیای خارج از کلاس بوده و کاربر برای استفاده از کلاس باید با آنها آشنا شود. عضو خصوصی total چیزی است که کاربر نیازی به آشنایی با آن ندارد، اما برای عملکرد صحیح کلاس ضروری است.

    استراتژی طراحی

    چکیده‌سازی کد را به دو بخش پیاده‌سازی و رابط تقسیم می‌کند. بنابراین هنگام طراحی اجزا، باید رابط را از پیاده‌سازی مستقل نگه دارید تا اگر تغییری در پیاده‌سازی ایجاد شد، رابط کماکان سالم باقی ماند.

    در چنین شرایطی، برنامه‌هایی که از رابط استفاده می‌کنند متاثر از تغییر نخواهند شد و تنها نیازمند یک کامپایل مجدد هستند.

     

     


  12. یک اینترفیس (interface) رفتار یا قابلیت‌های یک کلاس ++C را بدون درنظرگرفتن هیچ نوع پیاده‌سازی برای آن توصیف می‌کند.

    اینترفیس‌های ++C با استفاده از کلاس‌های انتزاعی (abstract class) پیاده می‌شوند. این کلاس‌های انتزاعی را نباید با مفهوم ‌چکیده‌سازی که برای جداسازی جزئیات پیاده‌سازی از داده‌ها به کار رفت اشتباه بگیریم.

    یک کلاس را می‌توان با اعلان حداقل یک تابع مجازی محض در آن، انتزاعی کرد. یک تابع مجازی با قرادادن «0=» در هنگام اعلان آن مشخص می‌شود.

    مخفی

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

    هدف از ایجاد کلاس انتزاعی (معمولاً با ABC مشخص می‌شود)، ایجاد یک کلاس پایه مناسب است تا دیگر کلاس‌ها از آن ارث ببرند. نمی‌توان از کلاس‌های انتزاعی شی نمونه گرفت و تنها به عنوان اینترفیس عمل می‌کنند. تلاش برای گرفتن یک شی نمونه از یک کلاس انتزاعی به خطای کامپایل منجر می‌شود.

    بنابراین، اگر قرار باشد که از زیرکلاس یک کلاس ABC نمونه گرفته شود، آن زیرکلاس باید همه توابع مجازی را پیاده‌سازی کند، یعنی باید اینترفیس ABC را اجرا کند. اگر یک کلاس مشتق شده در روند رونویسی (override) تابع مجازی محض با مشکل مواجه شود، آنگاه هرگونه نمونه‌گیری شی از آن به خطای کامپایل منجر می‌شود.

    کلاس‌هایی که بتوان از آنها نمونه‌گیری انجام داد کلاس‌های عینی (concrete class) نامیده می‌شوند.

    مثال‌هایی از تابع انتزاعی

    در مثال زیر کلاس والد، یک اینترفیس برای کلاس پایه فراهم کرده تا تابعی به نام ()getArea را پیاده کند.

    مخفی

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

    با اجرای کد فوق، خروجی زیر حاصل می‌شود.

    مخفی

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

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

    استراتژی طراحی

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

    قابلیت‌های (یعنی توابع عمومی) فراهم آمده از طریق این اپلیکیشن‌های خارجی، همان توابع مجازی محض موجود در کلاس پایه انتزاعی می‌باشند. پیاده‌سازی این توابع محض در هرکلاس مشتق شده، بسته به نوع اپلیکیشن می‌تواند متفاوت باشد.

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

     

     


  13. یک مثال برای شروع

    فرض کنید روی یک بازی (جنگی) کار می‌کنیم. کلاس Weapon را ایجاد می‌کنیم و دو کلاس Bomb و Gun را از آن مشتق می‌کنیم تا ویژگی‌های این سلاح‌ها را در آن‌ها بارگذاری کنیم:

    مخفی

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

    خروجی

    مخفی

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

    سه شیء اشاره‌گر به نام‌های w ،b و g را به ترتیب برای کلاس‌های Weapon ،Bomb و Gun تعریف می‌کنیم. همچنین تابع عضو ()loadFeatures را برای هر شیء با استفاده از کدهای زیر فراخوانی می‌کنیم:

    مخفی

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

    تا این جا همه چیز به خوبی کار می‌کند، با این حال پروژه بازی ما رفته‌رفته بزرگ‌تر می‌شود و تصمیم می‌گیریم کلاس مجزای Loader را برای بارگذاری ویژگی‌های سلاح‌ها ایجاد کنیم. این کلاس Loader ویژگی‌های دیگری از سلاح‌ها را بسته به نوع سلاح انتخابی بارگذاری می‌کند.

    مخفی

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

    ()loadFeatures ویژگی یک سلاح خاص را بارگذاری می‌کند.

    پیاده‌سازی کلاس Loader

    مخفی

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

    خروجی

    مخفی

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

    پیاده‌سازی ما درست به نظر می‌رسد؛ اما ویژگی‌های سلاح‌ها 4 بار بارگذاری شده است. دلیل این مسئله آن است که در ابتدا شیء سلاح w به شیء کلاس b (یا Bomb) اشاره می‌کرد و تلاش کرده‌ایم ویژگی‌های شیء Bomb را با ارسال آن به تابع ()loadFeatures با استفاده از شیء اشاره‌گر l (کلاس Loader) بارگذاری کنیم. به طور مشابه تلاش کرده‌ایم ویژگی‌های شیء Gun را نیز بارگذاری کنیم، اما تابع ()loadFeatures کلاس Loader اشاره‌گر به شیء کلاس Weapon را به عنوان آرگومان می‌گیرد:

    مخفی

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

    به همین جهت است که ویژگی‌های weapon 4 بار بارگذاری می‌شوند. برای حل این مشکل باید تابعی از کلاس مبنا (کلاس Weapon) به صورت مجازی با استفاده از کلیدواژه virtual بسازیم.

    مخفی

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

    مثال: استفاده از تابع مجازی برای حل مشکل

    مخفی

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

    خروجی

    مخفی

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

    همچنین توجه کنید که تابع l->loadFeatures(w) تابع کلاس‌های مختلفی را بسته به این که شیء l به چه چیزی اشاره می‌کند فرامی‌خواند.

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

    مخفی

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

    و در تابع ()main به صورت زیر عمل می‌کنیم:

    مخفی

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

    لازم به ذکر است که ما برای بارگذاری ویژگی‌های چاقو، هیچ چیز را در کلاس Loader تغییر نداده‌ایم.

    کلاس مجرد در ++C و تابع مجازی خالص

    هدف برنامه‌نویسی شیءگرا، تقسیم کردن یک مسئله پیچیده به مجموعه‌های کوچک‌تر است. بدین ترتیب می‌توانیم مسئله را به روشی بهینه درک کرده و حل کنیم.

    برخی اوقات استفاده از وراثت صرفاً به منظور بصری‌سازی بهتر مسئله مفید خواهد بود. در ++C می‌توان یک کلاس مجرد ایجاد کرد که امکان وهله‌سازی از آن وجود نداشته باشد، یعنی نمی‌توان شیئی از روی این کلاس مجرد ساخت. با این حال می‌توان از آن کلاس دیگری مشتق کرد و شیئی را از آن کلاس مشتق شده وهله‌سازی نمود.

    کلاس‌های مجرد کلاس‌های مبنایی هستند که وهله‌سازی نمی‌شوند. یک کلاس شامل تابع مجازی خالص به نام کلاس مجرد نامیده می‌شود.

    تابع مجازی خالص

    یک تابع مجازی که اعلان آن با =0 پایان یابد یک تابع مجازی خالص است. به مثال زیر توجه کنید:

    مخفی

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

    در این کد تابع مجازی به صورت زیر است:

    مخفی

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

    و کلاس Weapon یک کلاس مجرد است.

    مثال: کلاس مجرد و تابع مجازی خالص

    مخفی

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

    خروجی

    مخفی

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

    در این برنامه، تابع مجازی خالص زیر درون کلاس Shape تعریف شده است:

    مخفی

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

    یک نکته که باید اشاره کنیم این است که تابع مجازی خالص کلاس مبنا باید در کلاس مشتق شده باطل (Override) شود. اگر این کار صورت نگیرد، کلاس مشتق شده خود به یک کلاس مجرد تبدیل می‌شود. برای مطالعه بخش بعدی روی لینک زیر کلیک کنید:

×
×
  • اضافه کردن...