<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Sayna Rahmani</title><link>https://virgool.ir/feed/@rahmanisaina939</link><description></description><language>fa</language><pubDate>2026-11-11 21:34:15</pubDate><image><url>https://files.virgool.ir/upload/users/92450/avatar/b9MDWg.png</url><title>Sayna Rahmani</title><link>https://virgool.ir/@rahmanisaina939</link></image><item><title>آموزش برنامه نویسی شی گرا در ++C (قسمت 3)</title><link>https://virgool.ir/@rahmanisaina939/آموزش-برنامه-نویسی-شی-گرا-در-c-قسمت-3-xuxdtbukakez</link><description>سلام به همراهان عزیز , در 2 مطلب قبلی مفاهیم شی گرایی را به طور کامل بیان کردیم ; در این مطلب به چگونگی استفاده از عملگرها می بردازیم و شی گرایی را به اتمام می رسانیم.سربار گذاری عملگر در ++C :عملگر های موجود ( + , = , - , ++ , ...) در زبان ++C برای کار کردن با انواع اصلی داده (یعنی ...,int,float,char) سازگاری دارند ; ولی وقتی یک کلاس جدید تعریف می کنیم در واقع با انواع جدیدی از داده سرکار داریم که عملگر چیزی درمورد این اشیا نمی داند و نمی تواند به درستی با آن ها کار کند به همین دلیل باید چگونگی عملکرد عملگرهای موجود را برای برنامه تعریف کنیم ; به این عمل سربار گذاری عملگر گویند.در سربار گذاری عملگر از operator استفاده می کنیم ; در کد متوجه می شوید.اشاره گر this :اشاره گر this یک اشاره گر درونی و مخفی در زبان ++C می باشد که به شی جاری اشاره می کند ; منظور از شی جاری , شی ای است که هم اکنون عملی بر روی آن انجام شده است.برای درک بهتر مباحث گفته شده به قطعه کد زیر دقت کنید :در این کد ابتدا کلاسی به نام  location تعریف کرده ایم که هریک از اشیا آن دارای طول و عرض جغرافیایی می باشند ; در خط 16.17 دو متد جهت سربارگذاری عملگر + , = معرفی کرده ایم , تعاریف این دو متد سربارگذاری به ترتیب در خطوط 24 - 19 و 31 - 25 قرار گرفته اند. در بدنه متد ()=operator طول و عرض جغرافیایی شی سمت راست = را در طول و عرض جغرافیایی شی سمت چپ = قرار می دهیم ; نتیجه این جایگزینی را در خط 23 با استفاده از اشاره گر this برگشت داده ایم. در خطوط 31 - 25  متد مربوط به سربارگذاری عملگر جمع (+) را می بینیم. در این متد ابتدا یک شی موقتی از کلاس location به نام temp تعریف کردیم. سپس طول و عرض جغرافیایی شی سمت راست + به صورت نظیر به نظیر با طول و عرض جغرافیایی شی سمت چپ + جمع شده و نتیجه در شی temp قرار گرفته است. پس از آن شی temp را به عنوان حاصل جمع برگشت داده ایم.در برنامه اصلی (main) اشیا x , y , z  را تعریف کرده و ابتدا مقادیر دو شی x و y را در خروجی چاپ کرده ایم. عملیات اصلی که در این برنامه باعث فراخوانی دو متد سربارگذاری تعریف شده می شود در خط 39 واقع شده است. در نهایت در خطوط 40.41 مقدار شی z در خروجی چاپ شده است.تابع دوست (Friend function) :به خاطر داریم که اعضای محرمانه (private) یک کلاس فقط قابل دسترسی در داخل همان کلاس می باشند ولی اینجا می خواهیم یک استثنا معرفی کنیم که تابع دوست نام دارد ; تابع دوست با اینکه خارج از کلاس می باشد ولی اجازه ی دسترسی به اعضای محرمانه کلاس را دارد.به عنوان مثالی از تابع دوست کلاس به قطعه کد زیر توجه کنید , در این قطعه کد مجددا عملگر + را سربارگذاری کرده ایم ; دلیل اینکه این بار متد سربارگذاری عملگر + را به صورت تابع دوست کلاس معرفی کردیم این است که این تابع این بار دو پارامتر از جنس کلاس دارد. چنین تابعی نمی تواند عضو کلاس باشد. تنها چاره این است که این متد را به عنوان تابع دوست کلاس معرفی کنیم.به دو نکته توجه داشته باشید :1. از عبارت friend در ابتدای اعلان تابع استفاده می کنیم (خط 17).2. قبل از اسم متد سربارگذاری , عبارت ::location وجود ندارد (خط 25). همین مسئله نشان می دهد که این متد یک تابع معمولی بوده و عضو کلاس نیست. خروجی قطعه کد زیر همانند قبل است.سربارگذاری عملگرهای افزایشی و کاهشی ( ++ , - - ) :در قطعه کد زیر به عنوان مثال عملگر افزایشی ( ++ ) را سربارگذاری کردیم ; می دانیم که این عملگر بصورت پیش افزایشی ( x++ ) و پس افزایشی ( ++x ) قابل استفاده است. عملگر کاهشی ( - - ) نیز بصورت مشابه قابل سربارگذاری است. در خطوط 16.17 دو متد با نام یکسان و پارامتر متفاوت جهت سربارگذاری عملگرهای پیش افزایشی و پس افزایشی اعلان شده است. متد دوم سربارگذاری عملگر پس افزایشی را انجام می دهد. پارامتر int در نظر گرفته شده تنها برای تمایز دو حالت پیش افزایشی و پس افزایشی بوده و کاربرد دیگری ندارد.در متد مربوط به سربارگذاری عملگر پیش افزایشی ( خطوط 25 - 20 ) به هر کدام از اجزا طول و عرض جغرافیایی یک واحد اضافه شده است. نتیجه نیز با استفاده از اشاره گر this برگشت داده شده است. برای حالت پس افزایشی , از آنجا که ابتدا محاسبه صورت گرفته و سپس عمل افزایش انجام می شود , ابتدا مقدار اولیه شی موردنظر در شی موقتی temp ذخیره شده و سپس عمل افزایش انجام می شود. در نهایت شی temp (مقدار اولیه شی مورد نظر) برگشت داده می شود.سربارگذاری عملگرهای انتساب مرکب ( =+ ,  … ) : در قطعه کد زیر به عنوان مثال عملگر انتساب مرکب =+ را سربارگذاری کردیم. سایر عملگرهای انتساب مرکب ( =- , =* , =/ , …) نیز بصورت مشابه قابل سربارگذاری هستند. در خط 13 متد سربارگذاری موردنظر اعلان و در خطوط 20 - 15 پیاده سازی شده است. می بینیم که این بار هم نتیجه با استفاده از اشاره گر this برگشت داده شده است.سربارگذاری عملگرهای رابطه ای | مقایسه ای ( == , … ) : در قطعه کد زیر به عنوان مثال عملگر رابطه ای == را سربارگذاری کرده ایم. سایر عملگرهای رابطه ای | مقایسه ای (&gt; , &lt; , =! , …) نیز بصورت مشابه قابل سربارگذاری هستند. در خط 13 متد سربارگذاری موردنظر اعلان و در خطوط 22 - 16 پیاده سازی شده است. از آنجا که متد سربارگذاری عملگر == به دو پارامتر از جنس کلاس نیاز دارد , لذا این متد به عنوان تابع دوست کلاس تعریف شده است.ممنونم از همراهیتون امیدوارم که متوجه شده باشید.</description><category>Sayna Rahmani</category><author>Sayna Rahmani</author><pubDate>Mon, 27 Jan 2020 00:55:38 +0330</pubDate></item><item><title>آموزش برنامه نویسی شی گرا در ++C(قسمت 2)</title><link>https://virgool.ir/@rahmanisaina939/آموزش-برنامه-نویسی-شی-گرا-در-cقسمت-2-yghjc7yyjfge</link><description>سلام به همگی , خب امروز می خوایم به ادامه ی شی گرایی در ++C بپردازیم.وراثت (Inheritance) :وراثت در شی گرایی به مفهوم ساخت کلاسی جدید(کلاس فرزند) از روی کلاسی موجود(کلاس والد) می باشد ; بدین صورت که کلاس فرزند صفات و متد های کلاس والد را داراست و در عین حال صفات و متد های مختص به خود را نیز دارد.مزیت وراثت استفاده از کد های مشترک می باشد.همان گونه که در قطعه کد فوق مشاهده می کنید کلاس فرزند بدون اینکه خود دارای متدی باشد مقدار x را برای ما چاپ کرده است ; به نحوه ی تعریف کلاس فرزند دقت کنید کاراکتر ( : ) بدین معنی است که child_class از parent_class ارث بری دارد.اعضای محافظت شده(Protected members) :در اینجا با یک سطح دسترسی جدید آشنا می شویم که با Protected تعریف می شود ; در این سطح دسترسی  در خارج کلاس حق استفاده از آن را نداریم مگر در کلاس فرزند.برای درک تفاوت عضو private و protected به قطعه کد زیر دقت کنید.غلبه بر وراثت (Overriding) :در بحث وراثت درست است که کلاس فرزند دارای متد های کلاس والد است ولی این بدین معنی نیست که دقیقا مانند کلاس والد عمل می کند.به قطعه کد زیر دقت کنید :همانگونه که مشاهده می کنید متد show_message برای هردو کلاس والد و فرزند است ولی برای هردو خروجی یکسان ندارد.چند ریختی (Polymorphism) :چند ریختی به معنای یک چیز بودن و چند شکل داشتن است ; با مشاهده کد فوق معنای چند ریختی را نیز متوجه می شوید.اثر انگشت مثال خوبی برای چند ریختی است ; همه ی افراد دارای اثر انگشت هستند ولی اثر انگشت هیچ دو نفری شبیه به یک دیگر نیست.ممنونم که وقتتون رو در اختیار من گذاشتید و مطالعه کردید.در مقاله بعدی شی گرایی در ++C  به پایان می رسد.ممنون میشم نظراتتون رو برام کامنت کنید.</description><category>Sayna Rahmani</category><author>Sayna Rahmani</author><pubDate>Thu, 16 Jan 2020 22:23:28 +0330</pubDate></item><item><title>آموزش برنامه نویسی شی گرا در ++C (قسمت1)</title><link>https://virgool.ir/@rahmanisaina939/برنامه-نویسی-شی-گرا-در-زبان-برنامه-نویسی-c-cvx9vqg0k3ue</link><description>سلام به همگی , در این مقاله می خواهیم با شی گرایی در ++C آشنا شویم ولی به دلیل گسترگی مطالب و به منظور یادگیری بهتر در 3 مقاله این بحث را ارایه می کنیم .کلاس (Class) :در برنامه نویسی شی گرا هنگامی که از یک گروه صحبت می کنیم بحث کلاس (Class) مطرح می شود ; مثلا هنگامی که می گوییم دانشجویان بحث کلاس مطرح است زیرا به یک شخص خاص اشاره ندارد و منظور تمامی دانشجوها می باشد. شی (Object) :اگر بخواهیم به یک شخص خاص از کلاس اشاره کنیم آنگاه بحث شی(Object) مطرح می شود ; مثلا وقتی می گوییم خانم احمدی داریم به یک شی از کلاس اشاره می کنیم.صفت(Attribute/Property) :هریک از اشیا کلاس دارای ویژگی های منحصر به فرد است که به آن ها صفت(Property) گفته می شود ; مثلا یک دانشجو دارای نام , نام خانوادگی , نام پدر , تاریخ تولد و ... است که هریک از این ها صفت این شی (دانشجو) به شمار می آیند.متد(Method) :هریک از این اشیا قابلیت انجام کاری را دارند یا می توان بر روی آن عملی را انجام داد که به مجموعه این اعمال متد(Method) گفته می شود ;  مثلا هر دانشجو می تواند انتخاب واحد کند , درسی را پاس می کند , درسی را می افتد , ... این ها متد به حساب می آیند.سطوح دسترسی عمومی(Public) و خصوصی(Private) :هر یک از اعضا کلاس در دو سطح دسترسی عمومی (Public) و یا خصوصی (Private) تعریف می شوند. این سطوح دسترسی به امکان/عدم امکان دسترسی به این عناصر در خارج کلاس اشاره دارد. یک عضو عمومی در هر جایی از یک برنامه ++C قابل دسترسی است ; در حالی که یک عضو خصوصی تنها توسط اعضا کلاس قابل دسترسی است و امکان دسترسی به آن خارج از کلاس وجود ندارد.در برنامه نویسی شی گرا , معمولا صفات (متغیرها) بصورت خصوصی (Private) و متدها (توابع) بصورت عمومی (Public) تعریف می شوند. اصطلاح کپسوله سازی (Encapsulation) نیز به همین منظور استفاده می شود ; به این معنی که داده های یک کلاس (صفات) باید از دید سایر بخش های برنامه (خارج کلاس) مخفی بمانند. در عوض چنانچه نیاز به دسترسی به آنها بود , این کار بصورت غیرمستقیم و از طریق توابع عضو کلاس (متدها) انجام می شود.برای درک بهتر این مفهوم به قطعه کد زیر دقت کنید :همان طور که در خط 20.21.22 مشاهده می کنید year.month.day دارای خطا هستند ; دلیل این خطا این است که این 3 صفت خصوصی هستند و اجازه نداریم خارج از کلاس از آن ها استفاده کنیم.برای برطرف کردن این خطا دو روش داریم : 1.استفاده از یک متد دیگر ;2.تابع سازنده(Constructor) .روش 2 راه اصلی می باشد که در ادامه به توضیح آن می پردازیم.قطعه کد مربوط به استفاده از یک متد دیگر(روش 1)تابع سازنده(constructor) :برای مقداردهی به صفات می توانیم از تابع سازنده (Constructor) استفاده کنیم که در بحث شی‌گرایی یک تابع کاملا شناخته شده می باشد.تابع سازنده 3 ویژگی دارد :1.تابع سازنده تابعی هم نام با اسم کلاس است ;2.مقدار برگشتی ندارد یعنی حتی نیاز به void هم نداریم ;3.به صورت اتوماتیک فراخوانی می شود یعنی هنگامی که می خواهیم یک شی از یک کلاس را تعریف کنیم تابع سازنده به صورت اتوماتیک فراخوانی می شود. قطعه کد مربوط به تابع سازندهتابع عضو خصوصی(Private member function) :تابع عضو خصوصی تابعی می باشد که در قسمت Private یک کلاس تعریف می شود ; در واقع تابع عضو خصوصی تابعی است که ما نمی توانیم در برنامه اصلی آن را فراخوانی کنیم و فقط برای کمک به متد ها از آن استفاده می شود.در اینجا بحث (Information hiding) که یکی از مزایای برنامه نویسی شی گرا است مطرح می شود یعنی ما کاری را انجام می دهیم بدون اشاره به آن.اعضا ایستا(Static members) :گاهی بدون اینکه هیچ شی ای از کلاس موجود باشد , می خواهیم به اعضا کلاس دسترسی داشته باشیم ; در این حالت آن عضو را بصورت عضو ایستا (Static) تعریف می کنیم. تاکنون دسترسی به اعضا کلاس (متدها) از طریق یک شی موجود انجام می شد. عضو ایستا یک عضو منحصر بفرد و مشترک است که بدون وابستگی به شی قابل دسترسی است.در قطعه کد زیر به تعریف عضو ایستا می پردازیم نکته ی قابل توجه در این قسمت مکان مقدار دهی می باشد که نه در داخل کلاس و نه در داخل برنامه اصلی می باشد.در مقالات بعدی شی گرایی در ++C را کامل توضیح می دهیم.امیدوارم که مطلب مفیدی بوده باشه , ممنون میشم نظراتتون رو برام کامنت کنید.</description><category>Sayna Rahmani</category><author>Sayna Rahmani</author><pubDate>Thu, 16 Jan 2020 00:51:47 +0330</pubDate></item><item><title>آشنایی با سبک های برنامه نویسی</title><link>https://virgool.ir/@rahmanisaina939/آشنایی-با-سبک-های-برنامه-نویسی-ah9ga6cbsoue</link><description>سلام خدمت دوستان عزیز , در این مقاله هدف آشنایی با سبک های برنامه نویسی می باشد.دو سبک متداول برنامه نویسی عبارت اند از :برنامه نویسی ساخت یافته (Structured programming) و برنامه نویسی شی گرا (Object oriented programming) ; هر یک از این سبک ها دارای ویژگی هایی هستند که در ادامه به توضیح آنها می پردازیم.برنامه نویسی ساخت یافته (Structured programming) :در این سبک برنامه نویسی , برنامه به صورت مجموعه ای از فعالیت ها در نظر گرفته می شود که باید بر روی داده ها اجرا شوند. هر کار پیچیده ای به چند کار کوچک تر تجزیه می شود تا این کارها به راحتی قابل درک باشند ; به عبارت دیگر برنامه نویس سعی میکند توابعی بنوسید که نیازمندی های سیستم را برطرف کند سپس برای انجام هریک از این کارها زیر برنامه خاصی که متد (Method) نام دارد نوشته میشود.در این روش داده ها از فعالیت ها (متدها) که آنها را پردازش میکنند جدا هستند ; متدها قابلیت استفاده مجدد را دارند یعنی می توان متدهای یک برنامه را در برنامه های دیگر نیز استفاده کرد ; به این ترتیب  کدنویسی کمتر می شود و توسعه نرم افزار با سرعت بیشتری اتفاق می افتد . متدها این امکان را فراهم می کنند تا توسعه نرم افزار با استفاده از گروه ممکن شود  به این شکل که پس از مشخص شدن متدهای مورد نیاز برنامه , هریک از اعضای گروه وظیفه نوشتن و تست متدهای مشخصی را برعهده می گیرند و به این شکل اعضای گروه به صورت همزمان روی بخشهای مختلف برنامه فعالیت می کنند.در نهایت این متدها به هم پیوند می خورند تا جریان منطقی برنامه برقرار شود. با توجه به نکته فوق عیب یابی و اصلاح برنامه نیز آسان می شود  زیرا با بررسی جریان برنامه متد معیوب به سرعت شناسایی و اصلاح می شود بدون اینکه بقیه بخشهای برنامه تغییر یابند.برنامه نویسی شی گرا (Object Oriented Programming-OOP) :برنامه نویسی شئ گرا جدیدترین سبک برنامه نویسی است که در آن همه چیز به دید شی (object) دیده می شود. زبان های شی گرا با الهام  از دنیای واقعی به وجود آمده اند. بدین گونه که در دنیای واقعی به هر کجا که بنگریم موارد زیادی از نمونه های متمایز و متفاوت و در عین حال با ساختار و قالبی یکسان قابل مشاهده است. به این ساختار و قالب مشترک کلاس گفته می شود و نمونه های موجود در یک ساختار را شی آن کلاس می نامند.در برنامه نویسی شی گرا (Object Oriented Programming – OOP) ما با اشیای پیچیده تری در مقایسه با متغیرها روبرو هستیم. برای مثال اگر بخواهیم نام یک دانشجو را در مکانی از حافظه ذخیره کنیم از یک متغیر استفاده می کنیم. به همین صورت برای ذخیره نام خانوادگی , سن , تاریخ تولد و … حال فرض کنید که می خواهیم کل این اطلاعات را در یک جا و در کنار هم داشته باشیم. در این حالت باید به دانشجو به چشم یک فرد (شی) نگاه کنیم که دارای ویژگی هایی از جمله نام , نام خانوادگی , سن , تاریخ تولد و … است. اینجاست که مفهوم برنامه نویسی شی گرا (OOP) مطرح می شود.تفاوت برنامه نویسی ساخت یافته و شی گرا :برنامه هایی که با برنامه نویسی ساخت یافته نوشته می شوند به Function های کوچک غیر وابسته تقسیم می شوند و برنامه های شی گرا به واحد های کوچکی به نام Object تقسیم می شوند.امنیت برنامه نویسی و کد های ساخت یافته از برنامه نویسی شی گرا کمتر است زیرا در برنامه نویسی شی گرا امکان مخفی سازی کد ها (Data Hiding) وجود دارد که در برنامه نویسی ساخت یافته قابل اجرا نیست.با برنامه نویسی ساخت یافته می توان تقریبا برنامه های پیچیده را برنامه نویسی کرد اما نحوه ی تقسیم بندی در شی گرا ها موجب می شود که امکان برنامه نویسی هر نوع برنامه ی پیچیده و بزرگی ممکن باشد.برنامه نویسی ساخت یافته نسبت به شی گرا امکان استفاده مجدد کمتری دارد و همچنین دارای انعطاف پذیری کمتری نیز می باشد.در مقاله های بعدی بیشتر با برنامه نویسی شی گرا آشنا می شویم.ممنونم از همراهیتون.</description><category>Sayna Rahmani</category><author>Sayna Rahmani</author><pubDate>Sat, 28 Dec 2019 05:59:17 +0330</pubDate></item><item><title>اشاره گر در زبان برنامه نویسی ++C</title><link>https://virgool.ir/@rahmanisaina939/اشاره-گر-در-زبان-برنامه-نویسی-c-zlql3jvyohel</link><description>با عرض سلام خدمت دوستان عزیز ;میخوایم کارو با یک سوال شروع کنیم ; اگر بخواهیم یک عدد صحیح را درون یک متغیر ذخیره کنیم از ...,int استفاده می کنیم ; اگر بخواهیم یک عدد اعشاری را درون یک متغیر ذخیره کنیم از float و double استفاده می کنیم و ...حالا اگر بخواهیم آدرس یک خونه از حافظه را در یک متغیر ذخیره کنیم از چه نوع متغیری باید استفاده کرد؟در اینجا با یک مفهوم جدید آشنا می شویم که این مفهوم اشاره گر نام دارد و در این مطلب به شرح آن می پردازیم.طبق تعریف اشاره گر متغیری است که حاوی یک آدرس باشد ; نتیجه می گیریم اشاره گر نیز چون یک متغیر است دارای 4 ویزگی نام , جنس , مقدار و آدرس می باشد .C++عملگر ارجاع (Reference Operator)برای آشنایی با نحوه تعریف اشاره گر در ++C نیاز به آشنایی با عملگر ارجاع داریم ; عملگر ارجاع را با کاراکتر &amp; نشان می دهیم که کار آن دریافت آدرس یک خانه در حافظه می باشد .نحوه استفاده از عملگر ارجاعتعریف و مقدار یابی اشاره گر در ++Cدر کد فوق اشاره گری به اسم pn تعریف کردیم که به متغیر n اشاره می کند و درون آن آدرس خانه n را ذخیره کرده ایم ; در زبان ++C نوع متغیر قبل از اشاره گر نشان دهنده نوع متغیری است که اشاره گر به آن اشاره دارد ; برای مثال در اینجا int نشان دهنده نوع متغیر n می باشد. ( * ) علامت اشاره است.اگر دقت کنید مشاهده می کنید که مقدار خروجی برای pn* با مقدار n برابر می باشد به این نوع استفاده از اشاره گر که بدون استفاده از نام متغیر مقدار متغیر را به ما می دهد مقدار یابی اشاره گر گفته می شود.اشاره گر به اشاره گراشاره گر به هر چیزی که دارای آدرس باشد می تواند اشاره کند حتی به یک اشاره گر دیگر.</description><category>Sayna Rahmani</category><author>Sayna Rahmani</author><pubDate>Thu, 05 Dec 2019 05:10:36 +0330</pubDate></item></channel></rss>