Loading AI tools
از ویکیپدیا، دانشنامه آزاد
در مهندسی نرمافزار و مهندسی دانش، کلاس نقشهٔ نوعی و مشترک برای گروهی از اشیاء[۱] است که ویژگیهای[۲] مشترکی داشته، و رفتارهای مشترکی از خود نشان میدهند. درواقع، کلاسها انواعی هستند که شخص برنامهنویس، خود میتواند، آنها را برای حل مسئلههای دنیای واقعی طراحی کند.
کلاس یک انتزاع است که به توسعهدهندگان کمک میکند تا مدلهای دنیای واقعی را به برنامه تبدیل کنند. کلاسها شامل دو عنصر اصلی هستند:
مثال در Java:
public class Car {
String brand;
int year;
void drive() {
System.out.println("Driving the car");
}
}
اشیاء، نمونههایی هستند که به هنگام اجرا از روی نقشهٔ ارائه شده بهوسیلهٔ کلاس ایجاد میشوند. میتوان گفت همانطور که متغیر نمونهای از انواع اولیه است، شیء نمونهای از کلاس است.
کلاس، مفهوم بسطیافته از ساختمان است که به جای این که، فقط دادهها را نگهداری کند، میتواند هم دادهها و هم توابع را با هم نگهداری کند[۳].
برنامهنویسی شیءگرا، دادهها (خواص) و متدها (رفتارها) را در بستههایی به نام کلاس محصور میکند.[۴] کلاسها دارای خاصیت کپسوله سازی[۴] هستند. این بدان معناست که اشیاء میدانند که چگونه از طریق رابطهای تعریفشده با یکدیگر ارتباط برقرار کنند. معمولاً، اشیاء نباید از چگونگی پیادهسازی اشیاء دیگر مطلع باشند، بهعبارت دیگر، جزئیات پیادهسازی در داخل خود اشیاء پنهان شدهاند.
مثال: رانندگی خودرو بدون اطلاع از خصوصیات طرز کار داخلی موتور و سیستمهای اگزوز و جعبهدنده امکانپذیر است. در مهندسی نرمافزار ضرورت پنهانسازی اطلاعات امری بسیار مهم هست. [۵]
در زبانهای رویهای[۶] برنامهنویسی، مثل زبان سی (C)، برنامهنویسی، بیشتر عملگرایانه[۷] است. درحالیکه، زبانهای برنامهنویسی سیپلاسپلاس (++C)، جاوا (Java)، و سیشارپ (#C) دارای پارادایم شیءگرایانه هستند. واحد برنامهنویسی در زبانهای رویهای تابع است، ولی، زبانهای شی گرا دارای کلاسها - که اشیاء نهایتاً از آنها ایجاد میشوند (یا اصطلاحاً نمونهسازی میشوند) - به عنوان واحد برنامهنویسی هستند. توابع نیز در داخل کلاسها به عنوان متدهایی پیادهسازی میشوند.
برنامهنویسان C، بیشتر بر روی نوشتن توابع متمرکز هستند. گروههایی از اعمال که وظیفهٔ خاصی را بر عهده دارند، توابع را تشکیل میدهند و توابع گروه شده و برنامه را تشکیل میدهند. البته در زبان c دادهها نیز مهم هستند، اما نگرش اصلی در اینگونه زبانها این است که دادهها بیشتر برای پشتیبانی اعمالی که توابع انجام میدهند به کار میروند.
کلاسها از چندین جزء اصلی تشکیل شدهاند که در این بخش به تفصیل به هر یک میپردازیم:
کپسولهسازی از مفاهیم اصلی برنامهنویسی شیءگرا است که به پنهانسازی جزئیات داخلی کلاس و ارائه یک رابط عمومی برای تعامل با شیء کمک میکند.
مزایا:
مثال در Python:
class Car:
def __init__(self, brand, year):
self.__brand = brand # Private attribute
self.__year = year
def get_brand(self):
return self.__brand
def set_brand(self, brand):
self.__brand = brand
وراثت یکی از مفاهیم کلیدی در شیءگرایی است که به یک کلاس اجازه میدهد ویژگیها و رفتارهای یک کلاس دیگر را به ارث ببرد.
انواع وراثت:
مثال در Python (وراثت چندگانه):
class Vehicle:
def move(self):
print("Moving")
class Car(Vehicle):
def drive(self):
print("Driving")
myCar = Car()
myCar.move() # Inherited method
myCar.drive() # Specific method
چندریختی یکی از اصول اساسی برنامهنویسی شیءگرا است که به اشیاء اجازه میدهد بسته به نوع خود، رفتارهای مختلفی داشته باشند. واژه چندریختی به معنای "چند شکل داشتن" است و در برنامهنویسی به توانایی یک مرجع (مانند متغیر یا اشارهگر) برای نشان دادن رفتارهای متفاوت در شرایط مختلف اشاره دارد.
چندریختی به دو شکل اصلی در برنامهنویسی شیءگرا دیده میشود:
این نوع چندریختی که چندریختی استاتیک نیز نامیده میشود، شامل اورلودینگ (Overloading) و استفاده از پارامترهای متفاوت برای متدها یا توابع است. در این حالت، انتخاب متد یا تابع مناسب در زمان کامپایل صورت میگیرد.
مثال:
در یک زبان مانند ++C، میتوان چند نسخه از یک تابع با نام یکسان تعریف کرد که پارامترهای متفاوتی دریافت میکنند:
class Math {
public:
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
};
این نوع چندریختی که به آن چندریختی پویا نیز گفته میشود، از طریق ارثبری و استفاده از توابع مجازی (Virtual Functions) یا متدهای سربار (Overridden Methods) حاصل میشود. در این حالت، تصمیمگیری درباره انتخاب متد مناسب در زمان اجرا انجام میگیرد.
مثال:
class Shape {
public:
virtual void draw() {
std::cout << "Drawing a shape" << std::endl;
}
};
class Circle : public Shape {
public:
void draw() override {
std::cout << "Drawing a circle" << std::endl;
}
};
class Rectangle : public Shape {
public:
void draw() override {
std::cout << "Drawing a rectangle" << std::endl;
}
};
int main() {
Shape* shape1 = new Circle();
Shape* shape2 = new Rectangle();
shape1->draw(); // خروجی: Drawing a circle
shape2->draw(); // خروجی: Drawing a rectangle
delete shape1;
delete shape2;
return 0;
}
چندریختی با ارائه انعطافپذیری و توسعهپذیری بالا، امکان استفاده از یک رابط عمومی برای انواع مختلف اشیاء را فراهم میکند، اما ممکن است به دلیل پیچیدگی درک و افت عملکرد در پروژههای بزرگ چالشهایی ایجاد کند. این ویژگی در زبانهایی مانند Java، C++، Python و C# از طریق ارثبری و سربارکردن متدها پیادهسازی میشود.
زبانهای مختلف برنامهنویسی شیءگرا مانند Java، C++، C#، و Python از کلاسها استفاده میکنند.
تفاوتها در نحوه تعریف و استفاده از کلاسها در این زبانها:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.