شیگرایی Object-Oriented Programming یا OOP یکی از مفاهیم اساسی در برنامهنویسی است که به کمک آن میتوان کدهایی ساختارمند، قابلفهم و قابلتوسعه ایجاد کرد. در این مقاله به بررسی کامل شیگرایی در زبان جاوا اسکریپت میپردازیم. ابتدا مفاهیم پایه را توضیح میدهیم و سپس به پیادهسازی عملی این مفاهیم میپردازیم.
شیگرایی چیست؟
شیگرایی یک الگوی برنامهنویسی است که دادهها را در قالب اشیاء (Objects) سازماندهی میکند. هر شیء شامل دو بخش اصلی است:
- ویژگیها (Properties): ویژگیها مقادیر مرتبط با شیء هستند.
- متدها (Methods): متدها توابعی هستند که بر روی شیء اجرا میشوند.
ویژگیهای اصلی شیگرایی:
- کپسولهسازی (Encapsulation): بستهبندی دادهها و توابع در یک واحد.
- وراثت (Inheritance): ایجاد اشیاء جدید از اشیاء موجود.
- چندریختی (Polymorphism): استفاده از متدها با نام یکسان اما رفتار متفاوت.
- انتزاع (Abstraction): پنهان کردن جزئیات پیادهسازی و نمایش تنها عملکرد شیء.
چرا شیگرایی در جاوا اسکریپت؟
جاوا اسکریپت به دلیل انعطافپذیری و قابلیتهای پیشرفتهاش از شیگرایی پشتیبانی میکند. با استفاده از شیگرایی میتوان:
- کدهای تمیزتر و قابلفهمتر نوشت.
- پروژههای پیچیده را مدیریت کرد.
- از تکرار کد جلوگیری کرد.
ساختار شیء در جاوا اسکریپت
در جاوا اسکریپت، میتوان اشیاء را به روشهای مختلف ایجاد کرد.
1. ایجاد شیء با استفاده از Object Literal
این روش برای ساخت اشیاء ساده استفاده میشود.
const person = {
name: “Ali”,
age: 25,
greet: function() {
console.log(`Hello, my name is ${this.name}.`);
}
};
person.greet(); // خروجی: Hello, my name is Ali.
2. ایجاد شیء با استفاده از Constructor Function
این روش برای ساخت اشیاء پویا و قابلتوسعه استفاده میشود.
function Person(name, age) {
this.name = name;
this.age = age;
this.greet = function() {
console.log(`Hello, my name is ${this.name}.`);
};
}
const ali = new Person(“Ali”, 25);
ali.greet(); // خروجی: Hello, my name is Ali.
3. ایجاد شیء با استفاده از کلاسها (ES6)
کلاسها در نسخه ES6 معرفی شدند و نوشتن کدهای شیگرا را سادهتر کردند.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
}
const sara = new Person(“Sara”, 30);
sara.greet(); // خروجی: Hello, my name is Sara.
ویژگیهای شیگرایی در جاوا اسکریپت
1. کپسولهسازی (Encapsulation)
کپسولهسازی به معنای پنهان کردن دادهها و متدها درون کلاس است. با استفاده از کپسولهسازی، میتوان دادهها را از دسترسی مستقیم محافظت کرد.
class BankAccount {
#balance; // یک ویژگی خصوصی
constructor(initialBalance) {
this.#balance = initialBalance;
}
deposit(amount) {
this.#balance += amount;
}
getBalance() {
return this.#balance;
}
}
const account = new BankAccount(1000);
account.deposit(500);
console.log(account.getBalance()); // خروجی: 1500
// console.log(account.#balance); // خطا: ویژگی خصوصی است
2. وراثت (Inheritance)
وراثت به شما این امکان را میدهد که یک کلاس جدید از یک کلاس موجود ایجاد کنید.
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
class Dog extends Animal {
speak() {
console.log(`${this.name} barks.`);
}
}
const dog = new Dog(“Buddy”);
dog.speak(); // خروجی: Buddy barks.
3. چندریختی (Polymorphism)
چندریختی به معنای داشتن متدهای یکسان در کلاسهای مختلف است که رفتار متفاوتی دارند.
class Shape {
draw() {
console.log(“Drawing a shape.”);
}
}
class Circle extends Shape {
draw() {
console.log(“Drawing a circle.”);
}
}
const shapes = [new Shape(), new Circle()];
shapes.forEach(shape => shape.draw());
// خروجی:
// Drawing a shape.
// Drawing a circle.
4. انتزاع (Abstraction)
انتزاع به معنای پنهان کردن جزئیات و ارائه یک رابط ساده برای استفاده است.
class Vehicle {
start() {
throw new Error(“You must implement the start method.”);
}
}
class Car extends Vehicle {
start() {
console.log(“Car is starting…”);
}
}
const car = new Car();
car.start(); // خروجی: Car is starting…
کاربرد شیگرایی در پروژههای واقعی
شیگرایی در جاوا اسکریپت برای ایجاد ساختارهای پیچیده و قابلمدیریت استفاده میشود. در ادامه چند مثال از کاربردهای شیگرایی آورده شده است:
1. ایجاد سیستم مدیریت کاربر
class User {
constructor(username, email) {
this.username = username;
this.email = email;
}
login() {
console.log(`${this.username} has logged in.`);
}
}
class Admin extends User {
deleteUser(user) {
console.log(`${user.username} has been deleted.`);
}
}
const admin = new Admin(“admin”, “admin@example.com”);
const user = new User(“john”, “john@example.com”);
admin.login(); // خروجی: admin has logged in.
admin.deleteUser(user); // خروجی: john has been deleted.
2. سیستم فروشگاه آنلاین
class Product {
constructor(name, price) {
this.name = name;
this.price = price;
}
display() {
console.log(`${this.name}: $${this.price}`);
}
}
class Cart {
constructor() {
this.items = [];
}
addItem(product) {
this.items.push(product);
}
showCart() {
this.items.forEach(item => item.display());
}
}
const cart = new Cart();
cart.addItem(new Product(“Laptop”, 1000));
cart.addItem(new Product(“Phone”, 500));
cart.showCart();
// خروجی:
// Laptop: $1000
// Phone: $500
مزایا و معایب شیگرایی در جاوا اسکریپت
مزایا:
- ساختاردهی بهتر کد: کدها مرتبتر و خواناتر میشوند.
- استفاده مجدد از کد: با استفاده از وراثت و کلاسها میتوان کدها را مجدداً استفاده کرد.
- مدیریت پروژههای بزرگ: شیگرایی کمک میکند تا پروژههای پیچیده بهتر مدیریت شوند.
معایب:
- پیچیدگی: یادگیری و پیادهسازی شیگرایی ممکن است برای مبتدیان دشوار باشد.
- مصرف حافظه بیشتر: استفاده از اشیاء در جاوا اسکریپت نسبت به کدهای سادهتر، حافظه بیشتری مصرف میکند.
نتیجهگیری
شیگرایی در جاوا اسکریپت یک ابزار قدرتمند برای ساخت برنامههای پیچیده و مقیاسپذیر است. با یادگیری مفاهیم پایهای مانند کلاسها، وراثت و کپسولهسازی میتوانید برنامههای حرفهایتر و ساختارمندتری بنویسید. پیشنهاد میشود پس از مطالعه این مقاله، پروژههای کوچک شیگرا بسازید و مفاهیم را در عمل پیادهسازی کنید تا به تسلط کامل برسید.