Interface এবং Polymorphism

Interfaces (ইন্টারফেস) - গো প্রোগ্রামিং (Go Programming) - Computer Programming

297

Go-তে Interface এবং Polymorphism এর ব্যবহার

Go-তে Interface এবং Polymorphism একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, যেগুলি আপনাকে কোডের নমনীয়তা, পুনঃব্যবহারযোগ্যতা, এবং ইন্টারফেসের মাধ্যমে বিভিন্ন টাইপের কার্যকারিতা একত্রিত করতে সহায়তা করে। চলুন, এগুলোর বিস্তারিত আলোচনা করি।


১. Interface in Go (ইন্টারফেস)

Interface হল একটি টাইপ যা কোনো নির্দিষ্ট মেথডের সেটের সইফ (contract) নির্ধারণ করে, কিন্তু এর বাস্তবায়ন (implementation) নির্ধারণ করে না। Go তে ইন্টারফেস কেবলমাত্র মেথড সিগনেচার ধারণ করে এবং কোনো ডেটা (ফিল্ড) ধারণ করে না। এর মাধ্যমে আপনি বিভিন্ন ধরনের টাইপের জন্য সাধারণ আচরণ নির্ধারণ করতে পারেন, যা polymorphism এর ভিত্তি তৈরি করে।

১.১ Interface ডিফাইনেশন

Go তে একটি ইন্টারফেস ডিফাইন করতে, শুধুমাত্র মেথড সিগনেচারগুলো নির্ধারণ করা হয়। ইন্টারফেসের নাম সাধারণত -er suffix সহ দেওয়া হয়, যেমন Speaker, Runner ইত্যাদি।

package main

import "fmt"

// Interface ডিফাইন করা
type Speaker interface {
    Speak() string
}

// Struct ডিফাইন করা
type Person struct {
    Name string
}

// Struct এর মেথড ডিফাইন করা
func (p Person) Speak() string {
    return "Hello, my name is " + p.Name
}

func main() {
    // Struct ইনস্ট্যান্স তৈরি
    p := Person{Name: "Alice"}

    // Interface এর সাথে কাজ করা
    var s Speaker = p
    fmt.Println(s.Speak()) // আউটপুট: Hello, my name is Alice
}

এখানে, Speaker হল একটি ইন্টারফেস যা Speak() মেথড ধারণ করে। Person struct এর মধ্যে Speak() মেথড রয়েছে, যা ইন্টারফেসের মেথডের সঙ্গে মিলছে, এবং তাই Person struct ইন্টারফেসের সইফ (contract) পূরণ করছে।

আউটপুট:

Hello, my name is Alice

১.২ Interface এর মাধ্যমে Polymorphism

Go-তে ইন্টারফেস পলিমরফিজম (Polymorphism) অর্জন করতে সহায়ক। আপনি যখন একটি ইন্টারফেসে একাধিক টাইপের ভিন্ন ভিন্ন মেথড যোগ করেন, তখন সেই ইন্টারফেসটি বিভিন্ন ধরনের ডেটা টাইপের জন্য কাজ করতে পারে। এটি polymorphism অর্জন করার একটি উপায়।

package main

import "fmt"

// Interface ডিফাইন করা
type Speaker interface {
    Speak() string
}

// Struct 1
type Person struct {
    Name string
}

// Struct 2
type Dog struct {
    Breed string
}

// Person struct এর মেথড
func (p Person) Speak() string {
    return "Hello, my name is " + p.Name
}

// Dog struct এর মেথড
func (d Dog) Speak() string {
    return "Woof! I am a " + d.Breed
}

func main() {
    var s Speaker

    // Person struct এর জন্য
    s = Person{Name: "Alice"}
    fmt.Println(s.Speak()) // আউটপুট: Hello, my name is Alice

    // Dog struct এর জন্য
    s = Dog{Breed: "Labrador"}
    fmt.Println(s.Speak()) // আউটপুট: Woof! I am a Labrador
}

এখানে, Speaker ইন্টারফেসটি Speak() মেথড ধারণ করে, যা দুটি আলাদা টাইপ—Person এবং Dog—এর জন্য ভিন্ন ভিন্ন বাস্তবায়ন প্রদান করছে। ইন্টারফেসের মাধ্যমে polymorphism কার্যকর হয়েছে, যেখানে এক ইন্টারফেস বিভিন্ন টাইপের আচরণ বহন করে।

আউটপুট:

Hello, my name is Alice
Woof! I am a Labrador

২. Polymorphism in Go (পলিমরফিজম)

Polymorphism একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং কনসেপ্ট যা একই ইন্টারফেস বা মেথডের মধ্যে ভিন্ন ভিন্ন কার্যকারিতা প্রদর্শন করার ক্ষমতা। Go তে, interface এর মাধ্যমে polymorphism অর্জন করা হয়। যেমন, এক ইন্টারফেসের জন্য একাধিক ভিন্ন struct এবং তাদের মেথড ব্যবহার করা যায়।

২.১ Polymorphism উদাহরণ

package main

import "fmt"

// Animal interface
type Animal interface {
    Sound() string
}

// Cat struct
type Cat struct {
    Name string
}

// Dog struct
type Dog struct {
    Name string
}

// Cat struct এর Sound মেথড
func (c Cat) Sound() string {
    return "Meow!"
}

// Dog struct এর Sound মেথড
func (d Dog) Sound() string {
    return "Woof!"
}

// Func to demonstrate polymorphism
func printSound(a Animal) {
    fmt.Println(a.Sound())
}

func main() {
    cat := Cat{Name: "Whiskers"}
    dog := Dog{Name: "Buddy"}

    // Polymorphism in action
    printSound(cat) // আউটপুট: Meow!
    printSound(dog) // আউটপুট: Woof!
}

এখানে, Animal ইন্টারফেসটি Sound() মেথড ধারণ করে। Cat এবং Dog struct দুটি আলাদা আলাদা Sound() মেথডের মাধ্যমে তাদের নিজস্ব সাউন্ড প্রিন্ট করে। Polymorphism এর মাধ্যমে একই printSound ফাংশনকে ভিন্ন টাইপের ডেটার সাথে ব্যবহার করা হয়েছে।

আউটপুট:

Meow!
Woof!

২.২ Empty Interface (অ্যামটি ইন্টারফেস)

Go তে একটি empty interface (অ্যামটি ইন্টারফেস) আছে, যা যেকোনো ধরনের ভ্যালু ধারণ করতে সক্ষম। এটি polymorphism এর আরও একটি শক্তিশালী রূপ। এটি যে কোনো টাইপকে গ্রহণ করে, এবং টাইপ নির্ধারণ ছাড়াই কাজ করতে পারে।

package main

import "fmt"

func printAnything(i interface{}) {
    fmt.Println(i)
}

func main() {
    printAnything(42)        // আউটপুট: 42
    printAnything("Hello")   // আউটপুট: Hello
    printAnything(3.14)      // আউটপুট: 3.14
}

এখানে, interface{} একটি empty interface যা যেকোনো টাইপ গ্রহণ করতে পারে। printAnything ফাংশনটি যেকোনো ধরনের ডেটা গ্রহণ করে এবং সেটি প্রিন্ট করে।

আউটপুট:

42
Hello
3.14

৩. Interface and Polymorphism এর সুবিধা

  • Dynamic behavior: Go তে interfaces এর মাধ্যমে আপনি একাধিক টাইপের জন্য এক ইন্টারফেস ব্যবহার করে বিভিন্ন আচরণ বা মেথড রিয়েলাইজ করতে পারেন, যা polymorphism এর শক্তি তৈরি করে।
  • Code Reusability: একটি ইন্টারফেস একাধিক struct এর জন্য কাজ করতে পারে, যার ফলে কোড পুনঃব্যবহারযোগ্য এবং কমপ্লেক্সিটি কমে যায়।
  • Loose coupling: Interface এর মাধ্যমে বিভিন্ন টাইপের কোড একত্রিত করতে পারলেও তাদের মধ্যে তেমন কোনো সরাসরি সম্পর্ক থাকে না, যার ফলে কোডে পরিবর্তন করা সহজ হয় এবং সিস্টেম কমপ্লেক্সিটি কম হয়।

সারসংক্ষেপ

  • Interface: Go তে interface হল এমন একটি টাইপ যা শুধুমাত্র মেথড সিগনেচার ধারণ করে, কিন্তু এর বাস্তবায়ন করে না। ইন্টারফেসের মাধ্যমে polymorphism অর্জিত হয়।
  • Polymorphism: Polymorphism হল এক ইন্টারফেসের জন্য একাধিক টাইপের মেথড এবং কার্যকারিতা থাকতে পারা। Go তে এটি ইন্টারফেসের মাধ্যমে সহজে অর্জন করা যায়।
  • Empty Interface: Go তে একটি empty interface (interface{}) ব্যবহার করে যেকোনো টাইপকে গ্রহণ করা সম্ভব, যা polymorphism এর আরও শক্তিশালী রূপ তৈরি করে।

Go তে interface এবং polymorphism এর মাধ্যমে আপনি কোডের নমনীয়তা, পুনঃব্যবহারযোগ্যতা, এবং দক্ষতা বৃদ্ধি করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...