آموزش جامع کلاسها و اینترفیسها در TypeScript
🎯 اهداف یادگیری
- آشنایی با مفاهیم کلاس و اینترفیس در TypeScript
- یادگیری نحوه تعریف و استفاده از کلاسها
- درک تفاوتهای بین اینترفیس و نوع (type)
- کاربرد اینترفیسها در پیادهسازی الگوهای طراحی
📌 مقدمهای بر کلاسها در TypeScript
کلاسها بلوکهای ساختمانی برنامههای شیءگرا هستند که امکان کپسولهسازی، وراثت و چندشکلی را فراهم میکنند:
typescript
class Person { firstName: string; lastName: string; age: number; constructor(firstName: string, lastName: string, age: number) { this.firstName = firstName; this.lastName = lastName; this.age = age; } getFullName(): string { return `${this.firstName} ${this.lastName}`; }}const person = new Person('علی', 'محمدی', 30);console.log(person.getFullName()); // خروجی: علی محمدی
ویژگیهای کلاسها در TypeScript:
- اعضای کلاس: خصوصیات (properties) و متدها (methods)
- مشخصات نوع (Type Annotations): تعیین نوع برای خصوصیات و پارامترها
- سازنده (Constructor): تابع ویژه برای مقداردهی اولیه
📌 سطح دسترسی در کلاسها
TypeScript از سه سطح دسترسی پشتیبانی میکند:
typescript
class BankAccount { public accountNumber: string; // قابل دسترسی از همه جا private balance: number; // فقط درون کلاس protected owner: string; // درون کلاس و کلاسهای فرزند constructor(accountNumber: string, initialBalance: number, owner: string) { this.accountNumber = accountNumber; this.balance = initialBalance; this.owner = owner; } public deposit(amount: number): void { this.balance += amount; } public getBalance(): number { return this.balance; }}
قوانین سطح دسترسی:
- public: پیشفرض - قابل دسترسی از هرجای برنامه
- private: فقط درون خود کلاس قابل دسترسی است
- protected: درون کلاس و کلاسهای مشتق شده قابل دسترسی است
📌 وراثت و کلاسهای مشتق شده
TypeScript از وراثت کلاسها با کلمه کلیدی extends
پشتیبانی میکند:
typescript
class Animal { constructor(public name: string) {} move(distance: number = 0) { console.log(`${this.name} moved ${distance}m.`); }}class Dog extends Animal { constructor(name: string) { super(name); // فراخوانی سازنده کلاس والد } bark() { console.log('Woof! Woof!'); } move(distance: number = 5) { // بازنویسی متد move از کلاس والد console.log('Running...'); super.move(distance); }}const dog = new Dog('Rex');dog.bark(); // خروجی: Woof! Woof!dog.move(); // خروجی: Running... Rex moved 5m.
مفاهیم کلیدی وراثت:
- extends: برای ایجاد رابطه وراثت بین کلاسها
- super: برای دسترسی به اعضای کلاس والد
- بازنویسی متد (Method Overriding): تغییر رفتار متدهای ارثبری شده
📌 اینترفیسها در TypeScript
اینترفیسها قراردادهایی هستند که ساختار شیء را تعریف میکنند:
typescript
interface User { id: number; username: string; email?: string; // پارامتر اختیاری register(): string;}class Member implements User { id: number; username: string; constructor(id: number, username: string) { this.id = id; this.username = username; } register(): string { return `${this.username} ثبت نام کرد`; }}const member = new Member(1, 'user123');console.log(member.register()); // خروجی: user123 ثبت نام کرد
ویژگیهای اینترفیسها:
- تعریف ساختار: مشخص میکند یک شیء باید چه ویژگیهایی داشته باشد
- پیادهسازی با implements: کلاسها میتوانند اینترفیسها را پیادهسازی کنند
- پارامترهای اختیاری: با علامت سؤال (?) مشخص میشوند
📌 تفاوت اینترفیس و نوع (type)
اینترفیس | نوع (type) |
---|---|
برای تعریف شکل شیء استفاده میشود | برای تعریف انواع دلخواه (union, intersection, ...) |
قابل توسعه است (با extends) | غیرقابل گسترش است |
برای پیادهسازی کلاسها مناسب است | برای ترکیب انواع مختلف مناسب است |
📌 تمرین عملی
اینترفیس و کلاس زیر را کامل کنید:
typescript
interface Vehicle { // ویژگیهای مورد نیاز را اضافه کنید // حداقل دو متد تعریف کنید}class Car implements Vehicle { // پیادهسازی اینترفیس Vehicle // یک متد اضافه برای کلاس Car بنویسید}
راهنمای تمرین:
- ویژگیهای اساسی یک وسیله نقلیه را در اینترفیس تعریف کنید
- متدهای start و stop را اضافه کنید
- کلاس Car را پیادهسازی کنید
- متد honk را به کلاس Car اضافه کنید
📌 قدم بعدی
در درس بعدی با ساخت لیست کارها با جاوااسکریپت آشنا خواهیم شد!