Golang | Polimorfismo usando interfaces

La palabra polimorfismo significa tener muchas formas. O en otras palabras, podemos definir el polimorfismo como la capacidad de un mensaje para mostrarse en más de una forma. O, en términos técnicos, polimorfismo significa el mismo nombre de método (pero diferentes firmas) que se usa para diferentes tipos. Por ejemplo, una mujer al mismo tiempo puede tener diferentes características. Como una madre, una esposa, una hermana, un empleado, etc. Entonces, la misma persona posee un comportamiento diferente en diferentes situaciones. Esto se llama polimorfismo.
En el lenguaje Go, no podemos lograr el polimorfismo con la ayuda de clases porque el lenguaje Go no admite clases, pero puede lograrlo mediante el uso de interfaces .. Como ya sabemos, las interfaces están implícitamente implementadas en Go. Entonces, cuando creamos una interfaz y otros tipos quieren implementar esa interfaz, esos tipos usan esa interfaz con la ayuda de los métodos definidos en la interfaz sin conocer el tipo. En una interfaz, una variable de un tipo de interfaz puede contener cualquier valor que implemente la interfaz. Esta propiedad ayuda a las interfaces a lograr polimorfismo en el lenguaje Go. Analicemos con la ayuda de un ejemplo:

Ejemplo:

// Go program to illustrate the concept
// of polymorphism using interfaces
package main
  
import "fmt"
  
// Interface
type employee interface {
    develop() int
    name() string
}
  
// Structure 1
type team1 struct {
    totalapp_1 int
    name_1     string
}
  
// Methods of employee interface are
// implemented by the team1 structure
func (t1 team1) develop() int {
    return t1.totalapp_1
}
  
func (t1 team1) name() string {
    return t1.name_1
}
  
// Structure 2
type team2 struct {
    totalapp_2 int
    name_2     string
}
  
// Methods of employee interface are
// implemented by the team2 structure
func (t2 team2) develop() int {
    return t2.totalapp_2
}
  
func (t2 team2) name() string {
    return t2.name_2
}
  
func finaldevelop(i []employee) {
  
    totalproject := 0
    for _, ele := range i {
  
        fmt.Printf("\nProject environment = %s\n ", ele.name())
        fmt.Printf("Total number of project %d\n ", ele.develop())
        totalproject += ele.develop()
    }
    fmt.Printf("\nTotal projects completed by "+
        "the company = %d", totalproject)
}
  
// Main function
func main() {
  
    res1 := team1{totalapp_1: 20,
        name_1: "Android"}
  
    res2 := team2{totalapp_2: 35,
        name_2: "IOS"}
  
    final := []employee{res1, res2}
    finaldevelop(final)
  
}

Producción:

Project environment = Android
 Total number of project 20
 
Project environment = IOS
 Total number of project 35
 
Total projects completed by the company = 55

Explicación: En el ejemplo anterior, tenemos un nombre de interfaz como empleado. Esta interfaz contiene dos métodos, es decir, el método de desarrollo() y nombre() , aquí, el método de desarrollo() devuelve el número total de proyectos y el método de nombre() devuelve el nombre del entorno en el que se desarrollan.

Ahora tenemos dos estructuras, es decir, team1 y team2 . Ambas estructuras contienen dos o dos campos, es decir, totalapp_1 int , name_1 string , totalapp_2 int y name_2 string . Ahora, estas estructuras (es decir, equipo1 y equipo2 ) están implementando los métodos de la interfaz de empleado.

Después de eso, creamos una función llamada finaldevelop() que devuelve el número total de proyectos desarrollados por la empresa. Acepta una porción de las interfaces de los empleados como argumento y calcula el número total de proyectos desarrollados por la empresa iterando sobre el método de porción y llamada a desarrollar() en cada uno de sus elementos. También muestra el entorno del proyecto llamando al método name() . De acuerdo con el tipo concreto de la interfaz de empleado, se llamarán a diferentes métodos de desarrollo() y nombre() . Entonces, logramos el polimorfismo en la función finaldevelop() .

Si agrega otro equipo en este programa que implementa la interfaz de empleado, esta función finaldevelop() calculará el número total de proyectos desarrollados por la empresa sin ningún cambio debido al polimorfismo.

Publicación traducida automáticamente

Artículo escrito por ankita_saini 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 *