Programming? – Telegram
Programming?
11.9K subscribers
373 photos
645 videos
978 files
512 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
امیدوارم که مراحل بررسی یا trace یک برنامه را درک کرده و متوجه شده باشید که چگونه می شود ساختار هر برنامه ای را بادقت و بدرستی چک نمود که مهارت در این شیوه کمک شایانی به دید برنامه نویسی و نهایتا نوشتن یک برنامه صحیح در زبان برنامه نویسی C++ خواهد نمود .
کپسوله کردن encapsulation در ++c :
قرار دادن داده و توابعی که روی داده کار می کنند را در یک بسته کپسوله کردن می گویند. در برنامه نویسی رویه گرا معلوم نیست چه تابعی روی چه متغیری کار می کند. در برنامه های پیچیده تر این روابط تیره تر می شوند. در برنامه نویسی شیءگرائی داده و توابع مربوط به آن- که اغلب متد (method) ناميده می شوند در يک بسته به نام کلاس قرار می گیرند بنابراین کاملا مشخص است چه تابعی روی چه داده ای کار می کند.

کپسول کردن امکان پنهان کردن اطلاعات را نيز فراهم می کند. هر عضو کلاس را می توان به صورت عمومی، خصوصی یا محافظت شده مشخص کرد. شی ايجاد شده از کلاس به داده از طريق يک سری توابع عمومی دسترسی دارد و اجازه دسترسی مستقيم به اعضای خصوصی کلاس و خراب کردن آنها داده نمی شود. به اين صورت جزئيات پياده سازی هم مخفی می ماند و به طراح اجازه می دهد پياده سازی را اساسی بدون تغيير در واسطه ها عوض کند.
مثال زیر رو در نظر بگیرید
class Box
{
public:
double getVolume(void)
{
return length * breadth * height;
}
private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
👌1
در قطعه کد بالا یک کلاس تعریف کرده ایم و تحت دسترسی public متدی را تعریف کرده ایم که نوع های داده ای که در پایین متد با حق دسترسی private تعریف شده است را کپسوله کرده است
چون داده هایی که با حق دسترسی private داخل یک کلاس تعریف می کنیم فقط داخل همان کلاس در دسترس هستن می توانیم این نوع داده ها رو داخل توابع دیگر که در داخل همان کلاس تعریف شده اند فرا بخونیم و کپسوله کنیم
ارث بری در کلاس ها (inheritance) در ++c :
👍1
یکی ديگر از جنبه های مفید برنامه نویسی شیءگرائی قابلیت استفاده مجدد از کد است. یک کلاس می تواند اعضای عمومی را از کلاس دیگر را به ارث ببرد. توارث اجازه می دهد کلاس جديدی شامل کليه داده ها و توابع کلاس (های) پياده سازی شود. کلاس موجود را کلاس پايه (base) و کلاس جديد که اعضای کلاس پايه را به ارث می گيرد را کلاس مشتق شده (derived) می نامند.
مثال. فرض کنيد يک کلاس پايه به نام Vehicle برای وسايل نقليه داريم. وسيله نقليه می تواند ماشين، تراکتور، قايق و هواپيما را شامل شود که ممکن است هر يک از آنها احتياج به اطلاعات يا توابع اضافی داشته باشند. بنابراين می توان برای هر کدام کلاس های فرعی را تعريف کرد که خواص کلاس Vehicle را به ارث می برند علاوه براين که دارای فيلدهای جديد ديگری هم هستند.
اگر کلاس ويژگی های تنها يک کلاس را به ارث ببرد وارثت منفرد(single inheritance) و اگر از چند کلاس به ارث گرفته شود وارثت چندگانه (multiple inheritance) ناميده می شود.

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

using namespace std;

// Base class
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};

// Derived class
class Rectangle: public Shape
{
public:
int getArea()
{
return (width * height);
}
};

int main(void)
{
Rectangle Rect;

Rect.setWidth(5);
Rect.setHeight(7);

// Print the area of the object.
cout « "Total area: " « Rect.getArea() « endl;

return 0;
}
کد بالا مثالی از ارث بری یه کلاس از کلاس پایه هست به کلاسی که از آن ارث برده شده همان کلاس shape کلاس والد یا پایه و به کلاسی که از کلاس پایه یا والد ارث ببرد همان کلاس rectangle کلاس فرزند یا مشتق شده می گویند.
در کد بالا یه کلاس با نام shape تعریف شده و متد هایی با دسترسی های مختلف تعریف شده است و اگر به کلاس rectangle توجه کنید می بینید که با ارث بردن از کلاس shape در متدی که با نام getarea تعریف کرده است به width , height که در کلاس پایه تعریف شده دسترسی پیدا کند و در قسمت main می بینید که با ساختن شی از کلاس rectangle توانسته به متدهای setwidth , setheight از کلاس shape دسترسی پیدا کرده و آن ها رو مقدار دهی کند.
چند ریختی Polymorphism در ++c :
چندريختی در C++ توسط توابع مجازی پياده سازی می شود. تابع مجازی تابع عضوی است که انتظار می رود در کلاس های مشتق شده دوباره تعريف شود. درک چندريختی بدون استفاده از توارث و انتزاع غيرممکن است.
چندريختی (polymorphism) يکی از ويژگی های زبان های شیءگراست. به واسطه چندريختی توابع می توانند به شيوه های مختلف پياده سازی شوند ولی از طريق يک اسم يکسان در دسترس قرار بگيرند.

چندريختی در ++C به دو شکل پشتيبانی می شود؛ در زمان کامپايل و در زمان اجرا. سربارگذاری توابع و عملگرها نمونه هائی از چندريختی در زمان کامپايل هستند. چندريختی در زمان اجرا با تلفيق وراثت و توابع مجازی حاصل می شود.
به مثال زیر توجه کنید
#include <iostream>
using namespace std;

class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width = a;
height = b;
}
int area()
{
cout « "Parent class area :" «endl;
return 0;
}
};
class Rectangle: public Shape{
public:
int area ()
{
cout « "Rectangle class area :" «endl;
return (width * height);
}
};
class Triangle: public Shape{
public:
int area ()
{
cout « "Triangle class area :" «endl;
return (width * height / 2);
}
};
// Main function for the program
int main( )
{
Shape *shape;
Rectangle rec(10,7);
Triangle tri(10,5);

// store the address of Rectangle
shape = &rec;
// call rectangle area.
shape->area();

// store the address of Triangle
shape = &tri;
// call triangle area.
shape->area();

return 0;
}