---
chapter: 15
pageNumber: 96
description: தளர்வான இணைப்பியல் (loose coupling) மற்றும் நெகிழ்வுத்தன்மையை (flexibility) உறுதி செய்யும் "has-a (கொண்டுள்ளது)" உறவுகளை உருவாக்க கலவை (Composition) பயனுள்ளதாக இருக்கும். நம் வகுப்பு ஒரு சுவர் என்று கற்பனை செய்தால், கலவையின் மூலம் அதை உருவாக்கும் வகுப்புகள் செங்கற்கள் போன்றவை - சிறிய மற்றும் நிர்வகிக்கக்கூடிய கூறுகள் (components).
---

# கலவை (Composition)

தளர்வான இணைப்பியல் மற்றும் நெகிழ்வுத்தன்மையை உறுதி செய்யும் "has-a (கொண்டுள்ளது)" உறவுகளை உருவாக்க கலவை பயனுள்ளதாக இருக்கும். நம் வகுப்பு ஒரு சுவர் என்று கற்பனை செய்தால், கலவையின் மூலம் அதை உருவாக்கும் வகுப்புகள் செங்கற்கள் போன்றவை - சிறிய மற்றும் நிர்வகிக்கக்கூடிய கூறுகள்.

## கலவையின் நன்மைகள் (Benefits of composition)

  + மறுபயன்பாடு (Reusability) - பயன்பாட்டின் (application) வெவ்வேறு பகுதிகள் முழுவதும் கூறுகளை மீண்டும் பயன்படுத்தலாம்.

  + பராமரிப்பு (Maintainability) - ஒரு கூறில் ஏற்படும் மாற்றங்கள் மற்றவற்றுடன் குறைந்தபட்ச தாக்கத்தை ஏற்படுத்துகின்றன.

  + நெகிழ்வுத்தன்மை (Flexibility) - பெரிய மற்றும் சிக்கலான கட்டமைப்புகளை விட வெவ்வேறு கூறுகளை மாற்றுவதன் மூலம் பயன்பாட்டின் நடத்தை மாற்றுவது எளிது.

  + ஒற்றை பொறுப்பு (Single responsibility) - இது ஒவ்வொரு வகுப்பையும் இணைத்து (encapsulated) ஒரு ஒற்றை பணியில் கவனம் செலுத்துகிறது, ஒற்றை பொறுப்புக் கொள்கையைக் கடைப்பிடிக்கிறது.

```javascript
class Book {
  constructor(title, author) {
    this.title = title;
    this.author = author;
  }
}

class Library {
  constructor() {
    this.books = [];
  }
  
  add(book) {
    this.books.push(book);
    return `${book.title} நூலகத்தில் சேர்க்கப்பட்டது.`;
  }
}

let myBook = new Book("The Great Gatsby", "F. Scott Fitzgerald");
let myLibrary = new Library();

console.log(myLibrary.add(myBook)); // The Great Gatsby நூலகத்தில் சேர்க்கப்பட்டது.
```

மேலே உள்ள எடுத்துக்காட்டில், பெரிய `Library` வகுப்பை உருவாக்க `Book` வகுப்பின் நிகழ்வுகள் (instances) பயன்படுத்தப்படுகின்றன. இரண்டு வகுப்புகளுக்கு இடையே "has-a" உறவை உருவாக்க (நூலகம் புத்தகங்களைக் கொண்டுள்ளது) கலவை பயன்படுத்தப்படுகிறது, இது தளர்வான இணைப்பியலை உறுதி செய்கிறது. `Book` வகுப்பில் ஏற்படும் மாற்றங்கள் `Library` வகுப்பில் பிரதிபலிக்காது, மற்றும் நேர்மாறாகவும்.

## கலவை (vs) மரபுரிமை (Composition vs Inheritance)

மரபுரிமை "is-a" உறவை உருவாக்கும் போது (எ.கா., `Car` ஒரு `Vehicle`), கலவை "has-a" உறவை உருவாக்குகிறது (எ.கா., ஒரு `Car` `Engine` ஐக் கொண்டுள்ளது). இரண்டையும் பயன்படுத்துவதற்கான சில நன்மைகள் மற்றும் தீமைகள் இங்கே:

| **அம்சம் (Feature)** | **மரபுரிமை (Inheritance)**                                                                 | **கலவை (Composition)**                                                              |
|----------------------|---------------------------------------------------------------------------------|-------------------------------------------------------------------------------|
| **நன்மைகள் (Pros)**  | - வகுப்பு உறவுகளை மாதிரியாக்க (modeling class relationships) எளிய மற்றும் உள்ளுணர்வு <br> - அடிப்படை வகுப்புகள் (base classes) மூலம் குறியீடு மறுபயன்பாடு | - தளர்வான இணைப்பியல் (Loose coupling) <br> - அதிக நெகிழ்வுத்தன்மை <br> - எளிதான பராமரிப்பு           |
| **தீமைகள் (Cons)**   | - இறுக்கமான இணைப்பியல் (Tight coupling) <br> - குறைந்த நெகிழ்வுத்தன்மை <br> - ஆழமான மரபுரிமை படிநிலைகள் (Deep inheritance hierarchies) | - அமைக்கவும் புரிந்துகொள்ளவும் மிகவும் சிக்கலானது <br> - குறைவான வகுப்புகள் ஆனால் அதிக பொருள்கள் (objects) |
