Polimorfismo en GoLang

El polimorfismo es la capacidad de un mensaje para mostrarse en más de una forma. El polimorfismo se considera una de las características importantes de la programación orientada a objetos y se puede lograr durante el tiempo de ejecución o de compilación. Golang es un lenguaje orientado a objetos ligero y admite polimorfismo solo a través de interfaces . Entendamos primero las interfaces con el siguiente ejemplo:
Ejemplo 1:
 

C

// Golang program to illustrate the
// concept of interfaces
package main
 
import (
    "fmt"
)
 
// defining an interface
type Figure interface{
 
    Area() float64
}
 
// declaring a struct
type Rectangle struct{
     
    // declaring struct variables
    length float64
    width float64
}
 
// declaring a struct
type Square struct{
     
    // declaring struct variable
    side float64
}
 
// function to calculate
// area of a rectangle
func (rect Rectangle) Area() float64{
 
    // Area of rectangle = l * b
    area := rect.length * rect.width
    return area
}
 
// function to calculate
// area of a square
func (sq Square) Area() float64{
     
    // Area of square = a * a
    area := sq.side * sq.side
    return area
}
 
// main function
func main() {
     
    // declaring a rectangle instance
    rectangle := Rectangle{
     
        length: 10.5,
        width: 12.25,
    }
     
    // declaring a square instance
    square := Square{
     
        side: 15.0,
    }
     
    // printing the calculated result
    fmt.Printf("Area of rectangle: %.3f unit sq.\n", rectangle.Area())
    fmt.Printf("Area of square: %.3f unit sq.\n", square.Area())
}

Producción: 
 

Area of rectangle: 128.625 unit sq.
Area of square: 225.000 unit sq.

Los objetos de diferentes tipos se tratan de manera coherente, siempre que se adhieran a una sola interfaz, que es la esencia del polimorfismo. Las variables declaradas en una interfaz son de tipo interfaz. Pueden tomar cualquier valor que implemente la interfaz que ayude a las interfaces a lograr el polimorfismo en el Golang. El siguiente ejemplo explica el concepto de polimorfismo:
Ejemplo 2:
 

C

// Golang program to illustrate the
// concept of polymorphism
package main
 
import (
    "fmt"
)
 
// defining an interface
type Reading interface{
 
    // declaring interface method
    reading_time() int
}
 
// declaring a struct
type Book struct{
     
    // declaring struct variables
    name string
    page_count int
}
 
// declaring a struct
type Newspaper struct{
 
    // declaring struct variables
    name string
    page_count int
}
 
// declaring a struct
type Magazine struct{
 
    // declaring struct variables
    name string
    page_count int
}
 
// function to calculate reading
// time for book
func (book Book) reading_time() int {
     
    // taking average speed
    // of 10 mins per page
    read_time := 10 * book.page_count
    return read_time
}
 
// function to calculate reading
// time for newspaper
func (newspaper Newspaper) reading_time() int {
 
    // taking average speed
    // of 30 mins per page
    read_time := 30 * newspaper.page_count
    return read_time
}
 
// function to calculate reading
// time for magazine
func (magazine Magazine) reading_time() int {
     
    // taking average speed
    // of 5 mins per page
    read_time := 5 * magazine.page_count
    return read_time
}
 
// function to calculate reading time
func calcReadingTime(ReadingTime []Reading) int {
 
        totalTime := 0
     
    // looping through elements
    // of the Reading array   
        for _, t := range ReadingTime {
         
        // run time polymorphism, call to
        // method depends on object being
        // referred at run time
            totalTime += t.reading_time()
        }
     
        return totalTime
}
 
// main function
func main() {
     
    // declaring a book instance
    book1 := Book{
        name: "Goosebumps",
        page_count: 150,
    }
     
    // declaring a newspaper instance
    newspaper1 := Newspaper{
        name: "TOI",
        page_count: 12,
    }
     
    // declaring a magazine instance
    magazine1 := Magazine{
        name: "Forbes",
        page_count: 40,
    }
     
    // array of type Reading interface
    ReadingTime := []Reading{book1, newspaper1, magazine1}
     
    // total reading time calculated
        totalTime := calcReadingTime(ReadingTime)
     
    // Printing total time for reading
        fmt.Printf("Total Time is %d minutes.\n", totalTime)
}

Producción: 
 

Total Time is 2060 minutes.

Publicación traducida automáticamente

Artículo escrito por vanigupta20024 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *