Programming?
11.4K subscribers
373 photos
645 videos
978 files
513 links
🏅Channel privileges

🎗Ninth year of operation
🎗Completely specialized members
🎗Transmitter in channel automation
🎗, ...

🎯 second channel Programming books 👇
@topbookit

🎯 third channel laptop👇
@sysline


👨🏻‍💻Admin channels : @coderme
Download Telegram
همان مدلی BMW است که در تهران زیر پای شخص خاصی است. یعنی استفاده از خصوصیات و روالهای تعریفی در Class برای استفاده از آن .
مثالی که در بالا برای رساندن مفهوم شی گرایی بهش پرداختیم یک مثال عمومی بود ولی می خواهیم اینبارمفهوم شی گرایی رو در یک برنامه نرم افزاری دنبال کنیم پس به مثال زیر دقت کنید
🤩1
مثال) فرض کنید سازمان تامین اجتماعی قصد دارد برنامه ای داشته باشد که اطلاعات بیمه شدگان را در آن مدیریت نماید. هر بیمه شده دارای خصوصیات و روالهای مشترک و منحصر به فرد خود است مثل شماره بیمه، نام، سن، شغل، تعداد افراد تحت تکلف، بیمه پرداختی و ... .

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

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

با برنامه نویسی شی گراست که می توان به راحتی و مثل دنیای واقعی با برنامه تعامل داشت .
🤩1
کلاس ها (Classes) و اشیا (Objects) در برنامه نویسی ++c :
اکنون وقت آن است که برنامه نویسی شی گرا را در عمل یاد گرفته و با اصول تعریف و بکارگیری آن بیشتر آشنا بشویم .
کلاس ها (Classes) :
کلاس ها همان نوع داده تجریدی یا انتزاعی (Abstract) هستند. به عبارتی یک نوع داده هستند که توسط برنامه نویس برای کار با داده ها و توابع و رویدادهای مختلفی تعریف می شوند. برای تعریف کلاس از الگوی زیر پیروی می کنیم :
class className
{
// Define private variables & functions
public:
// Define public variables & functions
private:
// Define private variables & functions
protected:
// Define protected variables & functions
};
همانطور که در بالا آمد، برای تعریف یک کلاس از کلمه کلیدی class استفاده می کنیم و نامی را در ادامه برای آن تعیین می کنیم .

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

داده ها و توابعی که طبق سطر 3 تعریف شوند بطور پیش فرض از سطح دسترسی private برخوردار خواهند بود زیرا چیزی برای آنها تعریف نشده است کما اینکه در سطر 6 این سطح دسترسی کاملا بیان شده است .

سطح دسترسی private به این معناست که که داده ها و توابع تعریفی در این سطح، فقط در این class شناخته می شوند و در خارج از کلاس هیچگونه دسترسی به آنها وجود ندارد و تمامی عملیات روی آنها فقط باید در همان class تعریف شوند که همان مفهوم Encapsulation یا محرمانگی و بسته بندی را پیاده سازی می کنند .
در سطر 4 می توان داده ها و توابعی را که دارای سطح دسترسی public یا عمومی هستند را تعریف نمود و این بدین معناست که داده ها و توابع با این سطح دسترسی هم در داخل و هم در خارج از class قابل دسترسی هستند .

در سطر 8 نیز نوع دسترسی protected ذکر شده، یعنی کلاس هایی که از این کلاس به ارث برده می شنود می توانند به این قسم از داده ها و توابع دسترسی داشته باشند .
مثالی از تعریف یک کلاس :
#include <iostream.h>
#include <conio.h>

class CRectangle
{
int x,y;
public:
void set_Values(int, int);
int area() { return (x*y);}
} obj_1;

void CRectangle :: set_Values(int a, int b)
{
x = a;
y = b;
}

void main()
{
obj_1.set_Values(3,4);
CRectangle obj_2;
obj_2.set_Values(5,6);
cout « "area = " « obj_1.area() « "\n";
cout « "area = " « obj_2.area();
getch();
}
کلاس CRectangle در سطر 4 از برنامه تعریف شده و بدنه تعریف آن تا انتهای سطر 10 ادامه میابد. دو متغیر به نامهای x,y برای این کلاس تعریف شده است. چون هیچ سطح دسترسی برای آن دو مشخص نگردیده کامپایلر آنها را پیش فرض private تعیین می نماید یعنی فقط اعضای این class می توانند به آن دو دسترسی داشته باشند .

دو تابع با نامهای set_Values() و area() برای این class تعریف شده که یکی وظیفه دریافت مقادیر و دیگری محاسبه مساحت را بر عهده دارند .

عملکرد تابع set_Values() در بیرون از class و از سطر 12 الی 16 تعریف شده است، اما دستورات تایع area() در درون خود class بیان شده است که از هر یک از این دو روش برای تعریف دستورات و عملکرد توابع می شود استفاده نمود .
نکته) در سطر 12 به نحوه تعریف تابع در خارج از class دقت کنید که ابتدا نوع بازگشتی تابع وسپس نام class و بعد از آن از علامت :: و در نهایت نام تابع و آرگومانهای آن را بیان می کنیم .
در سطر 9 هم چنانچه مشاهده می کنید در همان محل تعریف تابع area() ، دستورات را هم برای تابع نوشته ایم .
برای کلاس CRectangle دو شی یا object ایجاد شده که یکی در سطر 10 و دقیقا بعد از تعریف class، و دیگری در تابع main در سطر 21. دقت کنید که برای ایجاد شی از کلاس در درون بدنه برنامه باید ابتدا نام کلاس و سپس نام شی را بیان نمایید .

هیچ یک از این دو شی ربطی به هم ندارند و هر یک به طور جداگانه از اعضای کلاس استفاده می کنند .
برای دسترسی به اعضای کلاس با استفاده از شی، ابتدا نام کلاس سپس نقطه و در انتها نام عضو که می تواند یک متغیر یا یک تابع یا یک رخداد باشد را ذکر می کنیم، دقت داشته باشید که اگر عضو مورد نظر دارای سطح دسترسی private باشد نمی توان به آن دسترسی داشت زیرا فقط در درون کلاس شناخته شده است و در بیرون از کلاس خود حتی با استفاده از ایجاد شی هم نمیتوان با آنها کار کرد.
برای مثال کد زیر گویای این توضیح هست
class CRectangle
{

int x;
public:
void f1();
void f2() ;
int y;
private:
void f3();
int z;

} obj_1;

void main()
{
obj_1.x; // ERROR - x is private
obj_1.y; // OK - y is public
obj_1.f1(); // OK - f1 is public
obj_1.f2(); // OK - f2 is public
obj_1.f3(); // ERROR - f3 is private
obj_1.z; // ERROR - z is private
}