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

Mostafa

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

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

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

  • روز های برد

    10

تمامی مطالب نوشته شده توسط Mostafa

  1. Mostafa

    لایسنس رایگان آنتی ویروس نود 32

    HXWP-X9UX-SBV5-MEK4-45MP 14/01/2022 E9WM-XRK3-59MH-EXVR-3382 06/02/2024 X2FB-XUSD-FTAU-96B9-R632 20/04/2021 TBKT-XURE-AN99-CNTE-GBM2 20/04/2021 XNFP-XX43-9TKK-HPR9-JT9R 20/04/2021 NS5S-X8RA-H36U-UMHX-XW6U 20/04/2021 5A4M-XWJX-6WRE-MS49-2PS6 19/04/2021 VS7M-XTS8-5TNK-FS3V-657W 19/04/2021 6B47-XVUJ-TSPT-J4TJ-K4XF 19/04/2021 HSBG-XSSU-GF42-9KB6-4XDK 19/04/2021 4MT5-XD25-VHBF-8GTF-57V9 19/04/2021 M3MX-XDBT-9PG8-ETPC-8NUA 19/04/2021 TG6N-X5P5-BV5P-JVPG-B8U4 19/04/2021
  2. Mostafa

    لایسنس رایگان آنتی ویروس نود 32

    Eset Smart Security Premium /Internet Security /Antivirus / Mobile Security Full (1 Device) EXPIRATION DATE: 06/02/2022 UC63-XVHK-2JG5-BR7F-SDUC Eset Endpoint Security /Internet Security /Antivirus /Mobile Security 60 DAYS (99 DEVICES) EXPIRATION DATE: 19/04/2021 FFNP-X9FW-PBGG-FE6K-AETT RFK4-XRUG-JMKV-DXD4-CU5K FBEA-XACG-4V8J-BMN8-EE5T KM8G-XK8G-DUN5-GS99-ATED V8HB-XWK8-HREJ-SC2X-S23J Eset Smart Security Premium 30 DAYS (1 DEVICE) EXPIRATION DATE: 19/03/2021 67HU-XGF6-P385-SCDB-SXMM VA9C-XH7T-U5EJ-4CUP-P3CM 9DKC-XHR3-JU73-28FR-TJXE HEV7-X8B8-EACT-3MKG-CPFG XJGJ-XMP8-83RN-NGSK-4MM5 CFG6-XFSN-V6JD-B67T-9C4X HBP6-XG67-R9EE-GHJF-EEB9 J28P-X5XC-8G6T-RR27-C8V2 T5RA-X695-585V-ETE9-DP8K UPU6-XUNM-582R-P4HM-C2T7
  3. Mostafa

    لایسنس رایگان آنتی ویروس نود 32

    ESET NOD32 internet security license key V22K-XKXF-J8V9-H4N3-SS5P GBCC-XPXA-AVSA-2GGC-64GF 4CKG-XCVN-AE76-C9B5-2M5H K5ET-XRCK-G6BH-M42H-W6RE 8BBW-X6RH-D6EG-WRJA-37XV HK3V-X3B4-RBP4-6JU7-B3CB K5ET-XRCK-G6BH-M42H-W6RE KBPW-XJHP-47MG-BK98-5CSB S3ES-XD7E-DHUB-PEBV-FMRD WPHB-XUTM-K2ER-9M6F-XXAS EXS7-XAWX-S2W3-BGVJ-PCS5 KBPW-XJHP-47MG-BK98-5CSB D97D-X9BC-HU5M-RXSH-XGWC GKRH-XETH-R2UB-U2NH-DNJ6 X50 GPSR-XHHH-VE83-EURG-ANN8 X50 9RB5-XGTX-GBGM-WSWS-H7PN X50 34MS-X974-HMPB-XT7A-5FR5 X50 D79K-X9AP-8R2W-XGSR-7S5J X50 HDET-XTRX-C98B-57U6-8FK2 X50 FX83-XBWJ-6TDB-FMPV-6GFE X50 G9F8-XT2X-VGPU-8CK9-P2WF X50 5VHV-X4CW-C7AC-M9TP-B9M2 X50 RHJV-X68G-WNDG-73BH-5WMG X50 H5R4-XM9R-UDJJ-9K3G-66B3 X50 TH5P-X6DG-WCW4-UB9G-DCBW X50 HUGJ-X8KP-7KAS-MGXD-VMPX X50 MCN7-XJBW-2AHE-SDRX-4EKS X50 XF8M-X7D3-SFXM-C4HS-WD38 X50 W5MP-XMW6-4SAN-FAXT-CUNJ X50 TKV5-X6N4-EBKC-6EA4-F4H9 X50 U4RT-X4GT-TKAR-R2RD-AMP5 X50 D97D-X9BC-HU5M-RXSH-XGWC X50 GKRH-XETH-R2UB-U2NH-DNJ6 X50 GPSR-XHHH-VE83-EURG-ANN8 X50 9RB5-XGTX-GBGM-WSWS-H7PN X50 34MS-X974-HMPB-XT7A-5FR5 X50 D79K-X9AP-8R2W-XGSR-7S5J X50 HDET-XTRX-C98B-57U6-8FK2 X50 FX83-XBWJ-6TDB-FMPV-6GFE X50 G9F8-XT2X-VGPU-8CK9-P2WF X50 5VHV-X4CW-C7AC-M9TP-B9M2 X50 RHJV-X68G-WNDG-73BH-5WMG X50 H5R4-XM9R-UDJJ-9K3G-66B3 X50 TH5P-X6DG-WCW4-UB9G-DCBW X50 HUGJ-X8KP-7KAS-MGXD-VMPX X50 MCN7-XJBW-2AHE-SDRX-4EKS X50 XF8M-X7D3-SFXM-C4HS-WD38 X50 W5MP-XMW6-4SAN-FAXT-CUNJ X50 TKV5-X6N4-EBKC-6EA4-F4H9 X50 U4RT-X4GT-TKAR-R2RD-AMP5 X50
  4. سلام خدمت کاربران عزیز ، از این پس تنها نسخه فارسی افزونه ، قالب ، اسکریپت یا درخواستی کاربران در انجمن قرار داده می شود و نسخه اصلی آنها درکانال تلگرام سایت قرار می گیرد.
  5. آردوینو بردهایی هستند که براساس برخی از میکروکنترلرها ساخته شده اند و امکان احساس کنترل فضای بیشتری از دنیای فیزیکی را فراهم می کند. در اصل یک پلتفرم متن باز برای نمونه سازی و انجام پروژه های الکترونیکی به شمار می رود. هدف این دوره ، آموزش به شکلی است که چه کاربران مبتدی که دانش کافی از برنامه نویسی ندارند و چه برنامه نویسان حرفه ای که با پلتفرم آردوینو آشنایی دارند، به کمک این ماژول امکان ساخت مجموعه های پیچیده را داشته باشند. دانلود دوره آموزش برنامه نویسی آردوینودوره آموزش آردوینو  (صفر تا 100برد Arduino)
  6. Mostafa

    لایسنس رایگان آنتی ویروس نود 32

    Username: EAV-0286132539 Password: 84d9bmhk6x License Key: XBRC-X4XD-HNAB-BXPA-VRF9 Expiration: 07/02/2021 Username: EAV-0286132540 Password: sh56mvn72s License Key: VDXC-XRGV-FEK2-DHB9-5DDM Expiration: 07/02/2021 Username: EAV-0286132712 Password: bn9xx872ct License Key: JHJC-XBBA-SMS6-BN3C-C89T Expiration: 07/02/2021 Username: EAV-0286133432 Password: rarh4342fu License Key: MNV5-XA98-4JF2-7SFS-RMDW Expiration: 07/02/2021 Username: EAV-0286133436 Password: 8v6s284nre License Key: A5DD-XNP3-N5PU-N9CB-S9XT Expiration: 07/02/2021 Username: EAV-0286133802 Password: rpxaadbef3 License Key: 9BPV-XS28-7PUK-UHK8-JRAB Expiration: 07/02/2021 Username: EAV-0286134137 Password: axsn9mu65j License Key: A2AB-XDPB-MXPR-X38T-9P9E Expiration: 07/02/2021 Username: EAV-0286134511 Password: jjm55vbxas License Key: 54RJ-XBU7-X42A-T6UC-R7DD Expiration: 07/02/2021 Username: EAV-0286134917 Password: j7dtbsmr2x License Key: 47BN-X8BF-F3HE-J95G-XAN4 Expiration: 07/02/2021 Username: EAV-0286135744 Password: mf5a7as8jj License Key: EXHN-XJPB-GJR2-PGB8-GN3P Expiration: 07/02/2021 Username: EAV-0286135747 Password: dsrv8ec25m License Key: 25FJ-X6WE-E2EX-DSJW-KK9J Expiration: 07/02/2021 Username: EAV-0286252085 Password: 65atnmphun License Key: 6B3T-X6HS-PNA3-3AVE-U9R8 Expiration: 08/02/2021 Username: EAV-0286255184 Password: jmdvj6huev License Key: JDDJ-XKRX-CA4A-BTHA-4AD3 Expiration: 09/02/2021
  7. ▪️اگر راجع به موضوعی هیچی نمیدونید اول سرچتون بزنید eli5 که خلاصه Explain like I'm 5 یعنی یه جوری توضیح بده انگار 5 سالمه و توضیحات مختصر مفید تو اون زمینه رو میاره + این یه ساب ردیت بوده که بعدا گسترش پیدا کرده و جاهای دیگه هم ازش استقبال شده
  8. پیشنهاد هیئت مدیره به مجمع عمومی فوق العاده در خصوص افزایش سرمایه شرکت قند اصفهان - نماد: قصفها موضوع: پیشنهاد هیئت مدیره به مجمع عمومی فوق العاده در خصوص افزایش سرمایه با عنایت به ماده 3 دستورالعمل مراحل زمانی افزایش سرمایه شرکت های ثبت شده نزد سازمان بورس و اوراق بهادار (مصوب 1395/07/17 هیئت مدیرة سازمان بورس و اوراق بهادار و اوراق بهادار) به پیوست گزارش توجیهی هیئت مدیرة به منظور پیشنهادافزایش سرمایه از مبلغ 195,000,000,000 ریال به مبلغ 10,557,979,387,682 ریال از محل مازاد تجدید ارزیابی دارایی ها به منظور بهبود ساختار مالي که در تاریخ 1399/11/12 به تصویب هیئت مدیره رسیده و جهت اظهارنظر به حسابرس و بازرس قانونی ارسال شده، ارائه می گردد.اظهارنظر بازرس قانونی نسبت به گزارش مذکور متعاقبا اطلاع رسانی می گردد. بدیهی است انجام افزایش سرمایة یادشده منوط به موافقت سازمان بورس و اوراق بهادار و تصویب مجمع عمومی فوق العاده می باشد.
  9. نیاز ضروری هر فروشگاه یا وب سایت داشتن اپلیکیشن موبایل است که این امر بر تعداد مشتریان می افزاید. برقراری ارتباط بین سرور و هر زبان دیگری موجب می شود تا همه کاربران اپلیکیشن هر زمان و هرجای دنیا به داده های یکسان برنامه دسترسی داشته باشند. در این فرادرس راه های ارتباط با سرور و دیتابیس سمت سرور مورد بررسی قرار می گیرد سپس در ادامه به عنوان نمونه، محصولات یک فروشگاه آنلاین کوچک از سرور دریافت می کند و در نهایت نمایش می دهد. دانلود دوره آموزش ارتباط با دیتابیس سمت سرور در اندروید
  10. در این آموزش به بیان تکنیک هایی پرداخته شده است که با یادگیری آن ها می توان سرعت انجام عملیات ریاضی را افزایش داد. این افزایش سرعت در حل تمرین برای کسب موفقیت در آزمون ها می تواند مفید باشد و علاوه بر آن، شما را از ماشین حساب بی نیاز کند یا در آزمون هایی که اجازه استفاده از ماشین حساب را ندارید، به شما کمک کند. مطالبی را که در این فرادرس جمع آوری کرده ایم به صورت پراکنده در منابع داخلی و خارجی وجود دارند و اکنون با حل مثال های گوناگون در اختیار مخاطبین قرار می گیرند. دانلود دوره آموزش سریع محاسبات ریاضی
  11. Mostafa

    لایسنس رایگان آنتی ویروس نود 32

    8HT8-XG5E-7EGJ-FCS3-2T46 H4HR-X6RP-TSXJ-U9SP-KD4S 9FWT-XAKP-TCB5-53VJ-DCTU PE66-XFMD-8HX9-BSBX-NBRN HMG8-X6VX-XMXK-G63H-TEV9 MPK4-XRFM-B8XE-64NH-PWKR 73KN-XBAA-MJUC-B9FK-JXKX W56E-XB4X-3KAN-GHK2-C9WV 7PMK-XVST-KGCT-X2DB-AVRW 2GJ6-X8BT-CBNB-GRAG-KVF4 B7NS-X7NA-854B-P337-3E9S 5PAT-XUTW-XXMK-76C9-47XC SDX2-XJ4P-6SU8-PXF4-SXNG K8UG-XVDN-R8XB-DF7C-VG8H 7TM4-XH3A-NF9C-H6FS-P7C5 7EX9-XP7D-EKHJ-V6V3-9V84 8ECR-XKPG-BS6V-CM4E-FUE4 52C3-XPTM-P9F5-676R-525W XKRX-XHU2-BUKE-93P7-8J8X BC6S-XFWA-PKDJ-EKPB-D3TU W4RV-XB5S-V86B-79XV-NA78 AEA2-XER7-4B5S-R54A-AWN7 Exp: 22/03/2021
  12. سلام خدمت کاربران عزیز تا حالا شده هنگاه استفاده از تابع Curl به خطای SSL certificate problem: unable to get local issuer certificate بربخورید؟ اگر راه حل برطرف کردن این مشکل را نمی دانید ، در این مطلب میخواهم به شما آموزش بدهم.برای این کار کافیست فایل ضمیمه را دانلود کنید. سپس دستور زیر را به فایل PHP.ini خود اضافه کنید curl.cainfo = "C:/wamp64/bin/php/php7.2.10/cacert.pem" البته curl.cainfo معمولاً در فایل وجود دارد. مسیر را با توجه به نسخه php مورد استفاده خودتان می باشد. cacert.pem
  13. Mostafa

    لایسنس رایگان آنتی ویروس نود 32

    Eset Internet Security / Nod32 Antivirus / Eset Mobile Security Eset Endpoint Security 60 DAYS (99 DEVICES) EXPIRATION DATE: 23/03/2021 8HT8-XG5E-7EGJ-FCS3-2T46 H4HR-X6RP-TSXJ-U9SP-KD4S Eset Internet Security / Nod32 Antivirus / Eset Mobile Security 90 DAYS (1 DEVICE) EXPIRATION DATE: 22/04/2021 KMB3-X9EP-H2KA-WXA8-N3BR K2VB-X9SX-V497-KU5S-JRFF D99P-XTCV-K7P5-BDRD-R6SB G785-XXD9-RSFK-HTMC-VNBC SFRU-XF6P-FFTU-F37W-HBMU D3HB-XJSD-BXK4-2RSG-H7EA N7MD-XUX5-RFVX-TM67-EGW9 JXC3-X232-FU5X-6BTR-W2K6 S4UX-XTNE-AHAG-XXS3-R8VT BUPD-XVBS-9R5A-98X3-V534 Eset Smart Security Premium 30 DAYS (1 DEVICE) EXPIRATION DATE: 21/02/2021 XNPR-XTKV-6HMV-8V5X-83R2 EGEN-XSG7-NGFE-92G6-7J5V S2VS-XAT7-JXNU-B7B6-58V8 K9CJ-XS2J-RXK3-4WVC-ME3U G5AB-X4SH-NFEC-VAFT-ETFS 59JG-XKX6-FXP3-U75F-7F2X 73M3-X3UM-DTH5-EM6J-83U3 DV6J-XWKF-J2UC-AF42-72RK VF26-XEXA-387D-A2FS-AMTB D8C9-XFXU-DW6B-SWVN-3RAX
  14. Mostafa

    درخواست قالب

    این یعنی بسته اشتباهی را آپلود کردید ، فایل فشرده را استخراج کنید و دقیقاً پوشه قالب را فشرده کنید که style.css در root آن باشد و آن را نصب کنید
  15. Mostafa

    درخواست قالب

    میفرمایید برای نصب چکار کردید؟
  16. Mostafa

    درخواست قالب

    شما می توانید قالب را از اینجا دانلود نمایید و رمز فایل فشرده دامنه سایت می باشد.
  17. Mostafa

    لایسنس رایگان آنتی ویروس Kaspersky

    در این موضوع می توانید لایسنس های رایگان آنتی ویروس کاسپر اسکی را با دوستان خود به اشتراک بگذارید. Kaspersky Antivirus 30 days: YZWEN-98MCX-Z9FV1-9TUSW BKEM2-5FKHA-EP2U8-1EZ5M KIS Android 45 days: JAPXZ-9G9EJ-CSUV2-7YQUS
  18. اکسل به عنوان یک ابزار محاسباتی، قادر است به کمک توابعی که در آن قرار دارد، کار نوشتن پیچیده ترین فرمول ها را ساده کند. آگاهی از این قدرت مخفی اکسل، در وقت و هزینه بسیار صرفه جویی خواهد کرد. فهرست سردرس های مطرح شده در این دوره آموزش، در ادامه آمده اند: درس یکم: ورود و ویرایش فرمول ورود و ویرایش فرمول اولویت های محاسباتی خطاهای محاسباتی فرمول های دو بعدی و سه بعدی و چهار بعدی استفاده از آدرس مطلق و نسبی و ترکیبی نام‌ گذاری و فواید استفاده از آن فرمول های برداری و کاربردهای آن درس دوم: توابع در اکسل معرفی انواع توابع در اکسل شیوه های مختلف ورود تابع استفاده از نوار فرمول استفاده از کادر 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 دانلود دوره آموزشی در کانال تلگرام
  19. Mostafa

    دانلود دوره آموزشی Adobe Lightroom

    بی راه نگفته ایم اگر بگوییم، ابزار Adobe Photoshop Lightroom بسیاری از عکاسان جدید را سردرگم می کند. احتمالاً پیش خود می پرسید که این اپلیکیشن نام فوتوشاپ را یدک می کشد اما در حقیقت نرم افزاری با قابلیت های فوتوشاپ نیست. به طور کلی باید بگوییم که Lightroom اپلیکیشنی مهم برای عکاسان است. لایت روم هم اکنون روی پلتفرم های ویندوز، مک، اندروید و iOS (هرچند نسخه ی دیوایس های همراه آن چنان قوی نیستند) به عنوان یک برنامه ی مستقل با قیمتی معادل 149 دلار در دسترس است. همچنین قادر هستید این نرم افزار را تحت برنامه ی Creative Cloud Photography Plan شرکت ادوبی با هزینه ی ماهانه 9.99 دلار تهیه نمایید. لایت روم از تصاویر شما فهرست های مختلف می سازد اولین و مهم ترین چیزی که باید در مورد این ابزار بدانید این است که لایت روم برای هر عکسی که می گیرید یک فهرست (کاتالوگ) به حساب می آید. لایت روم شباهت کمی به فوتوشاپ داشته و بیشتر مشابه Picasa یا Apple Photos عمل می کند و برای عکاسان حرفه ای و یا آماتورهایی که به صورت جدی به دنبال این حرفه هستند، ساخته شده است. ابزار شرکت ادوبی برای کمک به وارد کردن، پردازش، بررسی و ذخیره ی ده ها هزار عکس طراحی شده است. هر زمان که عکس جدیدی ثبت کردید، به راحتی آن را از داخل دوربین و یا کارت SD وارد فهرست لایت روم خود کنید. این تصاویر به صورت طبیعی روی هارد دیسک تان ذخیره می شوند و می توانید از طریق برنامه های دیگر نیز به آن ها دسترسی داشته باشید. در حالی که مشغول وارد کردن عکس ها هستید، قادر خواهید بود کلمات کلیدی، عنوان، شرح تصاویر، نام مدل و دیگر اطلاعات مورد نیاز را به این تصاویر اضافه کنید. پس از آن که عکس هایتان را با موفقیت وارد این نرم افزار کردید، لایت روم مرور تصاویر و انتخاب بهترین عکس های ثبت شده را برای شما ساده تر می کند. در ادامه قادر هستید، عکس های قابل قبول و یا رد شده را علامت بزنید و به آن ها امتیاز دهید. پس از آن نیز می توانید به فیلتر کردن این تصاویر به وسیله امتیاز و یا فرا داده دیگر بپردازید. این به شما کمک می کند تا به عنوان مثال با استفاده از فیلترهای 5 ستاره و سال 2016 بهترین تصاویری که طی سال گذشته به ثبت رسانده اید را ببینید. لایت روم از ابزار قدرتمند فهرست نویسی برخوردار است؛ این در حالی است که اپلیکیشن های دیگر مثل Picasa یا Apple Photos تنها به ذخیره کردن تصاویر می پردازند و گزینه های زیادی را برای ذخیره سازی، دسته بندی و پیدا کردن عکس های دلخواه در اختیار شما قرار نمی دهند. برای مثال در Apple Photos تنها می توانید تصاویر مورد علاقه ی خود را مشخص کنید و هیچ راهی برای امتیاز دادن به آن ها و یا علامت گذاری موارد رد شده وجود ندارد. اگر عکس های زیادی می گیرید، لایت روم ابزار مناسبی برای پیگیری آن ها محسوب می شود. و ..... دانلود دوره آموزشی در کانال تلگرام
  20. منظور از چکیده‌سازی داده فراهم کردن حداقل اطلاعات برای دنیای خارج و مخفی‌سازی جزئیات پس زمینه است، یعنی اطلاعات مورد نیاز بدون ارائه جزئیات نمایش داده می‌شود. چکیده‌سازی داده یک تکنیک برنامه‌نویسی و طراحی است که مبتنی بر جداسازی رابط میانجی (interface) از پیاده‌سازی (implementation) می‌باشد. اجازه دهید با یک مثال از زندگی واقعی ادامه دهیم، یک تلویزیون را تصور کنید که می‌توان آن را روشن یا خاموش کرد، کانال را عوض کرد، صدا را تنظیم کرده و اجزای خارجی مانند بلندگو، VCR و پخش کننده DVD را به آن متصل کرد، اما شما از جزئیات درونی آن هیچ اطلاعی ندارید، یعنی اطلاع ندارید که چگونه سیگنال‌ها را از کابل یا هوا دریافت کرده، چگونه این سیگنال‌ها را منتقل می‌کند و در نهایت بر روی صفحه نمایش می‌دهد. بنابراین، می‌توان گفت که تلویزیون به وضوح پیاده‌سازی داخلی‌اش را از رابط خروجی‌اش جدا کرده و شما قادر هستید از رابط آن مانند دکمه روش/خاموش، عوض کردن کانال و کنترل صدا، بدون هیچ دانشی از جزئیات درونی‌اش استفاده کنید. در ++C، کلاس‌ها سطح بالایی از چکیده‌سازی داده را فراهم می‌کنند. این کلاس‌ها توابع عمومی‌ کافی را برای دنیای خارج از خود فراهم کرده تا قابلیت‌های اشیا نمایان شده و امکان دستکاری داده‌های شی مثل وضعیت (state)، بدون اطلاع از نحوه‌ی پیاده‌سازی درونی کلاس فراهم گردد. برای مثال، برنامه شما می‌تواند برای مرتب‌سازی، تابع ()sort را بدون اطلاع از الگوریتم به کار رفته در آن فراخوانی کند. در حقیقت، پیاده‌سازی پشت پرده این تابع مرتب‌ساز، با انتشار نسخه‌های کتابخانه آن ممکن است تغییر کند، اما تا زمانی‌که رابط آن ثابت بماند، فراخوانی تابع شما کماکان کار می‌کند. در ++C از کلاس‌ها برای تعریف چکیده‌سازی نوع داده (Abstract Data Type- ADT) استفاده می‌شود. می‌توان از شی cout از کلاس ostream برای استریم کردن داده به خروجی استاندارد استفاده کرد، مانند مثال زیر: #include <iostream> using namespace std; int main() { cout << "Hello C++" <<endl; return ; } در اینجا، نیازی نیست که بدانید cout چگونه متن را روی صفحه نمایش نشان می‌دهد. تنها چیزی که باید بدانید رابط عمومی ‌آن است و بنابراین هیچ محدودتی برای تغییر در پیاده‌سازی پشت پرده cout بوجود نمی‌آید. برچسب‌های دسترسی (Access Label) منجر به چکیده‌سازی می‌شود در ++C، با استفاده از برچسب‌های دسترسی برای یک کلاس رابط چکیده تعریف می‌کنیم. یک کلاس می‌تواند تعدادی برچسب دسترسی داشته باشد یا هیچ برچسبی نداشته باشد. اعضای تعریف شده در یک کلاس با برچسب عمومی ‌از همه بخش‌های برنامه قابل دسترسی هستند. نمای چکیده شده یک نوع داده از طریق اعضای عمومی‌اش تعریف می‌شود. اعضای تعریف شده در یک کلاس با برچسب خصوصی، برای کدهای استفاده کننده قابل دسترسی نیستند. بخش‌های خصوصی کلاس، پیاده‌سازی آن را از دید کاربران مخفی می‌کند. هیچ محدودیتی بر تعداد استفاده از یک برچسب دسترسی وجود ندارد. هر برچسب دسترسی، سطح دسترسی عضو تعریف شده را مشخص می‌کند.سطح دسترسی تعیین شده، تا زمان نوشتن برچسب دسترسی بعدی یا رسیدن به آکلاد بسته، معتبر باقی می‌ماند. مزایای چکیده‌سازی داده چکیده‌سازی داده دو مزیت مهم مهیا می‌سازد. بخش‌های درونی کلاس را از اشتباهات سهوی کاربر، که منجر به خراب کردن وضعیت شی شود در امان نگه می‌دارد. پیاده‌سازی تابع در طول زمان و در پاسخ به مقتضیات یا گزارش خرابی‌ها ممکن است تکامل پیدا کند. با تعریف داده‌های عضو در بخش‌های خصوصی کلاس، نویسنده کلاس برای تغییر در داده‌ها آزادی عمل پیدا می‌کند. اگر پیاده‌سازی تغییر کند، برای مشاهده تاثیرات این تغییر، تنها کافی است که کد کلاس آزمایش شود. اگر داده‌ها عمومی‌ باشند، آنگاه ممکن است هر تابعی که مستقیماً به این داده‌های عضو دسترسی دارد نیز از کار بیفتد. مثال چکیده‌سازی داده هر برنامه ++Cای که یک کلاس را با اعضای خصوصی و عمومی ‌پیاده‌سازی کند، نمونه ای از چکیده‌سازی داده می‌باشد. مثال زیر را ملاحظه کنید. #include <iostream> using namespace std; class Adder { public: // constructor Adder(int i = ) { total = i; } // interface to outside world void addNum(int number) { total += number; } // interface to outside world int getTotal() { return total; }; private: // hidden data from outside world int total; }; int main() { Adder a; a.addNum(10); a.addNum(20); a.addNum(30); cout << "Total " << a.getTotal() <<endl; return ; } با اجرای کد فوق، خروجی زیر حاصل می‌شود. Total 60 کلاس بالا دو عدد را باهم جمع کرده و حاصل جمع را برمی‌گرداند. اعضای عمومی، addNum و getTotal رابط‌های میانجی به دنیای خارج از کلاس بوده و کاربر برای استفاده از کلاس باید با آنها آشنا شود. عضو خصوصی total چیزی است که کاربر نیازی به آشنایی با آن ندارد، اما برای عملکرد صحیح کلاس ضروری است. استراتژی طراحی چکیده‌سازی کد را به دو بخش پیاده‌سازی و رابط تقسیم می‌کند. بنابراین هنگام طراحی اجزا، باید رابط را از پیاده‌سازی مستقل نگه دارید تا اگر تغییری در پیاده‌سازی ایجاد شد، رابط کماکان سالم باقی ماند. در چنین شرایطی، برنامه‌هایی که از رابط استفاده می‌کنند متاثر از تغییر نخواهند شد و تنها نیازمند یک کامپایل مجدد هستند.
  21. Mostafa

    آموزش واسط ها در C++

    یک اینترفیس (interface) رفتار یا قابلیت‌های یک کلاس ++C را بدون درنظرگرفتن هیچ نوع پیاده‌سازی برای آن توصیف می‌کند. اینترفیس‌های ++C با استفاده از کلاس‌های انتزاعی (abstract class) پیاده می‌شوند. این کلاس‌های انتزاعی را نباید با مفهوم ‌چکیده‌سازی که برای جداسازی جزئیات پیاده‌سازی از داده‌ها به کار رفت اشتباه بگیریم. یک کلاس را می‌توان با اعلان حداقل یک تابع مجازی محض در آن، انتزاعی کرد. یک تابع مجازی با قرادادن «0=» در هنگام اعلان آن مشخص می‌شود. class Box { public: // pure virtual function virtual double getVolume() = 0; private: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box }; هدف از ایجاد کلاس انتزاعی (معمولاً با ABC مشخص می‌شود)، ایجاد یک کلاس پایه مناسب است تا دیگر کلاس‌ها از آن ارث ببرند. نمی‌توان از کلاس‌های انتزاعی شی نمونه گرفت و تنها به عنوان اینترفیس عمل می‌کنند. تلاش برای گرفتن یک شی نمونه از یک کلاس انتزاعی به خطای کامپایل منجر می‌شود. بنابراین، اگر قرار باشد که از زیرکلاس یک کلاس ABC نمونه گرفته شود، آن زیرکلاس باید همه توابع مجازی را پیاده‌سازی کند، یعنی باید اینترفیس ABC را اجرا کند. اگر یک کلاس مشتق شده در روند رونویسی (override) تابع مجازی محض با مشکل مواجه شود، آنگاه هرگونه نمونه‌گیری شی از آن به خطای کامپایل منجر می‌شود. کلاس‌هایی که بتوان از آنها نمونه‌گیری انجام داد کلاس‌های عینی (concrete class) نامیده می‌شوند. مثال‌هایی از تابع انتزاعی در مثال زیر کلاس والد، یک اینترفیس برای کلاس پایه فراهم کرده تا تابعی به نام ()getArea را پیاده کند. #include <iostream> using namespace std; // Base class class Shape { public: // pure virtual function providing interface framework. virtual int getArea() = ; void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } protected: int width; int height; }; // Derived classes class Rectangle: public Shape { public: int getArea() { return (width * height); } }; class Triangle: public Shape { public: int getArea() { return (width * height)/2; } }; int main(void) { Rectangle Rect; Triangle Tri; Rect.setWidth(5); Rect.setHeight(7); // Print the area of the object. cout << "Total Rectangle area: " << Rect.getArea() << endl; Tri.setWidth(5); Tri.setHeight(7); // Print the area of the object. cout << "Total Triangle area: " << Tri.getArea() << endl; return ; } با اجرای کد فوق، خروجی زیر حاصل می‌شود. Total Rectangle area: 35 Total Triangle area: 17 می‌توان مشاهده کرد که چگونه یک کلاس انتزاعی اینترفیسی در قالب ()getArea تعریف کرده و دو کلاس دیگر همان تابع را با الگوریتم‌های متفاوت پیاده سازی می‌کنند. استراتژی طراحی یک سیستم مبتنی بر شی‌گرایی، می‌تواند یک کلاس پایه انتزاعی را به عنوان یک اینترفیس استاندارد مشترک برای همه اپلیکیشن‌های خارجی به کار بندد. سپس با ارث‌بری از این کلاس پایه انتزاعی، کلاس‌های مشتق شده‌ای پدید می‌آید که مشابه هم عمل می‌کنند. قابلیت‌های (یعنی توابع عمومی) فراهم آمده از طریق این اپلیکیشن‌های خارجی، همان توابع مجازی محض موجود در کلاس پایه انتزاعی می‌باشند. پیاده‌سازی این توابع محض در هرکلاس مشتق شده، بسته به نوع اپلیکیشن می‌تواند متفاوت باشد. این نوع معماری همچنین امکان اضافه کردن اپلیکیشن‌های جدید به سیستم، حتی پس از تعریف آن را به سهولت فراهم ساخته است.
  22. یک مثال برای شروع فرض کنید روی یک بازی (جنگی) کار می‌کنیم. کلاس Weapon را ایجاد می‌کنیم و دو کلاس Bomb و Gun را از آن مشتق می‌کنیم تا ویژگی‌های این سلاح‌ها را در آن‌ها بارگذاری کنیم: #include <iostream> using namespace std; class Weapon { public: void loadFeatures() { cout << "Loading weapon features.\n"; } }; class Bomb : public Weapon { public: void loadFeatures() { cout << "Loading bomb features.\n"; } }; class Gun : public Weapon { public: void loadFeatures() { cout << "Loading gun features.\n"; } }; int main() { Weapon *w = new Weapon; Bomb *b = new Bomb; Gun *g = new Gun; w->loadFeatures(); b->loadFeatures(); g->loadFeatures(); return 0; } خروجی Loading weapon features. Loading bomb features. Loading gun features. سه شیء اشاره‌گر به نام‌های w ،b و g را به ترتیب برای کلاس‌های Weapon ،Bomb و Gun تعریف می‌کنیم. همچنین تابع عضو ()loadFeatures را برای هر شیء با استفاده از کدهای زیر فراخوانی می‌کنیم: w->loadFeatures(); b->loadFeatures(); g->loadFeatures(); تا این جا همه چیز به خوبی کار می‌کند، با این حال پروژه بازی ما رفته‌رفته بزرگ‌تر می‌شود و تصمیم می‌گیریم کلاس مجزای Loader را برای بارگذاری ویژگی‌های سلاح‌ها ایجاد کنیم. این کلاس Loader ویژگی‌های دیگری از سلاح‌ها را بسته به نوع سلاح انتخابی بارگذاری می‌کند. class Loader { public: void loadFeatures(Weapon *weapon) { weapon->features(); } }; ()loadFeatures ویژگی یک سلاح خاص را بارگذاری می‌کند. پیاده‌سازی کلاس Loader #include <iostream> using namespace std; class Weapon { public: Weapon() { cout << "Loading weapon features.\n"; } void features() { cout << "Loading weapon features.\n"; } }; class Bomb : public Weapon { public: void features() { this->Weapon::features(); cout << "Loading bomb features.\n"; } }; class Gun : public Weapon { public: void features() { this->Weapon::features(); cout << "Loading gun features.\n"; } }; class Loader { public: void loadFeatures(Weapon *weapon) { weapon->features(); } }; int main() { Loader *l = new Loader; Weapon *w; Bomb b; Gun g; w = &b; l->loadFeatures(w); w = &g; l->loadFeatures(w); return 0; } خروجی Loading weapon features. Loading weapon features. Loading weapon features. Loading weapon features. پیاده‌سازی ما درست به نظر می‌رسد؛ اما ویژگی‌های سلاح‌ها 4 بار بارگذاری شده است. دلیل این مسئله آن است که در ابتدا شیء سلاح w به شیء کلاس b (یا Bomb) اشاره می‌کرد و تلاش کرده‌ایم ویژگی‌های شیء Bomb را با ارسال آن به تابع ()loadFeatures با استفاده از شیء اشاره‌گر l (کلاس Loader) بارگذاری کنیم. به طور مشابه تلاش کرده‌ایم ویژگی‌های شیء Gun را نیز بارگذاری کنیم، اما تابع ()loadFeatures کلاس Loader اشاره‌گر به شیء کلاس Weapon را به عنوان آرگومان می‌گیرد: void loadFeatures(Weapon *weapon) به همین جهت است که ویژگی‌های weapon 4 بار بارگذاری می‌شوند. برای حل این مشکل باید تابعی از کلاس مبنا (کلاس Weapon) به صورت مجازی با استفاده از کلیدواژه virtual بسازیم. class Weapon { public: virtual void features() { cout << "Loading weapon features.\n"; } }; مثال: استفاده از تابع مجازی برای حل مشکل #include <iostream> using namespace std; class Weapon { public: virtual void features() { cout << "Loading weapon features.\n"; } }; class Bomb : public Weapon { public: void features() { this->Weapon::features(); cout << "Loading bomb features.\n"; } }; class Gun : public Weapon { public: void features() { this->Weapon::features(); cout << "Loading gun features.\n"; } }; class Loader { public: void loadFeatures(Weapon *weapon) { weapon->features(); } }; int main() { Loader *l = new Loader; Weapon *w; Bomb b; Gun g; w = &b; l->loadFeatures(w); w = &g; l->loadFeatures(w); return 0; } خروجی Loading weapon features. Loading bomb features. Loading weapon features. Loading gun features. همچنین توجه کنید که تابع l->loadFeatures(w) تابع کلاس‌های مختلفی را بسته به این که شیء l به چه چیزی اشاره می‌کند فرامی‌خواند. استفاده از تابع مجازی نه‌تنها موجب شده کد ما روشن‌تر شود، بلکه انعطاف‌پذیری آن را نیز افزایش داده است. در برنامه فوق، ویژگی‌های سلاح دو بار پرینت شده‌اند. با افزودن کد بیشتر می‌توانید کاری کنید که ویژگی‌های سلاح تنها یک بار بارگذاری شود. اگر بخواهیم سلاح دیگری (مانند چاقو) اضافه می‌کنیم می‌توانیم به سادگی ویژگی‌های آن را به صورت زیر اضافه کرده و بارگذاری کنیم. class Knife : public Weapon { public: void features() { this->Weapon::features(); cout << "Loading knife features.\n"; } }; و در تابع ()main به صورت زیر عمل می‌کنیم: Knife k; w = &k; l->loadFeatures(w); لازم به ذکر است که ما برای بارگذاری ویژگی‌های چاقو، هیچ چیز را در کلاس Loader تغییر نداده‌ایم. کلاس مجرد در ++C و تابع مجازی خالص هدف برنامه‌نویسی شیءگرا، تقسیم کردن یک مسئله پیچیده به مجموعه‌های کوچک‌تر است. بدین ترتیب می‌توانیم مسئله را به روشی بهینه درک کرده و حل کنیم. برخی اوقات استفاده از وراثت صرفاً به منظور بصری‌سازی بهتر مسئله مفید خواهد بود. در ++C می‌توان یک کلاس مجرد ایجاد کرد که امکان وهله‌سازی از آن وجود نداشته باشد، یعنی نمی‌توان شیئی از روی این کلاس مجرد ساخت. با این حال می‌توان از آن کلاس دیگری مشتق کرد و شیئی را از آن کلاس مشتق شده وهله‌سازی نمود. کلاس‌های مجرد کلاس‌های مبنایی هستند که وهله‌سازی نمی‌شوند. یک کلاس شامل تابع مجازی خالص به نام کلاس مجرد نامیده می‌شود. تابع مجازی خالص یک تابع مجازی که اعلان آن با =0 پایان یابد یک تابع مجازی خالص است. به مثال زیر توجه کنید: class Weapon { public: virtual void features() = 0; }; در این کد تابع مجازی به صورت زیر است: virtual void features() = 0 و کلاس Weapon یک کلاس مجرد است. مثال: کلاس مجرد و تابع مجازی خالص #include <iostream> using namespace std; // Abstract class class Shape { protected: float l; public: void getData() { cin >> l; } // virtual Function virtual float calculateArea() = 0; }; class Square : public Shape { public: float calculateArea() { return l*l; } }; class Circle : public Shape { public: float calculateArea() { return 3.14*l*l; } }; int main() { Square s; Circle c; cout << "Enter length to calculate the area of a square: "; s.getData(); cout<<"Area of square: " << s.calculateArea(); cout<<"\nEnter radius to calculate the area of a circle: "; c.getData(); cout << "Area of circle: " << c.calculateArea(); return 0; } خروجی Enter length to calculate the area of a square: 4 Area of square: 16 Enter radius to calculate the area of a circle: 5 Area of circle: 78.5 در این برنامه، تابع مجازی خالص زیر درون کلاس Shape تعریف شده است: virtual float area() = 0; یک نکته که باید اشاره کنیم این است که تابع مجازی خالص کلاس مبنا باید در کلاس مشتق شده باطل (Override) شود. اگر این کار صورت نگیرد، کلاس مشتق شده خود به یک کلاس مجرد تبدیل می‌شود. برای مطالعه بخش بعدی روی لینک زیر کلیک کنید:
  23. Mostafa

    آموزش Function Overriding در C++

    در ابتدای این آموزش به توضیح Overriding می‌پردازیم سپس شرایط پیاده سازی Function Overriding در سی پلاس پلاس را بیان کرده، در پایان جلسه نیز یک مثال را پیاده سازی می‌کنیم. Function Overriding در سی پلاس پلاس در یک کلاس اگر یک تابع همنام تابعی که در کلاس پدر خود وجود دارد،بنویسیم به آن override میگویند. به زبان دیگر اگر کلاس فرزند تابعی را پیاده سازی کند که به نوعی در کلاس پدر وجود داشته است، overriding در سی پلاس پلاس انجام داده ایم. شروط overriding به ترتیب زیر است: نام توابع یکسان باشد ورودی و خروجی توابع یکسان باشد توابع override شده حتما باید در دو کلاس متفاوت باشند و بین کلاس ها رابطه ارث بری وجود دارد. مثال Function Overriding در سی پلاس پلاس کلاسی به نام Parent داریم و کلاس دیگری به نام Child ساخته‌ایم به صورتی که Child از Parent ارث‌بری کند. کد این مثال به صورت زیر می‌باشد: // Base class class Parent { public: void print() { cout << "The Parent print function was called" << endl; } }; // Derived class class Child : public Parent { public: // definition of a member function already present in Parent void print() { cout << "The child print function was called" << endl; } <div style="clear:both; margin-top:0em; margin-bottom:1em;"><a href="[Hidden Content]" target="_blank" rel="nofollow" class="u6d856ee28e00bf9b93f69b378d085de0"><!-- INLINE RELATED POSTS 1/3 //--><style> .u6d856ee28e00bf9b93f69b378d085de0 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#e6e6e6; border:0!important; border-left:4px solid #E67E22!important; text-decoration:none; } .u6d856ee28e00bf9b93f69b378d085de0:active, .u6d856ee28e00bf9b93f69b378d085de0:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u6d856ee28e00bf9b93f69b378d085de0 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u6d856ee28e00bf9b93f69b378d085de0 .ctaText { font-weight:bold; color:#2980B9; text-decoration:none; font-size: 16px; } .u6d856ee28e00bf9b93f69b378d085de0 .postTitle { color:inherit; text-decoration: underline!important; font-size: 16px; } .u6d856ee28e00bf9b93f69b378d085de0:hover .postTitle { text-decoration: underline!important; } </style><div style="padding-left:1em; padding-right:1em;"><span class="ctaText">بیشتر بخوانید:</span> <span class="postTitle">لیست پیوندی در سی پلاس پلاس (LinkedList)</span></div></a></div> }; //main function int main() { //object of parent class Parent obj1; //object of child class Child obj2 = Child(); // obj1 will call the print function in Parent obj1.print(); // obj2 will override the print function in Parent // and call the print function in Child obj2.print(); return 0; } همانطور که در کد بالا می‌بینید تابعی به نام Print هم در کلاس Parent و هم در کلاس Child آمده است. به عبارت دیگر تابع Print در کلاس فرزند Override شده است. در تابع Main هر دو کلاس را ساخته و نحوه دسترسی به هر تابع را نشان داده‌ایم. خروجی کد بالا به صورت زیر می‌باشد: The Parent print function was called The child print function was called
×
×
  • اضافه کردن...