<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد علی نژاد</title>
        <link>https://virgool.io/feed/@mkxd990</link>
        <description>برنامه نویس</description>
        <language>fa</language>
        <pubDate>2026-04-15 09:52:09</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/116021/avatar/47y2Pr.jpg?height=120&amp;width=120</url>
            <title>محمد علی نژاد</title>
            <link>https://virgool.io/@mkxd990</link>
        </image>

                    <item>
                <title>آمار بازدید پست‌های من در سال ۹۹</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D8%A7%D8%B1-%D8%A8%D8%A7%D8%B2%D8%AF%DB%8C%D8%AF-%D9%BE%D8%B3%D8%AA-%D9%87%D8%A7%DB%8C-%D9%85%D9%86-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84-%DB%B9%DB%B9-rdhqq3p131kr</link>
                <description>در طول تاریخ از اعداد استفاده کردیم تا اغلب داد و ستد کنیم و آن‌چیزی که شمردنی است را بشماریم. برای هر عدد واحد درست کردیم تا عددهای زندگی قاطی نشوند و از اعداد، شفاف‌تر استفاده کنیم؛ مثلا وقتی می‌گوییم ده هزار تومان به پول اشاره داریم و وقتی می‌گوییم ده هزار بلیط به بلیط!روز به روز که در زندگی جلو‌تر رفتیم عددها فرقی نکردند ولی این واحدها بودند که زیاد شدند. واحد کریپتو، واحد اصله درخت، واحد فاصله و …«واحد» یک توافق عمومی است برای شمردن؛ تا همانطور که گفتم شمردن‌ها قاطی نشود. مشاهده افراد دارای ثروت (اجتماعی یا مالی) به من ثابت کرده اینکه چه چیزی را بشماریم از اینکه چطور بشماریم مهم‌تر است. هرکس با واحد خاصی مسائل زندگی را می‌شمارد. اینطور به نظرم آمده که مشخص کردن واحد یعنی مشخص کردن اینکه من در زندگی برای چه چیزهایی ارزش قائلم و می‌خواهم چه چیزهایی را در زندگی بشمارم. https://cdn.virgool.io/annual-report/1399/ytoevoaqebj9-uzg6Y.mp4 اعدادی که بدون واحد ثبت کردمبه ویدیویی که ویرگول برایم ساخته که نگاه می‌کنم میبینم که در سال ۹۹، من در مجموع ۹,۵۱۱ کلمه در ویرگول نوشتم و منتشر کردم و مخاطبین، پست‌های من را ۱۳۲ مرتبه پسندیدند و  ۸ بار هم نظر خود را روی پست‌های من به اشتراک گذاشتند. در سال ۹۹، ۳۴ نفر در ویرگول من را دنبال کردند تا پست‌های بعدیم را بخوانند. این اعداد نشان میدهند من کاری کرده‌ام. هرکدام به واحدی وصل هستند. از خودم می‌پرسم من کدام واحد را شمارش کرده‌ام؟ کدامیک از واحدهای بالا از همه برای من مهم‌تر است؟ ادامه ویدیو را می‌بینم.آمار از اثر بیرونی می‌گویندطبق آمار پست‌های من ۳,۲۹۹ بار خوانده شدند و ۴۵۳,۷۶۷ ثانیه صرف مطالعه آنها شده است، که با توجه به جمعیتی که در ایران به اینترنت دسترسی دارند، ویرگول به من می‌گوید که توانستم  ۰/۰۰۶۲۲۱۱۰۰ ثانیه، سرانه مطالعه دیجیتال کشور را بالا ببرم.از طرف دیگر ویرگول به من می‌گوید که اگر قرار بود پست‌هایم را چاپ و به دست تک تک خوانندگان برسانم باید ۱۱,۴۵۱ کاغذ مصرف می‌کردم.آن عددهای کوچک ابتدای ویدیو حالا تبدیل شده‌اند به عددهای بزرگ به اینکه من جلوی مصرف این تعداد کاغذ را گرفتم یا به اینکه من  ۰/۰۰۶۲۲۱۱۰۰ ثانیه، سرانه مطالعه دیجیتال کشور را جابه جا کرده‌ام. واحد این عددها برای من ملموس‌تر است.واحد نوشتن چیست؟همه عددهای بالا و همینطور اثر بیرونی که روی خوانندگان و همینطور در مقیاس بزرگتر طبیعت و جامعه اطرافم گذاشتم اعدادی هستند که من دوستشان دارم و به آنها افتخار می‌کنم. اگر چنین ویدیویی دست شما نیز رسید به شما بابت تک تک اعداد تبریک می‌گویم.اثر هر نوشته تا حدودی معلوم است، اگر بنویسید جلوی قطع درخت را می‌گیرید، به سرانه مطالعه کشور اضافه می‌کنید و خوانندگانی جذب می‌کنید که شما را از طریق نوشته‌هایتان می‌شناسند و …به نظرم می‌رسد که نوشته‌های من و شما واحد ندارند ولی اثر بیرونی دارند.</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Sun, 18 Apr 2021 02:21:52 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : موارد استفاده (Use cases)</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%D9%85%D9%88%D8%A7%D8%B1%D8%AF-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-use-cases-a3vpp05q0xg6</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.پس از تمرکز بر روی نیازمندی های برنامه که مشخص می‌کند برنامه یا سیستم چه کاری باید انجام دهد،این بار به سراغ کاربران سیستم می‌رویم و اینکه چگونه می‌توانند هدف خاصی را در سیستم انجام دهند. به این امر، موارد استفاده یا use case گفته می‌شود، یک روش خاص برای نوشتن use case وجود ندارد و می‌توان به چندین روش این کار را انجام داد.use case به سه چیز اساسی نیاز دارد: عنوان (Title)، که یک هدف را مشخص میکند، شخصی که برای دستیابی به آن هدف با برنامه تعامل برقرار می‌کند، که در اینجا به آن بازیگر اصلی (Primary Actor) می‌گوییم و روند اجرا یا مراحل لازم برای تحقق هدف که به آن سناریو هدف (Success Scenario) می‌گوییم.عنوان مورد استفاده باید یک عبارت کوتاه با یک فعل معلوم باشد که هدفی را توصیف می‌کند. خُب به عنوان یک فضانورد، اولین هدف گرم کردن یک وعده غذایی خوشمزه است. (پیشنهاد میکنم آموزش های قبل رو ببینید) برای این مورد، use case می‌تواند اینگونه بیان شود : وعده غذایی گرم. دقت کنید که عنوان باید کوتاه و ساده باشد.دلیل اینکه از کلمه بازیگر بجای کاربر استفاده میکنیم این است که ما اغلب باید دقیقاً مشخص کنیم چه کسی با سیستم تعامل دارد. بازیگر علاوه بر اینکه ممکن است کاربر باشد، می‌تواند فرد خاصی مانند مشتری یا کارمند نیز باشد. بنابراین بازیگران همه انسانهایی هستند که می‌توانند با برنامه تعامل داشته باشند. نه تنها انسان ها، هر موجودیت خارجی ای که بر روی سیستم عملی انجام می‌دهد، می‌تواند بازیگر محسوب شود، از جمله سایر سیستم های رایانه ای.یک راه نوشتن سناریو، نوشتن آن به عنوان یک پاراگراف واحد است، مثلا برای use case ما که وعده غذایی گرم فضانوردان است، سناریو به این صورت است: &quot;فضانورد بسته غذا را در دستگاه قرار می‌دهد، سیستم بسته غذا را تشخیص می‌دهد، سیستم بسته را به مدت معینی گرم می‌کند، سیستم به فضانورد، آماده شدن بسته غذایی را به وسیله پیجر فضایی اطلاع می‌دهد و در آخر فضانورد بسته غذایی را از دستگاه خارج میکند.&quot;هدف نوشتن کوتاه و ساده سناریو با استفاده از زبان روزمره و غیر فنی می‌باشد، طوریکه کاربر معمولی هم آن را بفهمد.راه دیگر نوشتن سناریو نوشتن آن به عنوان لیستی از موارد می‌باشد، مثلا برای use case ما اینگونه می‌باشد.1. فضانورد بسته غذایی را در دستگاه قرار می‌دهد.2. سیستم بسته غذایی را تشخیص می‌دهد.3. سیستم بسته غذایی را به مدت معینی گرم میکند.و بقیه موارد...با توجه به شرایط، می‌توانیم از عبارت های مختلف با جزییات متفاوت استفاده کنیم.مثال ما یک سناریو موفق و ساده را نشان می‌دهد، اما اگر چیزی درست پیش نرفت، آن وقت سناریو ما چگونه خواهد بود؟ خُب use case معمولا برای توصیف عملیات موفقیت آمیز نوشته می‌شود، اما می‌توانیم مراحل اضافه و یا جایگزین نیز برای مواقعی که خطا پیش می‌آید نیز داشته باشیم. بطور مثال برای زمانی که دستگاه بسته غذایی را تشخیص نمی‌دهد یا زمانی که پیجر فضایی خراب شده باشد.در صورت نیاز می‌توانیم جزییات بیشتری نیز اضافه کنیم، بطور مثال می‌توانیم پیش شرط هایی برای شروع use case اضافه کنیم که از قبل باید انجام شوند. در مورد مثال ما یک پیش شرط می‌تواند این باشد که فضانورد حداقل یک بسته غذایی را از قبل شناسایی کرده باشد.می‌توانیم با اضافه کردن بخش های بیشتری مانند پس شرط ها، بازیگران ثانویه و ... یک use case کامل داشته باشیم. معمولا یک قالب آماده برای use case کامل، بصورت Word و یا PDF موجود است که شما می‌توانید آن را تکمیل کنید.دقت کنید که استفاده نابجا از یک قالب use case کامل، می‌تواند باعث ایجاد مشکلاتی نیز بشود. اگر در حال مدیریت یک پروژه بزرگ هستید که افراد مختلفی از سراسر جهان در آن مشغول به کار هستند، استفاده از یک use case کامل می‌تواند مفید باشد، اما در بیشتر موارد داشتن یک use case ساده خیلی کارامدتر خواهد بود.به عنوان یک قانون اساسی شما نباید بیشتر از چند روز روی نوشتن use case زمان بگذارید. اگر در مراحل اولیه تمام اطلاعات لازم برای نوشتن use case را ندارید اشکالی ندارد، use case شما می‌تواند در آینده تغییر کند و تکمیل شود.اگر علاقه بیشتری به نوشتن use case ها دارید می‌توانید کتاب Writing Effective Use Cases نوشته Alistair Cockburn Cockburn را مطالعه کنید. در این کتاب نمونه های موفق و اشتباهات رایج در نوشتن use case ها بررسی شده است.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : چالش دستگاه پخش موسیقیقسمت بعدی : در حال تکمیل ...</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Fri, 10 Apr 2020 16:13:13 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : چالش دستگاه پخش موسیقی</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%DA%86%D8%A7%D9%84%D8%B4-%D8%AF%D8%B3%D8%AA%DA%AF%D8%A7%D9%87-%D9%BE%D8%AE%D8%B4-%D9%85%D9%88%D8%B3%DB%8C%D9%82%DB%8C-dj3h4nunr4to</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.چالشزمان آن فرا رسیده تا تمرینی برای تعریف نیازمندی ها انجام دهیم. فضانوردان ما برای سفر طولانی به کره ماه به موسیقی نیاز دارند! بنابراین ما به کمک شما برای طراحی یک دستگاه پخش موسیقی (Jukebox)، برای فضانوردان نیاز داریم.Jukeboxما نمی خواهیم بگذاریم که فقط یک نفر تمام موسیقی ها را انتخاب کند و دیگران را دیوانه کند! دستگاه پخش موسیقی باید به کاربر اجازه دهد آلبومی را از کتابخانه موسیقی موجود انتخاب کند و سپس آهنگهای جداگانه ای از آن آلبوم را برای پخش، انتخاب کند. به عنوان احتیاط اگر فضانوردی بیش از سه آهنگ پشت سرهم به صف پخش موسیقی اضافه کرد و فضانورد دیگری بخواهد یک موسیقی را پخش کند، آن موسیقی به ابتدای صف می رود.حال ، هدف شما از این چالش نوشتن مجموعه ای از نیازمندی ها برای طراحی دستگاه پخش موسیقی است. سعی کنید حداقل سه مورد نیازمندی های عملیاتی و سه مورد نیازمندی های غیر عملیاتی داشته باشید. (اگر ویدیوهای قبلی آموزش را ندیده اید از این لینک استفاده کنید). اگر نمی دانید از کجا باید شروع کنید بهتر است از ویژگی های FURPS استفاده کنید.ما در اینجا عمدا جزییات را بیان نکردیم و مسئله را مبهم قرار دادیم، زیرا این چالش مربوط به درک مسئله جدید (گاها نیمه کاره) و نوشتن نیازمندی های آن است. هیچ جواب درست و دقیقی برای این چالش وجود ندارد، پس مدتی به این مسئله فکر کنید و سپس راه حل آن را مشاهده کنید.راه حلبرای حل چالش دستگاه پخش موسیقی از مدل FURPS بهره خواهیم گرفت. F که حرف اول عملکرد (Functionality) است مشخص میکند که نیازمندی های عملیاتی سیستم چه چیزهایی است و سیستم چه کارهایی باید انجام دهد.برخی از کاربردهای دستگاه پخش کننده موسیقی شامل موارد زیر است:داشتن کتابخانه ای از آلبوم ها و آهنگ ها، امکان مرور آهنگ ها، امکان انتخاب آهنگ های شخصی توسط کاربران و جلوگیری از پخش آلبوم های کامل، همچنین داشتن صف آهنگ برای پخش. و مهمترین قابلیت یعنی پخش موسیقی.علاوه بر اینکه ما باید به کاربر اجازه پخش آهنگ بدهیم باید دکمه برای مرتب سازی آهنگ ها بر اساس هنرمندان نیز داشته باشیم. البته که این ایده ی خوبی است، اما باید آن را بهتر بیان کرد. گفتن اینکه سیستم باید دکمه‌ای داشته باشد که کاربر بتواند برای مرتب کردن بر اساس هنرمندان آن را کلیک کند، خیلی مناسب نیست، شیوه بهتر برای گفتن این نیاز این است که بگوییم، &quot;سیستم باید به کاربر اجازه دهد تا آهنگ ها را بر اساس هنرمندان مرتب کند&quot;.نیازهای خاص تری نیز وجود دارند مانند اینکه دستگاه پخش موسیقی باید هر کاربر را تشخیص دهد و تعداد آهنگ های پخش شده توسط هر فرد را ردیابی کند یا به عبارتی دیگر بدانیم هر کاربر چه آهنگ هایی را پخش کرده است.توجه کنید که ما مشخص نکردیم که سیستم چگونه کاربران را شناسایی می کند، شرط فوق بیان می کند که فقط باید کاربران شناسایی شوند. چندین روش وجود دارد که ما می توانیم این کار را انجام دهیم. شاید قبل از استفاده از سیستم، به هر کاربر شناسه منحصر به فردی اختصاص دهیم یا می توانیم از یک دستگاه خواننده اثر انگشت یا شاید یک دوربین هوشمند برای شناسایی چهره کاربران استفاده کنیم. در این مرحله، ما متعهد نیستیم که روش خاصی برای تحقق نیاز داشته باشیم. بنابراین، جزئیات اجرای آن را در مرحله بعدی فرآیند طراحی بیان خواهیم کرد.خُب بریم سراغ نیازمندی های غیر عملیاتی، اینکه سیستم چگونه باید باشد. مواردی که احتمالا باقیمانده ویژگی های FURPS در آن نقش دارند.با توجه به خصوصیت کاربرد پذیری (Usability)، سیستم باید مستقیما با کاربران تعامل داشته باشد، زیرا فضانوردان در فضا شناور هستند. چیزهایی مثل اینکه دستگاه پخش موسیقی ما باید دکمه ها واقعا بزرگی داشته باشد و یا دستورات صوتی را بپذیرد.بریم سراغ قابلیت اطمینان (Reliability)، فضانوردان باید همیشه به موسیقی دسترسی داشته باشند، بنابراین دستگاه پخش موسیقی باید همیشه (24/7) در دسترس آنها باشد.کارایی (Performance)، دستگاه پخش موسیقی ما برای کار کردن به قدرت زیادی احتیاج ندارد. این خصوصیت بر سایر سیستم های مهم موجود در فضاپیما تأثیر می گذارد. بنابراین، یک کارآیی خوب برای سیستم کم مصرف بودن آن خواهد بود. الته ما باید آستانه ای را برای تعریف کم مصرف بودن، تعیین کنیم.و در آخر برای قابلیت پشتیبانی (Supportability)، دستگاه پخش موسیقی باید کتابخانه موسیقی قابل بروزرسانی داشته باشد تا فضانوردان بتوانند موسیقی های جدید را گوش دهند.نیازمندی هایی که در اینجا به آن پرداختیم به هیچ وجه مجموعه کامل نیازمندی های سیستم ما نیست، بلکه نقطه شروع آن است. اگر نیازمندی های خودتان را نوشته باشید ممکن است مشترکات زیادی با نیازمندی های ما داشته باشد و یا حتی کاملا متفاوت باشد. در واقع راه حل دقیقی برای این چالش وجود ندارد، بلکه هدف این بود که شما با خیال آسوده نیازمندی هایی برای این چالش بنویسید.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : نیازمندی ها + FURPSقسمت بعدی : آموزش اصول برنامه نویسی شی گرا : موارد استفاده (Use cases)</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Tue, 07 Apr 2020 19:03:02 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : نیازمندی ها + FURPS</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%D9%86%DB%8C%D8%A7%D8%B2%D9%85%D9%86%D8%AF%DB%8C-%D9%87%D8%A7-furps-koyphyo1qitc</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.یک مدل متداول برای طبقه بندی ویژگی های کیفی نرم افزار، مخفف اختصاری FURPS (راهنمای تلفظ) است که مخفف عملکرد (Functionality)، کاربرد پذیری (Usability)، قابلیت اطمینان (Reliability)، کارایی (Performance) و قابلیت پشتیبانی (Supportability) است. در هنگام نوشتن و تعیین نیازمندی ها باید چک لیست FURPS را در نظر بگیریم.عملکرد (Functionality) به قابلیت ها و ویژگی های برنامه اشاره دارد که هسته اصلی آنچه مشتری می خواهد را تشکیل میدهد.کاربرد پذیری (Usability) با شخص استفاده کننده از برنامه سروکار دارد. اینکه آیا استفاده از برنامه آسان است؟ آیا برنامه دارای ثبات است؟ آیا مستندات برنامه دقیق و کامل است؟برای تعریف قابلیت اطمینان (Reliability) نکته اول تعریف میزان قابل قبول برای در دسترس نبودن برنامه (Downtime) است. پیش بینی خرابی های سیستم و چگونگی بازیابی آن نیز اهمیت دارند.کارایی (Performance) میزان زمان پاسخ برنامه و محدودیت های استفاده از منابع را تعیین میکند.در قابلیت پشتیبانی (Supportability) اطمینان حاصل کنید که برنامه را می توان مورد آزمایش، گسترش، سرویس دهی و نصب و پیکربندی قرار داد.علاوه بر این پنج دسته، الگوی افزودنی به مدل FURPS با نام FURPS Plus نیز وجود دارد که چهار دسته دیگر را اضافه می کند.طراحی (Design) که محدودیت های ساخت برنامه را نشان می دهد، بطور مثال برنامه باید از دیتابیس رابطه ای استفاده کند.پیاده سازی (Implementation)، آیا برنامه باید به زبانی خاص نوشته شود؟ آیا معیارها یا متدولوژی هایی وجود دارند که باید رعایت شوند؟رابط (Interface) (با رابط کاربری اشتباه نگیرید) به طور معمول به یک سیستم خارجی که باید با آن ارتباط برقرار شود، گفته می شود.و در آخر، الزامات فیزیکی (Physical)، محدودیتهای فیزیکی واقعی مربوط به سخت افزاری که برنامه در آن مستقر خواهد شد.به خاطر داشته باشید که هدف از FURPS Plus این است که شما را تشویق کند تا در مورد بعضی از قسمت های مورد نیاز کلیدی فکر کنید. اما همه این موارد مربوط به همه پروژه نخواهد بود.آنالیز نیازمندی ها خیلی فراتر از چیزی است که ما در این آموزش مطرح می کنیم. اگر نیاز به مطالعه جامع تری در این خصوص دارید کتاب های بسیار خوبی در این زمینه موجود است. کتاب Software Requirements نوشته Karl Wiegers و کتاب Mastering the Requirements Process نوشته Suzanne Robertson و James Robertson رفرنس های بسیار خوبی هستند. اگر شما نیاز به استخراج نیازمندی های مشتری دارید، مخصوصا زمانیکه آشنایی کافی با مشتری و نیازهایش ندارید، این کتاب ها به شما بسیار کمک خواهند کرد.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : تعریف نیازمندی هاقسمت بعدی : آموزش اصول برنامه نویسی شی گرا : چالش دستگاه پخش موسیقی</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Sun, 05 Apr 2020 18:44:03 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : تعریف نیازمندی ها</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-%D9%86%DB%8C%D8%A7%D8%B2%D9%85%D9%86%D8%AF%DB%8C-%D9%87%D8%A7-xnj3zep1uqx1</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.اولین قدم از فرآیند طراحی، جمع آوری نیازمندی هاست. فهمیدن اینکه برنامه یا محصول شما چه کاری باید انجام دهد، چه مشکلی را می خواهید حل کنید؟ چرا در وهله اول برنامه را می سازید؟ هسته نیازمندی های عملیاتی برنامه چیست؟ یا به عبارت دیگر، برنامه چه کارهایی باید انجام دهد؟ چه ویژگی ها و قابلیت هایی نیاز است؟ علاوه بر همه اینها، ممکن است نیازمندی های غیر عملیاتی نیز وجود داشته باشد که محدودیت هایی را در مورد چگونگی عملکرد برنامه اعمال می کند.به عنوان مثال، برنامه ای که معاملات بانکی را کنترل می کند، یا برنامه ای که اطلاعات مراقبت های بهداشتی را ذخیره می کند، به احتمال زیاد باید مقررات خاصی را رعایت کند. این برنامه می تواند نیازمندی های اجرایی از قبیل زمان پاسخ و یا پاسخگویی همزمان به چندین کاربر را داشته باشد، همچنین نیازمندی های پشتیبانی مانند اینکه اگر ساعت 2 صبح جمعه برای برنامه مشکلی پیش آمد چه اتفاقی می افتد؟ و نیازمندی امنیتی که بسته به کاربرد برنامه می تواند یک نیازمندی عملیاتی و یا غیر عملیاتی در نظر گرفته شود.طبق تجربه من، صنعتی که دوست دارد قوانین لازم را بنویسد، صنعت هوافضا است! اگر می خواهید چیزی را به فضا ببرید، به مجموعه کاملی از نیازمندی ها نیاز دارید تا مطمئن بشید که برای اولین بار درست کار می کند. بنابراین به عنوان یه مهندس کامپیوتر بیاید برخی نیازمندی ها رو با هم بنویسیم، ما وضیفه داریم یک ماکروویو فضایی ایجاد کنیم تا فضانوردان بتوانند غذاهای خودشون رو توی ماه گرم بخورند! مانند بسیاری از پروژه ها، ایجاد یک مایکروویو فضایی هم نرم افزار و هم عناصر سخت افزاری را در بر می گیرد اما روند نوشتن مطالب یک مهارت کلی است که برای همه نوع پروژه ها کاربرد دارد.به طور معمول اگر شما در حال تهیه یک برنامه برای مشتری یا کاربران خود هستید، نیاز به داشتن اطلاعات بیشتری برای حل مشکل دارید. ممکن است مشتری فقط یک ایده مبهم از چیزی که نیاز دارد، داشته باشد و یا دقیقا بداند که چه چیزی نیاز دارد. به عنوان یک توسعه دهنده باید برای فهمیدن نیاز مشتری و اینکه بدانید آیا می توانید خواسته مشتری را انجام دهید یا خیر، وقت بگذارید. یک اشتباه معمول که اکثر توسعه دهندگان به اون دچار می شنوند، داشتن ده ها ایده نیمه کاره در مورد ویژگی های جالب برنامه است، در حالیکه کار اصلی که باید انجام بدهند را نادیده می گیرند. اگر شما نیروی محرکه برنامه هستید و ایده از شماست، احتمالا همه جوانب برنامه را دیده اید و می توانید از این مرحله بگذرید.برای نوشتن نیازمندی های عملیاتی من از عبارات زیر برای توصیف آنچه باید انجام شود استفاده می کنم.* سیستم باید ..... را انجام دهد* برنامه باید ..... را انجام دهداین نیازمندی ها می توانند جمله های کوتاه و ساده یا پیچیده باشند.خب برگردیم به مثال مایکروویو فضایی خودمون و لیستی از نیازمندی های عملیاتی اون رو بنویسیم، - سیستم باید مواد غذایی را در بسته های فضایی گرم کند. - به کاربر اجازه دهید تا زمان آماده سازی مواد غذایی را تنظیم کند. - زمانیکه غذا آماده شد به کاربر توسط پیجر فضایی خبر دهید.- سیستم باید زمان پخت و پز را بر اساس غذایی که داده می شود تنظیم کند.- برنامه باید انواع مواد غذایی را از سوپرکلاس انتزاعی به ارث ببرد.همه موارد بالا خوب هستند بجز مورد آخر، &quot;برنامه باید انواع مواد غذایی را از سوپرکلاس انتزاعی به ارث ببرد&quot;. این مورد را باید حذف کنیم، در تعریف نیازمندی ها هیچ کاری با شی گرایی نداریم. نیازمندی ها نباید شامل کلماتی مانند ارث بری (Inheritance)، انتزاعی (Abstraction) و یا حتی کلاس (Class) و شی (Object) باشد. اینها جزئیاتی هستند که بعداً به آنها خواهیم رسید.خب بریم سراغ نیازمندی های غیر عملیاتی، از اونجایی که این نیازمندی ها ویژگی های مورد نیاز برنامه رو توصیف می کنند، باید توضیحی باشند راجع به چطور بودن برنامه. آنها قابلیت هایی مانند نگهداری، اعتماد، استفاده و در دسترس بودن را توصیف میکنند.برگردیم به مثال خودمون و نیازمندی های غیر عملیاتی اون،- باید همیشه در دسترس باشد.- زمانی که دستکش کار پوشیدیم قابل استفاده باشد.- با سیستم عامل های ویندوز، مک، لینوکس و همچنین اندروید سازگار باشد.موارد بالا خوب هستند بجز آخری، آیا واقعا ماکروویو فضایی نیاز دارد که با تمام سیستم عامل ها سازگار باشد؟! شاید بگویید که این قابلیت فعلا کاربردی ندارد اما در آینده به آن نیاز خواهیم داشت. و خب البته این یک اشتباه رایج است. نباید همه نیازها را در ابتدا در نظر گرفت، در مرحله اول فقط روی حداقل مطلوب نیازها تمرکز کنید، نه چیزهای اختیاری،خوب و یا ویژگی های رویایی شما.اگر اولین مرحله از نیازمندی های شما کامل نیست، اشکالی ندارد شما می توانید در آینده آنها را کامل کنید. هدف از این مرحله نوشتن نیازمندی ها می باشد و ایرادی ندارد اگر ساده باشد.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : UMLقسمت بعدی : آموزش اصول برنامه نویسی شی گرا : نیازمندی ها + FURPS</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Sat, 04 Apr 2020 17:37:29 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : UML</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-uml-kgefrdpkm7em</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.در طول این آموزش، ما از چند تکنیک نمودار رایج برای ترسیم کلاس ها و تعامل آنها استفاده خواهیم کرد. این نمودارها از چیزی به نام UML یا همان زبان مدل‌سازی یکپارچه (Unified Modeling Language) می آیند. UML یک زبان برنامه نویسی نیست بلک یک نشانگر گرافیکی برای ترسیم نمودارها و تجسم سیستم های شی گراست.به عنوان مثال ، نمودار کلاس نمایش گرافیکی بسیار ساده ای از یک کلاس ارائه می دهد که شامل سه بخش است، نام کلاس، خصوصیت ها یا فیلدها و رفتارها یا متدها. نمودار کلاس به ما اجازه می دهد تا به سرعت ایده ای که قابل خواندن و درک است را بدون در نظر گرفتن اینکه از چه زبان برنامه نویسی استفاده می کنیم، ترسیم کنیم.UML شامل بیش از دهها نوع مختلف از نمودارهای ساختاری و رفتاری است. در این آموزش، ما فقط از چند نمونه از رایج ترین نمودارها از جمله نمودارهای کلاس و نمودار مورد کاربرد (Use case diagram) استفاده می کنیم که تعامل کاربران با برنامه را نشان می دهد.UML در اینجا هدف نیست و دانستن UML بیشتر لزوماً شما را به یک توسعه دهنده بهتر تبدیل نمی کند. در حقیقت، دانستن مقدار کمی UML می تواند مفیدتر از دانستن مقدار زیادی UML باشد زیرا دانستن مقدار زیادی از UML می تواند منجر به تأکید بیش از حد بر روی نمودارها شود. این نمودارها باید یک ابزار ارتباطی سریع و مفید باشند، یک سیستم کمکی برای مغز شما و نه چیز دیگری.من طرفدار رسم نمودار روی کاغذ یا وایت برد هستم حداقل در مراحل ابتدایی یک پروژه. زمانی که یک پروژه بزرگ می شود استفاده از ابزارهای الکترونیک رسم نمودار برای به اشتراک گذاری نمودارها بین اعضا تیم، مفید خواهد بود. ابزارهای زیادی برای انجام این کار وجود دارند. قابلیت های آنها از ابزارهای طراحی ساده برای کمک به شما در ساخت نمودارها، تا ابزارهای پیشرفته تری که می توانند از نمودارهای کلاس UML، کد تولید کنند، متغیر است.اگر تصمیم گرفتید و می خواهید UML را عمیق مطالعه کنید، کتاب UML Distilled نوشته Martin Fowler را به شدت توصیه می کنم، یک کتاب عالی و کوتاه است که 99.9٪ از توسعه دهندگان روی کره زمین نیاز به دانستن آن دارند!قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : آنالیز، طراحی و برنامه نویسیقسمت بعدی : آموزش اصول برنامه نویسی شی گرا : تعریف نیازمندی ها</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Sat, 04 Apr 2020 03:49:28 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : آنالیز، طراحی و برنامه نویسی</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%D8%A2%D9%86%D8%A7%D9%84%DB%8C%D8%B2-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%88-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-hub13ur5aakh</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.زمانی که واژه شی گرایی (object-oriented) را می بینید، معمولاً کلمه دیگری در کنار آن قرار دارد،برنامه نویسی شی گرا، طراحی شی گرا یا آنالیز شی گرا. اینها همه به هم متصل هستند و به این مطلب اشاره دارند که برای تهیه هر نرم افزار، باید سه کار را انجام دهید، مشکل را بفهمید، برای راه حلش برنامه ریزی کنید و در آخر، آن را بسازید، یا به عبارت دیگر آنالیز ، طراحی و برنامه نویسی. اگرچه آنها به عنوان دو مرحله جداگانه ذکر شده اند، معمولاً آنالیز و طراحی با هم بیان می شوند زیرا شامل همه چیزهایی هستند که باید قبل از نوشتن اولین خط کد انجام شود.آنالیز به این سؤال پاسخ می دهد که شما باید چه کاری انجام دهید؟ مشکلی که می خواهید حل کنید چیست؟ و طراحی مشخص میکند که چگونه باید این کار را انجام دهید. در این آموزش ما به یک فرایند آنالیز و طراحی شی گرا خواهیم پرداخت تا بتوانیم محصول قابل تحویل تولید کنیم. یک طرح مفهومی که شما (یا شاید یک تیم مجزا از برنامه نویسان)، می توانید از آن برای ساختن یک راه حل استفاده کنید.کلمه مفهومی در اینجا کلمه کلیدی است، ما هیچ کدی نمی نویسیم، ولی از نمودارها (Diagrams)، تخته وایت برد و توضیحات مکتوب استفاده خواهیم کرد، تکرار میکنم هیچ کدی نوشته نمیشه.روش های رسمی زیادی با نام و قراردادهای خاص خود وجود دارند، اما ایده ها آنها کاملاً مشابه هستند. برای این آموزش، ما یک رویکرد معمولی پنج مرحله ای را دنبال خواهیم کرد. با جمع آوری الزامات شروع می کنیم تا بفهمیم برنامه ما باید چه کاری انجام دهد. مسئله ای را که می خواهیم حل کنیم، مشخص می کنیم. پس از آن برنامه کاربردی را به زبان ساده توصیف می کنیم. مرحله سوم شامل شناسایی مهمترین اشیاست، که نقطه شروع شناسایی کلاسهای واقعی است. پس از شناسایی هر شی، مسئولیت هر شی، رفتارهای لازم هر شی و تعاملات آنها با یکدیگر را شرح می دهیم. و در آخر نمودار کلاسها (Class Diagram) که به عنوان خروجی اصلی فرایند پنج مرحله ای است را می سازیم.نمودار کلاس یک نمایش بصری از کلاس های موجود در برنامه است و آنجاست که اصول شی گرایی مانند وراثت (Inheritance) و چند ریختی (Polymorphism) وارد بازی می شوند. ما با جزئیات بیشتری به هر یک از این مراحل خواهیم پرداخت و تکنیک های مختلفی را که می توانید برای هر یک از آنها استفاده کنید را آموزش خواهیم داد.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : چند ریختی (Polymorphism)قسمت بعدی : آموزش اصول برنامه نویسی شی گرا : UML</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Sat, 04 Apr 2020 02:56:25 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : چند ریختی (Polymorphism)</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%DA%86%D9%86%D8%AF-%D8%B1%DB%8C%D8%AE%D8%AA%DB%8C-polymorphism-zu30hofa45xo</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.چهارمین مفهوم شی گرایی که بررسی خواهیم کرد چند ریختی (Polymorphism) است. معنای ساده این کلمه داشتن شکل های محتلف هست. چندین شکل برای چند ریختی وجود دارد.یک نوع از چند ریختی، چند ریختی پویا (Dynamic Polymorphism) یا چند ریختی زمان اجرا (Run-Time Polymorphism) نام دارد. به یک قهوه ساز به عنوان یک کلاس پایه (BasicCoffeeMaker) فکر کنید. این قهوه ساز متدی برای دم کردن (brew) دارد. پارامترهای ورودی برای متد دم کردن شامل قهوه و آب است. فقط لازمه که کمی صبر کنید و خروجی این متد یک لیوان قهوه داغ است!می توان از یک قهوه ساز برقی برای تهیه قهوه استفاده کرد و یا از یک قهوه ساز دستی (FrenchPress). هر دو قهوه ساز متد دم کردن رو دارن، همچنین ورودی این متدها همان قهوه و آب هست، خروجی هر دو هم یکسان خواهد بود. اما روش دم کردن قهوه در هر یک از قهوه سازها با دیگری متفاوت خواهد بود. اگرچه خروجی های هر دو متد یک لیوان قهوه است ولی ممکن است خصوصیات این دو مانند طعم و غلظت، کمی با یکدیگر فرق داشته باشد.هنگامی که می خواهیم این نوع چند ریختی را به صورت واقعی پیاده سازی کنیم، روش های مختلفی وجود دارد که می توان انجام داد. قهوه ساز دستی می تواند تمام خصوصیات (Attributes) و متدهای (Methods) قهوه ساز پایه را به ارث ببرد، سپس می تواند متد دم کردن قهوه (brew) را با متد دم کردن خودش جایگزین کنه، به اینکار بازنویسی (Overriding) میگن. این قابلیت به کلاس قهوه ساز دستی (FrenchPress) این امکان رو میده که نسخه منحصر به فرد خودش رو از متد دم کردن (brew) داشته باشه.ممکنه هر دو این کلاس قهوه سازها از یک کلاس انتزاعی (Abstract Class) با یک متد انتزاعی (Abstract Method) دم کردن استفاده کنند و یا ممکنه هر دو یک واسط (Interface) یکسان رو پیاده سازی کنند وراثت (Inheritance)، کلاسهای انتزاعی (Abstract Class) و واسطها (Interfaces) همه پیاده سازیهای احتمالی چند ریختی هستند که بعداً به آنها خواهیم پرداخت.مزیت چند ریختی پویا (Dynamic Polymorphism) اینه که به من این امکان رو میده از هر قهوه سازی که متد دم کردن رو پیاده سازی کرده و ورودیش قهوه و آب هست، بتونم یه لیوان قهوه آماده به عنوان خروجی بگیرم.شکل متداول دیگه چند ریختی، چند ریختی استاتیک (Static Polymorphism) یا زمان کامپایل (Compile-Time Polymorphism) نامیده می شود و در بسیاری از زبان های برنامه نویسی شی گرا با نام سربار کردن (Overloading) متد استفاده میشه، حواستون باشه که سربارکردن (Overloading) رو با بازنویسی (Overriding) اشتباه نکنید.سربار کردن (Overloading) به شما این امکان رو میده که بتونید توی یه کلاس چندین متد هم نام داشته باشید ولی با پارامترهای ورودی مختلف. بطور مثال متد دم کردن (brew) رو در کلاس قهوه ساز دستی (FrenchPress) در نظر بگیرید. اگه به عنوان ورودی قهوه و آب را به این متد بدم، خروجی که به من خواهد داد یه لیوان قهوه خواهد بود، ولی اگه به عنوان ورودی چای و آب رو بدم، خروجی چای خواهد بود. دم کردن با قهوه و آب و دم کردن با چای و آب دو متد مختلف هستند و کلاس قهوه ساز دستی (FrenchPress) با توجه به ورودی متدها، انتخاب میکند که کدام متد را اجرا کند.همچنین می تونید متدهایی با نام یکسان ولی تعداد پارامترهای ورودی مختلف داشته باشید. مثل متد دم کردن با سه ورودی قهوه، چای و آب. در اکثر مواقع متدهای سربار شده کاربردهای مشابه ای دارن.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : وراثت (Inheritance)قسمت بعدی : آموزش اصول برنامه نویسی شی گرا : آنالیز، طراحی و برنامه نویسی</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Sat, 04 Apr 2020 02:06:37 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : وراثت (Inheritance)</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%D9%88%D8%B1%D8%A7%D8%AB%D8%AA-inheritance-mgv2ea9ffg48</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.هنگامی که نیاز به ایجاد یک کلاس جدید داریم ممکن است همیشه ساخت آن از ابتدا ضروری نباشد. اگه در برنامه کلاسی شبیه به کلاسی که می خواهیم بسازیم وجود داشته باشه می تونیم از وراثت (Inheritance) استفاده کنیم و بر پایه کلاس قبلی، کلاس جدیدمون رو بسازیم. وراثت این امکان رو ایجاد میکنه که کلاس جدید خصوصیات (Attributes) و متدهای (Method) کلاس موجود را به ارث ببره که قابلیت خیلی خوبی برای استفاده مجدد از کدهاست.بطور مثال می خواهیم شخصیت های موجود در یک نانوایی را الگوبرداری کنیم. ممکن است با تعریف یک کلاس برای مشتریان (Customer) شروع کنیم، که دارای ویژگی هایی برای نام مشتری، شماره تلفن، آدرس ایمیل و شماره شناسه مشتری است. بعلاوه ما به کلاس مشتری متدهایی برای بروزرسانی اطلاعات تماس خود و خرید کالاها اضافه میکنیم.نانوایی، کارمند نیز دارد بنابراین ما یک کلاس کارمند (Employee) با ویژگی های نام کارمند، شماره تلفن، آدرس ایمیل و شماره شناسه کارمند ایجاد می کنیم. کارمند می تواند اطلاعات تماس خود را بروز کند، ارتقا یابد یا بازنشسته شود. حالا هر دو کلاس را با هم مقایسه کنید. همانطور که در عکس زیر میبینید این دو کلاس شباهت های زیادی به هم دارند.هر دو کلاس دارای یک نام، شماره تلفن، آدرس ایمیل و متدی برای بروزرسانی اطلاعات تماس خود هستند (موارد نارنجی رنگ در تصویر بالا)، این موارد برای همه اشخاص مشترک است. بنابراین می توانیم بجای تعریف این خصوصیات به طور جداگانه در هر کلاس، یک کلاس با تمام این خصوصیات و متدها مشترک ایجاد کنیم و سپس کلاس های مشتری و کارمند را بر اساس آن پایه گذاری کنید.عبارت مورد استفاده در اینجا، ارث بردن (Inherit) کلاس مشتری از کلاس شخص (Person) است. این بدان معناست که کلاس مشتری به طور خودکار همه خصوصیات و متدها را از کلاس شخص، بدون نوشتن کد اضافی، بدست می آورد. توجه کنید که با اضافه کردن یک خصوصیت و یا یک متد جدید به کلاس شخص، هر دو کلاس مشتری و کارمند این خصوصیت یا متد را به ارث می برند.طبق قرارداد، اگر ما یک نمودار کلاس با وراثت ترسیم کنیم، از نوع فلش نشان داده شده در تصویر بالا برای نشان دادن رابطه بین این دو کلاس استفاده خواهیم کرد، و جهت آن را نشان می دهیم.اصطلاحی که بیشتر برای این رابطه به کار می رود این است که کلاس شخص Superclass (سوپر کلاس) است و کلاس های جدید مشتری و کارمند Subclass (زیر کلاس) های آن هستند. همچنین این موارد را به عنوان کلاس والد (Parent) و کلاس فرزند (Child) نیز خواهید دید، که معمولاً در مواردی که فقط یک سطح وراثت وجود دارد دیده میشود. یا بطور مثال زمانی که چندین سطح ارث بری داشته باشیم از کلاس پایه (Base Class) و کلاس مشتق شده (Derived Class) نیز استفاده می شود.دقت کنید که کلاس های فرزند می توانند خصوصیات و متدهای خاص خودشان را نیز داشته باشند، همانطور که در تصویر بالا مشاهده میکنید کلاس مشتری (Customer) متد خرید کالا (purchase) که مختص به خودش می باشد را علاوه بر متدهای والد خود، داراست. هیچ محدودیتی برای تعداد کلاسهای فرزندی که می توانیم بر اساس یک کلاس والد ایجاد کنیم وجود ندارد. بطور مثال اگر بعدا فهمیدیم که مغازه به یک پیک برای تحویل بسته ها نیاز دارد، اضافه کردن کلاس آن بسیار ساده است. می توانیم یک کلاس پیک (Courier) ایجاد کنیم و این کلاس از کلاس شخص ارث ببرد، سپس می توانیم متدهای خاص خودش را نیز به این کلاس اضافه کنیم.علاوه بر قابلیت استفاده مجدد از کد، نکته مهم در مورد وراثت این است که اگر در کلاس والد تغییری ایجاد کنیم، به طور خودکار کلاس های فرزند نیز از آن تاثیر میگیرند. بطور مثال زمانی که ما متوجه میشویم که برای همه اشخاص باید آدرس ایمیل را نگهداری کنیم، تنها کاری که لازم است این است که به کلاس شخص خصوصیت آدرس ایمیل را اضافه کنیم و همه کلاس های فرزند می توانند از این خصوصیت استفاده کنند. بطور حتم تغییر در یک بخش (کلاس والد) بهتر از تغییر در سه بخش (کلاس های فرزند) برنامه است.در برخی زبان های برنامه نویسی مانند Pyhton و ++C به شما اجازه ارث بری همزمان از چندین کلاس والد داده می شود، از طرفی ارث بری چندگانه ممکن است کمی گیج کننده باشد.داشتن یک والد برای ارث بری معمول تر است، زبان هایی مانند C#, Java, Swift و Ruby به شما اجازه داشتن فقط یک والد برای ارث بری را می دهند.در ادامه آموزش اصول برنامه نویسی شی گرا ما نیز از ارث بری یکتا استفاده خواهیم کرد.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : کپسوله سازی (Encapsulation)قسمت بعدی : آموزش اصول برنامه نویسی شی گرا : چند ریختی (Polymorphism)</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Fri, 03 Apr 2020 16:58:25 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : کپسوله سازی (Encapsulation)</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%DA%A9%D9%BE%D8%B3%D9%88%D9%84%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-encapsulation-fc07hss3axis</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.ایده کپسوله سازی (Encapsulation) در مورد محتوی یک شی (Object) است. نه تنها برای نگه داشتن آنها، بلکه برای محافظت از آنها.ما خصوصیات (attributes) یا داده های (data) یک شی را با متدهایی که بر روی آن داده ها در همان واحد یا کلاس کار می کنند، جمع (bundle) می کنیم. یکی از دلایل این کار محدود کردن دسترسی به برخی از اجزای شی است. فرض کنید که من یه شیشه (jar) پر از کلوچه دارم و بقیه فقط اجازه دارن از طریق من به کلوچه های توی شیشه دسترسی داشته باشن.کلاس CookieJar دارای یک ویژگی است که تعداد کلوچه های موجود در شیشه را نشان می دهد. زمانی که نمونه ای (Instance) از CookieJar خود را ایجاد می کنم ، نمی خواهم که شما یا هر بخش دیگری از برنامه من بتوانید به تعداد کلوچه ها دسترسی پیدا کرده و مستقیماً آن را تغییر دهید. شاید برای شما سوال بشود که مگر نمی شود به بخش های دیگر کد اعتماد کرد! اینجا فقط بحث اعتماد نیست. اگر به شما اجازه دهم به طور مستقیم چیزهایی مانند شماره (numCookie) را تغییر دهید، ممکن است شما ناخودآگاه آن را به چیزی نامعتبر مانند منفی یک تبدیل کنید. این مقدار برای تعداد کلوچه ها معنی ندارد و ممکن است باعث کرش کردن (crash) برنامه من شود. دلیل دیگر برای محدود کردن دسترسی این است که، خُب شاید بخواهم تعداد کلوچه هایی که به شما می دهم را محدود کنم!برای کنترل دسترسی به این ویژگی (numCookie)، آن را مخفی می کنم، بنابراین فقط از داخل شی CookieJar قابل دسترسی است. سپس متدی به نام requestCookie (درخواست کلوچه) اضافه می کنم که از سایر قسمت های برنامه قابل دسترسی است. هنگامی که از متد requestCookie استفاده می کنید، یک کلوچه دریافت خواهید کرد و متد فوق خصوصیت تعداد کلوچه ها (numCookie) را تغییر می دهد.یکی از اصول کپسوله سازی این است که یک شی نباید چیزی را در مورد خودش در دسترس قرار دهد، مگر اینکه واقعا سایر بخش های برنامه نیاز باشد با آن کار کنند. به این مفهوم جعبه سیاه گفته می شود. شما فقط متد requestCookie را صدا می زنید و نیازی نیست که بدانید این متد چگونه پیاده سازی شده و کار میکند.شاید پیش خودتون بگید که من به عنوان برنامه نویس باید دقیقا بدونم که توی متد چه اتفاقی میفته، خب آیا شما می دونید که تلفن همراه چطور تماس میگیره، ممکنه بکید که خب شماره میگیرم و تماس برقرار میشه، ولی آیا میدونید که دقیقا داخل تلفن همراه شما چه اتفاقی میفته، واقعا مهم نیست، شما ممکنه یه تلفن جدید بخرید، ظاهرا شما دارید شماره میگیرید و تماس برقرار میشه ولی ممکنه که اتفاقات داخل تلفن همراه جدید شما با قبلی تفاوت داشته باشه، ولی چون یه خروجی یکسان (برقراری تماس) به شما میده خیلی برای شما تفاوتی نمیکنه.یكی از مهمترین مزایای استفاده از شی گرایی، این است كه به ما این امکان را می دهد كه با خیال راحتتر روش كار شی را بدون تغییر مابقی برنامه تغییر دهیم.ممکنه هنگامی که من برای اولین بار کلاس CookieJar را نوشتم، تعداد کل کلوچه ها را به عنوان یک مقدار واحد بیان کردم. ولی بعداً تصمیم می گیرم از سه مقدار جداگانه استفاده کنم تا تک تک انواع کلوچه ها را بطور جداگانه پیگیری کنم. (مثلا علاوه بر خصوصیت numCookie دو خصوصیت جدید به نام های numChocolateCookie و numSugerCookie هم اضافه کنم.) از آنجایی که این خصوصیات را از بقیه برنامه مخفی کردم، دیگر لازم نیست نگران خرابی قسمت های دیگر برنامه خودم که از متد requestCookie برای گرفتن کلوچه ها استفاده کرده اند، باشم. فقط لازمه که کلاس و متد requestCookie رو برای انجام این کار تغییر بدم.سوالی که ممکنه پیش بیاد اینه که من خودم کد رو نوشتم، چرا باید کد خودم رو از خودم مخفی کنم؟!!در واقع جواب این سوال اینه که مسئله فقط مخفی کردن کد نیست بلکه کاهش وابستگی بین بخش های مختلف برنامه است. اگه این اصل رو رعایت نکنیم با یک تغییر کوچک باید بخش های زیادی از برنامه خودمون رو تغییر بدیم.ولی میزان این مخفی کردن چقدر باید باشه؟ خب زبان های برنامه نویسی مختلف سطوح مختلفی از پنهان کردن خصوصیات و متد ها رو ارائه میدن، ولی قانون کلی اینه که تا جایی که میشه اصل کپسوله سازی رو رعایت کنیم.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : انتزاع (Abstraction)قسمت بعدی : آموزش اصول برنامه نویسی شی گرا : وراثت (Inheritance)</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Fri, 03 Apr 2020 15:23:49 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : انتزاع (Abstraction)</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%D8%A7%D9%86%D8%AA%D8%B2%D8%A7%D8%B9-abstraction-sn0u7azs2udz</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.چهار ایده اساسی در برنامه نویسی شی گرا وجود دارد که باید هنگام ایجاد کلاس ها به خاطر داشته باشید :- انتزاع (Abstraction)- چند ریختی (Polymorphism)- وراثت (Inheritance)- کپسوله سازی (Encapsulation)و یکی از راه هایی که دوست دارم این اصطلاحات را به خاطر بسپارم، با اختصار خوشمزه A-P-I-E است.A Pie مثل پای سیب!این چهار کلمه ممکنه که در ابتدا ترسناک به نظر برسن،اما احتمالا بیشتر اونها رو در تفکرات و گفتگوهای روزانه تون استفاده میکنید، حتی اگر از این کلمات آکادمیک برای توصیف اونها استفاده نکنید.بذارید حرفم رو با اولین کلمه اثبات کنم، انتزاع (Abstraction)اگر من بگویم &quot;شخص&quot; شما می دانید منظور من چیست. من مشخص نکردم که به چه کسی فکر می کردم. من حتی شخص را توصیف نکردم، زن یا مرد، بلند یا کوتاه، شاید شخصی را به طور خاص تصور کرده باشید. خُب، ولی لازم نیست که من شخصی که شما تصور کردید رو بشناسم چون شما مفهوم شخص رو می دونید. همچنین به اندازه کافی افراد واقعی رو می شناسید و با اونها برخورد داشتید تا مفهوم انتزاعی &quot;شخص&quot; رو درک کنید.انتزاع به این معنی است که ما به جای یک مثال خاص روی ویژگیهای اساسی چیزها تمرکز می کنیم. با استفاده از انتزاع، ما به طور خودکار آنچه را بی اهمیت یا بی ربط است رو رها می کنیم. الگوی ذهنی شما از یک شخص ممکن است دارای نام، جنسیت و قد باشد، اما احتمالاً شامل عطر و مزه و تزیینات نمیشه، اینها چیزهایی هستند که اگر من توصیف یک کلوچه رو کرده بودم، منطقی بود، اما این ویژگی ها مربوط به یک شخص نیست.انتزاع به معنای ایده یا مفهوم شخص کاملاً جدا از هر نمونه خاصی ست. این کاریه که همیشه در گفتگوها انجام میدیم، و این در قلب برنامه نویسی شی گراست چونکه این همون کاریه که ما هنگام ساختن کلاس انجام میدیم. من برای هر شخصی که باید تو برنامه تعریفش کنم یک کلاس جداگانه ایجاد نمیکنم.من فقط روی خصوصیات اساسی چیزی که به اون اهمیت میدم تمرکز می کنم و فقط یه کلاس برای شخص (Person) مینویسم. خصوصیات و رفتارهایی از شخص رو در کلاسش قرار میدیم که برای برنامه کاربردیمون اهمیت داشته باشه، مثلا اگه رنگ چشم برای برنامه ما اهمین نداشته باشه این خصوصیت رو در کلاس قرار نمیدیم، از طرفی اگه قد برای برنامه ما مهم باشه اون رو در کلاسمون قرار میدیم. این کار رو برای رفتار های شخص هم انجام میدیم.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : کلاس هاقسمت بعدی : آموزش اصول برنامه نویسی شی گرا : کپسوله سازی (Encapsulation)</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Fri, 03 Apr 2020 04:09:55 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : کلاس ها</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%DA%A9%D9%84%D8%A7%D8%B3-%D9%87%D8%A7-wesrqhvadh1e</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.اشیا بطور خودکار در برنامه ها ظاهر نمیشن. ما باید اونها را بسازیم و این کار را بوسیله کلاس ها انجام میدیم. یک کلاس شامل توضیحات مفصل، تعریف و قالب یک شی می باشد ولی خودش یک شی نیست. هنگامی که ما یک کلاس را نوشتیم و تعریف کردیم ، می توانیم از آن برای ایجاد اشیا بر اساس کلاس نوشته شده استفاده کنیم.از یک کلاس می توانیم برای تولید چندین شی استفاده کنیمکلاسهای مختلف به ما این امکان را می دهند که انواع مختلفی از اشیا را ایجاد کنیم. کلاس ها مانند مجموعه قالب های برش کلوچه ما هستند. یک قالب برش خاص دایره ای می تواند کلاس ایجاد کننده کلوچه های دایره ای باشد. این قالب مشخص می کند که کلوچه چگونه باید باشد. اما قالب برش یک کلوچه به خودی خود یک کلوچه نیست. ما به این قالب برش نیاز داریم تا یک سینی پر از کلوچه های گرد را ایجاد کنیم.به یاد داشته باشید که همیشه اول باید کلاس داشته باشیم تا بتوانیم یک شی ایجاد کنیم. شما نمی توانید کلوچه های گرد را بدون قالب برش گرد درست کنید.قالب های مختلف کلوچه همانند کلاس های مختلف عمل میکنندکلاس : قالب کلوچه گرد    |    شی : کلوچه گردسه مؤلفه وجود دارد که یک کلاس را در برنامه نویسی شی گرا تشکیل می دهند. هر کلاس یک اسم (Name) دارد، به عنوان مثال، کلوچه گرد(roundCookie). یک کلاس می تواند دارای خصوصیاتی (Attributes) برای توصیف شی باشد، از جمله وزن، رنگ و اینکه آیا روی کلوچه شکر دارد یا خیر! همچنین می تواند رفتارهایی (Behavior) نیز داشته باشد، کارهایی که شی می تواند انجام دهد ، مانند تزئین شدن یا خورده شدن.همچنین ممکن است با اصطلاحات دیگری (تا حدودی قابل تعویض)، برای این کلمات نیز روبرو شوید. به جای نام، ممکن است نوع (Type) را ببینید، زیرا هر کلاس، اشیایی از یک نوع خاص را ایجاد می کند. و همانطور که قبلاً در مورد آن صحبت کردیم، ممکن است خصوصیات (Attributes) را به عنوان Properties یا به طور عمومی تر به عنوان Data نیز مشاهده کنید، و از رفتارها (Behaviors) نیز به عنوان Operations یاد شود.هنگامی که این رفتارها را به عنوان کد می نویسیم، معمولاً به آنها متد (Method) گفته می شود. متد، قطعه کد یا رویه ای است که می توان برای انجام برخی کارها فراخوانی کرد و همچنین ممکن است مقداری را برگرداند.سوالی که اینجا مطرح میشه اینه که تفاوت بین متد (Method) و تابع (Function) چیه؟ خب متدها در اصل تابع هستند ولی با این تفاوت کلیدی که متدها همیشه به عنوان بخشی از یک کلاس تعریف میشن، بنابراین اونها در هر شی ساخته شده از کلاس وجود دارن و از اونجایی که متدها به عنوان بخشی از شی هستن فقط به دیتای موجود در اون شی دسترسی دارن.این مفاهیم کلاس و شی ممکنه در ابتدا کمی گیج کننده باشه، بنابراین بیاید نگاهی به کلاس کلوچه گرد بکنیم. غالبا نمودارهایی (diagram) که برای طراحی یک کلاس استفاده میشه چیزی مشابه شکل زیر هستن، نام در بالا، خصوصیات در وسط و رفتارهای در انتها میاد. بعدا جزییات بیشتری از این نمودار رو بررسی خواهیم کرد.گرچه کلاس به ما میگه که هر کلوچه گرد،اندازه، رنگ و icing داره، اما مقادیر واقعی برای اندازه، رنگ و icing را مشخص نمی کند و فقط تعریف آنها را بیان میکند. اما بعد از تعریف کلاس، می تونیم از طریق فرآیندی به نام نمونه سازی (Instantiation)، اشیا را بر اساس کلاس ایجاد کنیم. در واقع هر شی یک نمونه (Instance) از کلاس خود است. ما دو شی نمونه (Instance) از این کلاس ساختیم، ولی در واقع هیچ محدودیتی برای ساخت نمونه ها وجود نداره. حالا، هر یک از نمونه ها، شی مستقل از سایر اشیاست و هویت خاص خودش رو داره، همچنین داده های خودش رو نیز دارد. کلاس کلوچه گرد (roundCookie) به ما میگه که هر کلوچه گرد یک رنگ دارد، اما اشیا ساخته شده از این کلاس می تونن مشخصات خاص خودشون رو داشته باشن، مثلا کلوچه اول (barronCookie) میتونه رنگ قرمز و کلوچه دوم (oliviaCookie) میتونه رنگ قهوه ای داشته باشه. دقت کنید که این دو کلوچه شی محسوب می شوند.توجه داشته باشید با تغییر در خصوصیات یک کلوچه (مانند اندازه، رنگ و icing)، خصوصیات کلوچه های دیگر تغییر نخواهد کرد. همچنین برای ایجاد اشیا، همیشه ابتدا به کلاس نیاز داریم.خوشبختانه ، اکثر زبانهای شی گرا با مجموعه ای از کلاس های از پیش تعریف شده ارائه می شوند. بنابراین می توانید بلافاصله اقدام به ایجاد اشیا کنید. چیزهای مقدماتی مانند رشته ها (strings)، تاریخ ها (dates) و آرایه ها (arrays) معمولا مشمول کلاس های ارائه شده میشن، بنابراین نیازی نیست که هر برنامه را با تعریف دوباره کلاسهای مشترک (مانند رشته ها، تاریخ ها و آرایه ها) شروع کنید. تمام این کلاس ها از قبل تعریف شده اند و سپس در چهارچوب ها (Frameworks) یا کتابخانه ها (Libraries) جمع شده اند. در زبان Java شما Java Class Library رو دارید که نزدیک به 6,000 کلاس آماده داره، همچنین NET Framework. برای زبان #C و VB.Net  از این هم بیشتر کلاس داره. برای ++C نیز C++ Standard Library وجود داره، همینطور برای Ruby و Python نیز کتابخانه هایی وجود داره.امیداوارم تونسته باشم تعریف خوبی از کلاس و تفاوت اون با اشیا رو براتون توضیح داده باشم. اگر سوالی درباره این مقاله داشتید لطفا در نظرات بپرسید.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : اشیاءقسمت بعدی : آموزش اصول برنامه نویسی شی گرا : انتزاع (Abstraction)</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Fri, 03 Apr 2020 02:34:33 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : اشیاء</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%D8%A7%D8%B4%DB%8C%D8%A7%D8%A1-wozufylzzzl1</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.ایده ای که پشت محاسبات شی گرایی هست باعث میشه شما راجع به برنامه نویسی همانند دنیای واقعی فکر کنید. بنابراین برای اینکه بپرسیم شی (Object) در برنامه کامپیوتری چی هست باید بپرسیم که شی در دنیای واقعی چی هست؟- بطور مثال آیا کلوچه شی هست؟- بله، حتما.-آیا این لیوان سفید یک شی است؟-مطمئنا. هر دوی آنها شی هستند.-آیا این لیوان سیاه یک شی است؟- یقینا- آیا لیوان سفید و سیاه هر دو شی یکسانی هستند؟- خیر، اگرچه که هر دوی آنها لیوان های مشابهی هستند ولی یکی نیستند، اینها دو شی مجزا هستند و هر کدام موجودیت خود را دارند. آنها موجودیت خود را دارند و از تمام اشیا دیگر مستقل هستند.هر شی مشخصات خودش را دارد، ویژگی های ذاتی که حالت فعلی آن را مشخص میکند. بطور مثال یک لیوان می تواند پر، خالی و یا چیزی بین این دو باشد. پر کردن یک لیوان با قهوه به این معنی نیست که تمام لیوان های دنیا پر شده اند. وضعیت فعلی این لیوان پر شده مستقل از بقیه لیوان های خالی ست زیرا هر کدام از لیوان ها شی های مجزایی هستند. برای یک لیوان بجز خصوصیت پر یا خالی بودن خصوصیات دیگری نیز وجود دارد، مانند اندازه، رنگ و .... خب، بیشتر اشیا چندین خصوصیت دارند، بعضی از این خصوصیات مانند رنگ و اندازه ثابت خواهند بود در حالیکه بعضی مانند اینکه این لیوان پر یا خالی است ممکن است در طول دوره حیات تغییر بکنند.Attributes، Properties، Characteristics، States، Fields، Variables همه اینها اصطلاحات یکسانی هستن که معمولا برنامه نویس ها استفاده میکنن. معنی این اصطلاحات با توجه به موقعیت و زمینه خاص، بواسطه زبان برنامه نویسی ممکن است کمی متفاوت باشه.خب فکر کردن راجع به لیوان به عنوان یک شی ساده است چون اون یه شی تک هست، اما راجع به چیزهای پیچیده مانند تلفن همراه که از صدها جز و قطعه الکترونیک تشکیل شده چطور؟ جواب اینه که شی بودن ربطی به پیچیدگی نداره و ممکنه که یک شی از اشیا دیگه تشکیل شده باشه، میتونیم راجع به تلفن همراه به عنوان یک چیز در دنیای واقعی صحبت کنیم، بنابراین میشه به تلفن همراه به عنوان شی محاسباتی فکر کرد که خصوصیاتی مانند رنگ، اندازه و وزن داره. علاوه بر این تلفن همراه رفتارهایی هم داره مانند اینکه میتونه زنگ بخوره و پیام بفرسته. توجه کنید که رفتار هر شی مخصوص به خودشه، مثلا لیوان نمیتونه زنگ بخوره یا پیام بده!هویت (Identity)، خصوصیات (Attributes) و رفتارها (Behaviors) سه چیزی هستند که اشیا رو در برنامه نویسی شی گرا توصیف میکنن. هر شی در برنامه کامپیوتری متکی به خود (self-contained) است. بنابراین شی هویت (Identity) خود را مستقل از بقیه اشیا دارد. اشیا خصوصیات (Attributes) خودشان را دارند که وضعیت فعلی آنها را توصیف میکنه، همچنین آنها رفتارهای (Behaviors) مربوط به خودشان را دارند که می توانند انجام دهند.تمام مثال هایی که گفتیم مانند لیوان،کلوچه و تلفن همراه رو میتونیم لمس کنیم و ببینیم ولی نرم افزار معمولا چیزهایی رو توصیف میکنه که ملموس نیستن، بنابراین آیا اشیا در یک برنامه می توانند نمایانگر چیزی بیش از چیزهای فیزیکی باشند؟؟؟ در برنامه نویسی، ایده شی برای توصیف چیزهای غیر ملموس هم بکار برده میشه، مانند یک تاریخ، یک زمان سنج و یا یک حساب بانکی. شما نمی تونید یک حساب بانکی را در زندگی واقعی بصورت فیزیکی لمس کنید یا در دست بگیرید، اما همچنان ایده خوبی است که با تعریف یک شی مطابقت دارد. یک حساب بانکی دارای هویت است و از حساب بانکی دیگر جداست، ویژگی هایی مانند شماره حساب و تراز مالی دارد، همچنین رفتارهایی مانند واریز و برداشت پول دارد.یکی از چالش های طراحی شی گرایی این است که آیا چیزی در برنامه شما باید به عنوان یک شی در نظر گرفته شود یا خیر؟ این مسئله وقتی که با لیوان، شخص و سند سروکار دارید آسونه ولی اگر بخواهید یک برنامه مدیریت رویداد (Event Management) رو بسازید، چه میکنید؟ آیا یک رویداد میتونه یک شی باشد؟ خب فقط از خودتون بپرسید که آیا این یک نام است؟ نام ها فقط چیزهای فیزیکی نیستند بلکه افراد ، مکانها و ایده ها یا مفاهیم نیز نام هستند. به عنوان یک تست ساده ، اگر در زبان انگلیسی توانستید جلوی آن کلمه The قرار دهید آن کلمه می تواند به عنوان شی در نظر گرفته شود. مانند The Mug, The Person, The Document، ولی کلماتی مانند زنگ زدن و یا پیام دادن را نمی توان به عنوان شی بکار برد، اینها فعل هستند و رفتار یک شی را توصیف میکنند. ما باید این افعال را نیز شناسایی کنیم زیرا برنامه بدون رفتار خیلی مفید نخواهد بود. اما همانطور که از نام شی گرایی پیداست ، هنگامی که نوبت به ساختن یک برنامه شی گرا می رسد ، تمایل داریم ابتدا روی نام متمرکز شویم.قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : تفکر شی گراقسمت بعدی : آموزش اصول برنامه نویسی شی گرا : کلاس ها</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Fri, 03 Apr 2020 00:17:03 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا : تفکر شی گرا</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-%D8%AA%D9%81%DA%A9%D8%B1-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-q8mxuydckegi</link>
                <description>این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.خیلی از زبان های محبوب برنامه نویسی شی گرا هستن، ولی شی گرایی تنها راه نوشتن برنامه نیست. برای فهمیدن اینکه چه موقع و چرا شی گرایی مفید خواهد بود بهتره اون رو با روش های دیگه برنامه نویسی مقایسه کنیم، زبان های برنامه نویسی رویه ای (Procedural programming) مانند C.در کدنویسی رویه ای، برنامه به عنوان یه سری طولانی از دستوراته که باید پشت سر هم اجرا بشن، بعضی از برنامه ها ممکنه بوسیله توابع و یا رویه ها (Subroutine) سازماندهی بشن تا بتونیم کد ماژولار و قابل نگهداری داشته باشیم اما هدف نهایی رسیدن از نقطه A به نقطه B برای انجام دادن تسک هاست.این روش یه رویکرد مستقیم رو به جلو هست که میشه برای دستور آشپزی ازش استفاده کنم. برنامه یا دستور پخت میگه که برای تهیه یه کیک باید اجزا رو ترکیب کنیم بعد اون ها رو بریزیم توی یه ظرف و خوب هم بزنیم، فقط لازمه که دستورات رو پشت سر هم اجرا کنیم و تمام، کیک ما آماده ست.دیده شده که برنامه نویسان تازه کار تمایل به برنامه نویسی رویه ای دارن چون فکر کردن به برنامه ای که مراحل پشت سرهم داره راحت تره.خب حالا بریم سراغ انجام کار قبلی یعنی پخت کیک به شیوه شی گرا:بجای توضیح توالی مراحل، شی های موجود در آشپزخانه را توضیح میدیم، ماهیتابهِ کیک، فر و همزن و اینکه هر کدوم از اینها چه کاری میتونن انجام بدن.بنابراین بجای نوشتن یه تک برنامه بزرگ، کد شی گرا ما به چندین شی خودمحور تقسیم میشه. تقریبا مشابه برنامه های کوچک دیگر، هر شی شامل دیتا و منطق خودش هست که توضیح میده چطور باید با بقیه شی ها رفتار کنه.ایده اینه که میتونیم از این اشیا برنامه ریزی شده همانند اشیا در دینای واقعی استفاده کنیم همانند همزن که  میتونه بصورت یکپارچه مخلوط رو هم بزنه، ماهیتابه کیکی که مخلوط رو درونش میریزیم و فری که هر چیزی رو درونش بذاریم میتونه بپزه.نتیجه نهایی پخت کیک به روش رویه ای و روش ما که شی گرایی هست یکسانه، هر دو کیک میپزن! اما شیوه فکر راجع به مسئله و سازماندهی کدها بسیار متفاوت هست.هر کدوم از این رویکردها سود و زیان خودشون رو دارن که متناسب با وضعیت از اون ها استفاده میشه. مزیت اصلی استفاده از شی گرایی قابلیت استفاده مجدد کد هست.اگه ما بخواهیم چیزی بجز کیک درست کنیم، مثلا کلوچه، از قبل قابلیت همزدن و پختن توی فر رو آماده کردیم، پس میتونیم دوباره از اونها استفاده کنیم. برای اینکار احتیاج داریم که یک شیء جدید برای ساخت کلوچه خودمون ایجاد کنیم، بله سینی کلوچه، میتونیم سینی کلوچه رو بر پایه ماهیتابه کیکی که داریم بسازیم چون خیلی از خصوصیاتشون مشترک هست.برنامه نویسی شی گرا به تنهایی یک زبان نیست، بلکه به عنوان یک الگو برنامه نویسی معرفی میشه. مجموعه ای از ایده ها که توسط بسیاری از زبان های برنامه نویسی پشتیبانی میشه. همچنین الگوهای دیگر برنامه نویسی هم وجود دارن که خارج از برنامه نویسی رویه ای و شی گرایی هستن. اگر به علوم کامپیوتر علاقه مند باشید ممکنه به زبان های برنامه نویسی منطقی (Logic programming) مانند Prolog و یا زبان های برنامه نویسی تابعی (Functional programming) مانند Haskell برخورد کرده باشید هر چند هر دو اونها کاربردهای خاص دارند. ولی برای تهیه برنامه های کاربردی و عملگرا مانند برنامه های کاربردی وب، اپلیکیشن های موبایل، برنامه های کاربردی دسکتاپ و یا توسعه بازی ها تقریبا بطور قطع از برنامه نویسی شی گرا استفاده میشه. در واقع اکثر زبان های برنامه نویسی پرطرفدار، امروزه شی گرا هستند.خیلی از زبان ها چندین الگوی برنامه نویسی رو پشتیبانی میکنن، به این معنی که شما میتونید از رویکرد برنامه نویسی شی گرا استفاده کنید و یا از رویکرد رویه ای.زمانی که اولین بار برنامه نویسی شی گرا رو یاد گرفتم متوجه شدم که اکثر برنامه های کوچکی که می نوشتم خیلی سریعتر و راحتتر بوسیله برنامه نویسی رویه ای به جواب میرسیدن، مقدار کدی که برای برنامه نویسی شی گرا می نوشتم تا به همون نتیجه برسم بسیار بیشتر از قبل بود. احتمالا شما هم در حین آموزش همین حس رو خواهید داشت. توجه داشته باشید که ما از مثال های کوچک و ساده برای آموزش استفاده میکنیم ولی ارزش شی گرایی زمانی مشخص میشه که پروژه شما بزرگ میشه و باید تغییر کنه.قسمت بعدی : آموزش اصول برنامه نویسی شی گرا : اشیاء</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Thu, 02 Apr 2020 20:52:52 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش اصول برنامه نویسی شی گرا</title>
                <link>https://virgool.io/@mkxd990/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B5%D9%88%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7-ai0xytb23azv</link>
                <description>- به عنوان کسی که کد نویسی رو دوست داره، به محض اینکه ایده ای برای یه اپلیکیشن به دهنم میرسه میپرم پشت کامپیوتر برای برنامه نویسی.- و به عنوان کسی که مدیر تیم توسعه نرم افزار هست، میدونم که این کار آخرین کاریه که باید انجام بشه.نرم افزار های خوب با طراحی شروع میشن و شما ممکنه وقتتون رو با رفتن مسیر اشتباه هدر بدید.در این آموزش قصد دارم به شما اساس تحلیل و طراحی برنامه نویسی شی گرا رو آموزش بدم. کاری که باید قبل از نوشتن اولین خط کدتون انجام بدید، طراحی نرم افزار شماست.زبان های برنامه نویسی شی گرا برای هر چیزی استاندارد شده اند، از توسعه وب تا برنامه های تحت دسکتاپ.با یه طراحی خوب شما میتونید نرم افزارهایی بسازید که قابل انعطاف (Flexible)، قابل نگهداری (Maintainable) و قابل توسعه (Extensible) باشن.این آموزش رو با مفاهیم پایه ای و واژه شناسی درباره توسعه شی گرایی شروع میکنیم، بعد از اون سراغ پروسه ایده یه نرم افزار میریم، چیزهایی مثل نوشته های پشت یه دستمال کاغذی و اینکه چطور باید اون ها رو به بخش های درستی تقیسم کنیم تا دقیقا بدونیم باید چه کدی بنویسیم.توی این آموزش هیچ کدی نوشته نمیشه چون در پروسه طراحی هیچ نیازی به کدنویسی نیست، در عوض برای  مدل تصویری نمودار سیستم شی گرایی از اجزا زبان مدل‌سازی یکپارچه یا UML استفاده میکنیم. اینجوری میتونید ایده خودتون رو  با دیگران بیان کنید.اگرچه توی این آموزش هیچ کدی نوشته نمیشه ولی ما مثال های کوتاهی از کدها رو با زبان های محتلف بررسی خواهیم کرد، بنابراین شما باید حداقل دانشی از برنامه نویسی داشته باشید. مفاهیم پایه ای مثل متغیرها، توابع، حلقه ها و شرط ها.اگه تا حالا با برنامه نویسی شی گرا کار کرده باشید احتمالا به مفاهیم پایه مانند کلاس و آبجکت برخورد داشتید، اما ممکنه از اونها خیلی استفاده نکرده باشید و یا ممکنه شما برنامه نویسی باشید که سالها در زبان های غیر شی گرا تجربه داشته باشید. اگر شما جز این دسته برنامه نویس ها هستید این آموزش خیلی خوبی برای شماست تا بتونید شی گرا فکر کنید.این آموزش راجع به پروسه طراحی شی گرایی هست نه برنامه نویسی، بنابراین ابزار ما قلم و کاغذ هست و از نرم افزارهای ویرایش متن و IDE استفاده نمیکنیم. طراحی شی گرا یه پروسه فرمال نیست بلکه ترکیبی از ایده ها و تکنیک هاست که به شما این اجازه رو میده که برنامه های بهتر و پیچیده تری رو بسازید.توی این آموزش چندین چالش و مسئله داریم، حتی اگه وقت ندارید که راه حل خودتون رو برای اونها پیدا کنید، توصیه میشه حداقل راجع به اونها فکر کنید و راه حل های ما رو ببینید.اصول شی گرایی - تفکر شی گرا- اشیاء- کلاس ها- انتزاع (Abstraction)- کپسوله سازی (Encapsulation)- وراثت (Inheritance)- چند ریختی (Polymorphism)- آنالیز، طراحی و برنامه نویسی- UMLنیازمندی ها- تعریف نیازمندی ها- نیازمندی ها + FURPS- چالش دستگاه پخش موسیقیموارد استفاده (Use Cases)- موارد استفاده (Use Cases)- ...در حال تکمیل آموزش ...</description>
                <category>محمد علی نژاد</category>
                <author>محمد علی نژاد</author>
                <pubDate>Thu, 02 Apr 2020 18:10:07 +0430</pubDate>
            </item>
            </channel>
</rss>