¿Es Go orientado a objetos?

5/30
Recursos

Aportes 14

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Como dicen en la pagina de FAQs de go, si es orientado a objetos pero no completamente.

https://golang.org/doc/faq#Is_Go_an_object-oriented_language

Es todo acerca de tipo
Es go un lenguaje orientado a objetos? Go tiene aspectos de OOP. Pero todo es acerca de TIPOS. Creamos TIPOS en Go; TIPOS definidos por el usuario. Entonces podemos tener VALORES de ese tipo.
Podemos asignar VALORES de un TIPO definido por el usuario a VARIABLES.
Go es Orientado a Objetos

  1. Encapsulación
    a. Estado(“campos”)
    b. Comportamiento (“métodos”)
    c. Exportado & No exportado; visible & no visible
    Reusabilidad
    a. herencia (“tipos embebidos”)
    Polimorfismo
    a. interfaces
    Overriding
    a. "promoción"
    OOP Tradicional
  2. Clases
    a. Estructura de dato describiendo un tipo de objeto
    b. Puedes crear “instancias”/ “objetos” de la clase / prototipo
    c. Las clases almacenan ambos:
    i. estado / datos / campos
    ii. comportamiento / métodos
    d. público / privado
    Herencia
  • En Go:
  1. No creas clases, creas un TIPO

  2. No creas instancias, creas un VALOR de un TIPO
    Tipos definidos por el usuario

  • Podemos declarar un nuevo tipo

  • foo

  • El tipo subyacente de foo es int

  • Conversión a int

  • int(miEdad)

  • Convirtiendo tipo foo a tipo int

  • ES UNA MALA PRÁCTICA HACER ALIAS DE TIPOS

  • Excepción:

  • Si necesitas asignarle métodos a un tipo

  • Ver el paquete de tiempo para un ejemplo
    type Duration int64
    Duration tiene métodos asignados

  • Tipos Nombrados vs Tipos Anónimos

Tipos anónimos son indeterminados. Aún no han sido declarados como un tipo. El compilador tiene flexibilidad con tipos anónimos. Puedes asignar un tipo anónimo a una variable declarada de cierto tipo. Si la asignación puede ocurrir, el compilador hará el trabajo de determinar el tipo; el compilador hará una conversión implícita. No puedes asignar un tipo nombrado a un tipo de diferente nombre.
Alineamiento arquitectónico y más
Convención: organiza tus campos lógicamente. Legibilidad y claridad ganan en rendimiento como punto crítico. Go será de buen rendimiento. Ve primero por legibilidad. Sin embargo, si estás en una situación donde necesitas darle prioridad al rendimiento: agrega los campos del más grande al de menor tamaño, por ejemplo: int 64, int32, float32, bool

En mi punto de vista, Go puede simular ciertos comportamientos de POO, pero no lo es.

Yo creo que si es un lenguaje orientado a objetos ya que con GO bien podemos implementar los 4 pilares de la POO aunque con ciertas implementaciones diferentes o limitantes , con respecto a las ya acostumbradas de otros lenguajes de POO:
Abstracción
Encapsulamiento
Polimorfismo
Herencia

Golang es un lenguaje que puede tomar ciertas características de un lenguaje orientado a objetos, podemos tener una estructura que tendrá la colección de nuestros datos y/o propiedades y tener receive functions que seria nuestros métodos públicos y privados.

El mismo creador de la base de OOP ha dicho que su nombre puede generar confusión, que en realidad la base está en la comunicación (este link muestra un poco). Además el mismo uncle Bob reconoce como la clave de OOP el polimorfismo, lo cual consigue Go a partir basado en interfaces. Solo con esto, diría que es suficiente para poder aplicar el pilar de OOP, sin embargo, el resto al final es una formalidad

yo leyendo poco respecto al tema creo que Go/Golang es un lenguaje orientado a objetos, tiene los struct que como en C generas la estructura de tu objeto, pero visto desde Java el acceso a los atributos es muy diferente. Yo creo que se puede emular todo, pero si son struct públicos es mucho más fácil el acceso.

Go no es orientado a objetos (mi opinión), todos los lenguajes pueden llegar a emular los comportamientos pero no los tienen de manera nativa. Incluso C que es funcional puedes manejar funciones para emular POO pero no lo es.

Yo vengo de Java y kotlin y siento que si es orientado a objetos, pero a su manera, utilizando structs en lugar de clases

Segun tu explicación, Si es orientado a Objetos y por lo que veo. Vamos a ver que tal mas adelante .!

Creo que si, porque podría hacer todo lo que java hace, pero de una manera diferente que no se siente orientado a objetos, porque por ejemplo los métodos en java van dentro de la clase y en go podemos declararlos a fuera, como que los struct son las clases y de igual manera tienen identificadores de acceso, se puede encapsular, creo que no se puede hacer polimorfismo.
Siento que es una evolución del POO.-

Go puedes simular algunas cosas del paradigma orientado a objetos, pero la realidad es que no es.

Ya que no tiene el uso de clases explicitamente se puede considerar a GO como un lenguaje parcialmente orientado a objetos hehe

Apuntes:
¿Es Go Orientado a objetos?

  • POO se ha convertido en uno de los paradigmas de programación predominante en la industria.
  • POO puede llegar a ser muy riguroso, pero a cambio permite una alta reutiliuzación de código y la aplicación de un sinnúmero de patrones de diseño.
  • Go puede alcanzar la aplicación de los conceptos de POO, pero de una forma diferente a lenguajes como Java y Python.